プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

線形データ構造のサイクルを検出するためのフロイドサイクル検出アルゴリズム


フロイドサイクルは、特定の単一リンクリスト内のサイクルを検出するためのサイクル検出アルゴリズムの1つです。

フロイドサイクルアルゴリズムでは、最初に先頭を指す2つのポインターがあります。うさぎとカメの話では、うさぎはカメの2倍の速さで動き、うさぎが小道の終わりに到達するたびに、カメは小道の真ん中に到達します。

アルゴリズム

  • リストのヘッドノードでHareとTortoiseを初期化します。

  • 最初、うさぎは亀の2倍の速さで動きます。

  • うさぎと亀の両方を動かして、うさぎがリンクリストの最後に到達したかどうかを確認し、リストにループがないので戻ってください。

  • そうでなければ、HareとTortoiseの両方が前進します。

  • HareとTortoiseが同じノードにある場合は、リストサイクルが見つかったので、戻ります。

  • それ以外の場合は、手順2から始めます。

上記のアルゴリズムの擬似コード

tortoise := headNode
hare := headNode
foreach:
   if hare == end
      return 'There is No Loop Found.'
   hare := hare.next
   if hare == end
      return 'No Loop Found'
   hare = hare.next
   tortoise = tortoise.next
   if hare == tortoise
      return 'Cycle Detected'

  1. データ構造における円のk-最短経路アルゴリズム

    単一の最短経路を与える代わりに、Yenのk-最短経路アルゴリズムは kを与えます 2番目に短いパスと3番目に短いパスを取得できるようにするための最短パス。 場所Aから場所Bに移動する必要があり、場所Aと場所Bの間に複数のルートが利用可能であるというシナリオを考えてみましょう。ただし、最短パスを見つけて、その観点からあまり考慮されていないすべてのパスを無視する必要があります。目的地に到達するための時間計算量。 例を挙げて理解しましょう- 与えられた例をBのピークを持つ橋と考えてください。誰かがAからCに橋を渡りたい場合、誰も橋を渡るためにピークに行くことはありません。したがって、Aか

  2. データ構造で式ツリーを構築するためのアルゴリズム

    式ツリー 式ツリーは、リーフノードが操作される値を持ち、内部ノードがリーフノードが実行される演算子を含むツリーです。 例 4 +((7 + 9)* 2) 次のような式ツリーがあります 式ツリーを構築するためのアルゴリズム Tを式ツリーとします。 If T is not NULL:   If T->data is an operand:      return T.data   A = solve(T.left)   B = solve(T.right)   --&g