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

简介: 本节书摘来自华章出版社《编程原本 》一书中的第3章,第3.1节,作者(美)斯特潘诺夫(Stepanov, A.),(美)麦克琼斯(McJones, P.),更多章节内容可以访问云栖社区“华章计算机”公众号查看

3.1 可结合性

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

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

当然,也存在不可结合的二元运算,例如除法和减法.
如果根据上下文完全可以看清所用的可结合二元运算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定理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.

相关文章
|
1月前
|
C++
关系运算符及其优先次序:编程中的比较逻辑
在编程中,关系运算符是用于比较两个值之间关系的一种重要工具。它们帮助我们根据这些关系(如相等、不等、大于、小于等)来做出决策或执行特定的代码块。理解关系运算符及其优先次序对于编写正确和高效的代码至关重要。
16 0
|
5月前
|
编译器 测试技术 C语言
【C语言航路外传】隐式转换与优先级的那点事(你程序总是出bug的一个重要原因)
【C语言航路外传】隐式转换与优先级的那点事(你程序总是出bug的一个重要原因)
46 0
new操作符具体干了什么呢?
new操作符具体干了什么呢?
|
9月前
|
C语言 索引
C语言基础知识:操作符详解(附操作符优先级及结合性一览表)(下)
C语言基础知识:操作符详解(附操作符优先级及结合性一览表)(下)
55 0
|
9月前
|
C语言
C语言基础知识:操作符详解(附操作符优先级及结合性一览表)(上)
C语言基础知识:操作符详解(附操作符优先级及结合性一览表)
67 0
|
存储 编译器 C语言
浅识C语言中那些操作符(保证足够详细)
浅识C语言中那些操作符(保证足够详细)
45 0
浅识C语言中那些操作符(保证足够详细)
C++中逻辑操作符的陷阱
C++中逻辑操作符的陷阱
49 0
|
人工智能 Java 程序员
运算符特别说明|学习笔记
快速学习运算符特别说明。
61 0
|
人工智能 Java Go
算数运算符细节讨论|学习笔记
本节课来看算术运算符的细节。
64 0
|
前端开发 JavaScript
中高级前端? 这些一元运算符,你真的搞清楚了吗
前言 一元运算符,不太起眼,作用很大,请别忽视她! 走近她,爱上她!
217 0
中高级前端? 这些一元运算符,你真的搞清楚了吗

热门文章

最新文章