C1.1 - 算法注记
第一章内容主要以辗转相除展开具体内容。其中对于算法E的解释,亦或是(1)(2)变式都不易产生困惑。
但是变式(3)会遇到翻译上的理解障碍。主要问题是,段落中前半部分是对式(2)的说明,后半部分是对(3)的推导
参考习题8的设定,给出我认为比较通俗的解释:
推导式如下:
1.f((σ,j)) = (σ,aj)
2.f((σ,j)) = (αΦjω,bj)
3.f((σ,N)) = (σ,N)
上述公式,其实就是把除法变相运用在字符串处理中,m个a,n个b,每次删除j数量的a和b(公式2,每次删除一个a和一个b并在最左端加上一个c,直到不存在ab这种字符组合,一共会重复j次这样的操作),若字符串中不再存在a或者不存在b(即更小的值被除掉了,参考表达式 m = qn + r),则已经向原字符串中插入了j个c。重复该过程时,隐含的设定是把结果字符串中左侧的c看成a,右侧的字母看成b。
虽然上面用到的是集合的关系,以m=3,n=2为例,A*为[{aaabb}, {aabb}, {abb}, {bb}, {aaab}, {aaa}, {aab}, {aa}, {ab}, {a}].其实就包含了每次删除之后的结果(每次删除其实就是从子集i变成了子集j)。这就是这边所说的模式匹配的概念
最后,看原书的习题解答,有: 令A = {a, b, c},N = 5, 算法结束时得到字符串agcd(m,n)
也就不难理解为什么说:“每次迭代要么减少m,要么保持m不变并减少n”了。