《编程原本 》一3.1 可结合性

3.1 可结合性

二元运算是有两个参数的运算:

二元的加法和乘法是数学的核心概念,常用的这类东西很多,如求较小或较大的值,合取和析取,集合的交与并等.这些运算都是可结合的(associative):

当然,也存在不可结合的二元运算,例如除法和减法.
如果根据上下文完全可以看清所用的可结合二元运算op,我们常用隐式的乘法记法将其写成ab而不是op(a,b).由于可结合性,在涉及两次或多次应用op的表达式里不需要括号,因为所有分组方式都等价:((a0a1))an.1=
••••••
=a0((an.2an.1))=a0a1an.1.当a0=a1==an.1=a时将其
•••••••••••••••
写成a n ,称为a的n次幂(power).
引理3.1 a n a m= a m a n= a n+m (同一元素的幂可交换.)
引理3.2 (a n)m= a nm
当然,(ab)n= a nbn 未必总成立,只在运算还可以交换时成立.
如果f和g是同一定义域上的变换,它们的复合(composition)gf也是一个变换,将x映射到g(f(x))..
引理3.3 二元运算的复合是可结合的.
在可结合运算op的定义域中选一个元素a,并把表达式op(a,x)看作只有一个形参x的一元运算,就可以把a看作是一个“乘以a”运算.这说明可以采用与变换的幂fn 的同样记法,将一个元素在可结合二元运算下的幂记为an 是合适的.这一对偶性质使我们可以用取自前一章的一个算法,证明一个有关可结合运算的幂的有趣定理.如果对某个可结合运算,存在整数0<n<m使xn= x m ,则称x在该运算下具有有穷的阶(.niteorder).如果对某可结合运算有x=x2 ,则称x是该运算的幂等元素(idempotentelement).
定理3.1一个有穷阶元素必定有一个幂等的幂(Frobenius[1895]).
证明.设x是可结合运算op下的一个有穷阶元素.令g(z)=op(x,z).由于x的阶有穷,它在g下的轨道有循环.根据定理的条件,存在n.0使得

collisionpoint(x,g)=gn(x)=g2n+1(x)

这样

g n(x)=xn+1g 2n+1(x)=x2n+2= x 2(n+1)=(x n+1)2

而且x n+1就是x的幂等的幂.
引理3.4也可以在上面的证明里用collisionpointnonterminatingorbit.

时间: 2024-11-17 22:09:12

《编程原本 》一3.1 可结合性的相关文章

《编程原本 》一第3章 可结合运算

第3章 可结合运算 本章讨论可结合的二元运算.可结合性使人可以重组相邻的运算,基于这种重组能力可以得到一个计算二元运算的幂的有效算法.规范性使我们可以用许多程序变换来优化这一算法.我们随后要利用该算法在对数时间里计算各种线性递归,例如计算斐波那契数.

《编程原本 》一导读

前 言 本书将演绎方法应用于程序设计,讨论程序与保证它们能正确工作的抽象数学理论之间的联系.书中把反映这些理论的规程(speci.cation),基于这些理论写出的算法,以及描述算法性质的引理和定理一起呈现给读者.这些算法在一种实际程序设计语言里的实现是本书的中心.虽然规程主要是供人阅读,但它们也应该(或者说必须)严格地与非形式化的.供机器使用的代码相结合,必须在通用的同时又是抽象而且精确的.与在其他科学和工程领域里的情况一样,适合作为程序设计的基础的同样是演绎方法.演绎方法能帮助我们将复杂系统

《编程原本 》一第2章 变换及其轨道

第2章 变换及其轨道 本章把变换定义为从一个类型到它自身的规范函数.从一个初始值开始连续应用一个变换,就得到了这个值的轨道.我们要实现一个能确定轨道结构的算法,它只依赖于变换的规范性和轨道的有穷性.这个算法可以应用到不同的领域.例如,可以用它检查一个链接表是否为循环的,或用于分析一个伪随机数生成器.我们将为这一算法推导出一套接口,形式上是一集过程及其参数和结果的定义.对轨道结构算法的分析,使我们可以用最简单的方式介绍自己的编程方法.

《编程原本 》一1.3 对象

1.3 对象 一个存储(memory)就是一集存储字(word),其中每个字有一个地址(address)和一项内容(content).地址是一种固定大小的值,这个大小称为地址长度.而内容是另一固定大小的值,其长度称为字长.通过装载(load)操作可以取得一个地址的内容.通过保存(store)操作改变一个地址所关联的内容.存储的实例如计算机主存里的一组字节,或磁盘驱动器里的一组区块. 一个对象(object)就是一个具体实体的表示,并且是作为某个存储里一个值.对象有状态(state),其状态就是某

《编程原本 》一1.1 理念范畴: 实体, 类别, 类属

1.1 理念范畴: 实体, 类别, 类属 为了解释什么是对象.类型,以及其他基本的计算机概念,概述一下与这些概念对应的理念范畴是很有帮助的.抽象实体(abstractentity)指永存的不变的事物,而具体实体(concreteentity)指具体的个别的事物,其出现和存在与时间和空间有关.一个属性(attribute)是具体实体与抽象实体之间的一种对应关系,它描述了该具体实体的某种性质.度量或者品质.标识(identity)是我们感知实在世界的一种基本概念,它确定一个事物在随着时间变化中的不变

《编程原本 》一1.2 值

1.2 值 如果不知道如何解释,在计算机里能看到的也就是一些0和1.一项数据(datum)就是一个0和1的有穷序列.一个值类型(valuetype)是一个(抽象或具体)类别和一集数据之间的一个对应关系.对应于某特定实体的数据称为该实体的一个表示(representation);而这一实体称为相应数据的解释(interpretation).我们把一项数据和它的解释称为一个值(value).值的例子如采用大尾格式的32位二进制补码表示的整数;或者用连续的两个32位二进制序列表示的有理数,这两个二进制

《编程原本 》一2.6 总结

2.6 总结 抽象使我们可以定义出一些能用于不同领域的抽象过程.规范性和函数的类型在这里起着最重要的作用:fast和slow能走同一条轨道的基础就是规范性.开发一批专有术语(例如,轨道的类型和规模),是最基础最重要的工作.一些附属类型,例如距离类型,也需要精确地定义.

《编程原本 》一第1 章 基础

第1 章 基础 本章从相关思想的一个简洁分类开始介绍一些术语:值.对象.类型.过程和概念,它们表示了与计算机有关的许多不同的理念范畴.这里还要详细讨论本书的中心观点:规范性.对一个过程,规范性意味着它对相等的参数总返回相等的结果.对一个类型,规范性意味着它应该有相等运算符,以及保证相等关系的拷贝构造函数和赋值.规范性使我们能应用等值推理(使用等值替换)去变换和优化程序.

《编程原本 》一2.1 变换

2.1 变换 虽然从任意一组类型到任意类型的函数都存在,但是有些具有特殊签名的函数类更为常用.本书中经常用的是两类函数:同源谓词和同源运算.同源谓词在形式上都是Tו••× T → bool;同源运算都是形如Tו••× T → T的函数.一般而言存在着任意的n元谓词和n元运算,但实际中遇到最多的还是一元和二元的同源谓词,一元和二元的同源运算.谓词是返回真值的函数: Predicate(P).FunctionalProcedure(P)∧Codomain(P)=bool 同源谓词也是同源函数: