TAOCP Volume1で説明されている1つのアルゴリズムを理解できません。次のページに記載されている例と比較しながら、「アルゴリズムA」と名付けられたセクション1.3.3は、「サイクル形式で順列を乗算する」と記載されています。
明確でないステップは、8行目と9行目に記載されています。 CURRENT値が「d」であった前の反復の後で「CURRENT」値が「g」になるにはどうすればよいですか?
詳細については、Knuthによる「TheArt of Computer Programming Volume1」(セクション1.3.3)を参照してください。このアルゴリズムの詳細な説明が含まれています。
詳細なアルゴリズム:
アルゴリズムA(サイクル形式で順列を乗算します)
このアルゴリズムは、(6)のようなサイクルの積を取り、互いに素なサイクルの積の形で結果の順列を計算します。簡単にするために、シングルトンサイクルの削除についてはここでは説明しません。これは、アルゴリズムのかなり単純な拡張です。このアルゴリズムが実行されると、入力式の要素に連続して「タグ付け」されます。つまり、処理された入力式のシンボルを何らかの方法でマークします。
私の本のコピーでは、行#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は3回実行されます。
行7と8を比較すると、新しくタグ付けされたdとbを確認できます。特に、行#8のステップA5内のステップA4の2回目の反復が、CURRENTの原因です。 gに設定します。