1

今日、リンクされたリストのループを検出するフロイドのアルゴリズムを読んでいました。ループ検出を高速化するために、複数のノード (たとえば 2 つ) をスキップした方がよいのではないかと思っていました。

例えば:

fastptr=fastptr->next->next->next.

変更中は副作用が考慮されることに注意してくださいfastptr

4

1 に答える 1

4

あなたの提案はまだ正しいですが、それはアルゴリズムの速度を変えません。ウィキでカメとウサギのアルゴリズムを見てみると:

アルゴリズムの重要な洞察は、任意の整数i≥μおよびk≥0の場合、x i = x i +kλです。ここで、λは検出されるループの長さであり、μはループの開始位置です。特に、i =kλ≥μの場合は常に、x i = x2iとなります。

太字の部分では、 x i = x 3i、またはその他の係数と言うこともできますが、重要な洞察はiを見つけることです。ジャンプの数は重要ではなく、アルゴリズムの順序は、i

于 2012-06-12T07:07:50.043 に答える