我无法理解TAOCP第1卷中讨论的一个算法;第1.3.3节将其命名为“算法A”,称为“循环形式的多个排列”,并与下一页中的示例进行了比较。
在第8行和第9行中提到了不清楚的步骤;例如,在上一次迭代之后,“当前”值如何变成"g“,当前值为"d"?
详情请参阅Knuth的“计算机编程艺术第1卷”(第1.3.3节)。它包含了该算法的详细描述。
详细算法:
该算法采用循环的乘积(如(6) ),以不相交循环的乘积形式计算得到的排列。为了简单起见,这里不描述移除单例循环;这将是算法的一个相当简单的扩展。在执行此算法时,我们依次“标记”输入公式的元素;也就是说,我们以某种方式标记已处理的输入公式中的符号。
发布于 2013-09-02 16:49:13
在我的书中,第7行具有当前值d,第8行具有当前值g,第9行具有当前值a。因此,我假设您对第7行和第8行之间的转换感到困惑,如下所示:
Row # After step no. START CURRENT ( a c f g a ( b c d b ( a e d a ( f a d e f ( b g f a e b Output
#7 A5 a d x x x x x x x x x x x x x x d
#8 A5 a g x x x x x x x x x x x x x x x x g第8行以第7行中描述的状态开始,并执行步骤A5,该步骤将光标移回列表的开头,然后返回到步骤A4。在这里,执行步骤A4三次:
如果您比较第7行和第8行,可以看到新标记的d和b。特别是,第8行‘S步骤A5中的步骤A5的第二次迭代是导致当前设置为g的原因。
https://softwareengineering.stackexchange.com/questions/209063
复制相似问题