こんなことをきれいな写真で考えるのが一番簡単だと思います。いくつかのグラフを作成してみませんか?
最初の例
1/2/3/4
1/2/3/5
1/2/4/3
1/2/4/5
1/2/5/3
1/2/5/4
...グラフ形式で次のようになります。
上から下への各パス(例1->2->4->3
)は、初期形式の行に対応します。
そのグラフから始めると、(おそらく)グラフ上で小さなアルゴリズムを実行して、探している方法でグラフを単純化することができます。これが私たちが試みることです:
- グラフの上部から開始し、レベルごとに下に移動します。(最初のレベルには青いノードのみが含まれます
1
。)
- 現在のレベルのノードごとに、子の数を数えます。子が1つしかない場合は、ノードをスキップします。(青いノード
1
には子が1つしかないため、緑のノードにスキップします2
。)
- 複数の子のそれぞれについて、その子とその孫を含むセットを作成します。(赤いノード
3
にはセットがあり、{3,4,5}
赤いノードにはセットがあり、赤いノードには4
セットがあります。){3,4,5}
5
{3,4,5}
- これらのセットのいずれかが同一である場合は、関連付けられた子/孫を、セットを含む孫を指す、子を含む単一のノードに置き換えます。(3つの赤いノードはすべて同じセットであるため、すべて置き換えられます。)

2番目の例
1/2/3/4
1/2/3/5
1/2/4/3
1/2/4/5
1/2/5/3
...グラフ形式で次のようになります。

赤いノード3
と4
は同じセット(つまり{3,4,5}
)を持っているので、それらは置き換えられます。赤いノードには赤いノードと5
同じセットがないので、そのままにしておきます。3
4

前と同じように、簡略化されたツリーを通る各パスは、出力の1行を表します。
(曾孫がいるときに子供/孫を入れ替えるとどうなるかについては説明していません。実際には一番下の列から始めて、上に向かって進んでいく必要があるかもしれません。)