検索
ホームページJava&#&チュートリアルフロイドの循環探索アルゴリズムはリンクされたリスト内のループを効率的に検出しますか?

Does Floyd's Cycle-Finding Algorithm Efficiently Detect Loops in Linked Lists?

フロイドのサイクル探索アルゴリズムを使用したリンク リストのループの検出

コンピューター サイエンスの基本的なデータ構造であるリンク リストは、要素のシーケンスを表すためによく使用されます。特定のシナリオでは、リンク リストにループが含まれる可能性があり、最後のノードが前のノードを指し、循環構造が作成されます。このようなループの存在を特定することは、リンク リストを含むさまざまな操作にとって重要なタスクです。

フロイドのサイクル発見アルゴリズム

ウサギとカメのアルゴリズムとしても知られるフロイドのサイクル発見アルゴリズムは、次の機能を提供します。リンクされたリスト内のループを検出する効率的な方法。このアルゴリズムは、リスト内で 2 つのポインター (参照) を異なる速度で移動する原理に基づいて動作します。

  1. Tortoise (Slow Pointer): 一度に 1 ノードずつ前方に移動します。
  2. Hare (高速ポインター): 一度に 2 ノードずつ前方に移動します。

原理:

  • ループの存在: リストにループがある場合、カメとウサギは最終的に同じノードで出会い、ループの存在を示します。
  • ループなし: リストにループが含まれていない場合、カメまたはウサギはリストの最後 (ヌル ポインター) に到達し、ループがないことを示します。

Java 実装

次の Java 関数は、Floyd のサイクル検索アルゴリズムを実装します。

<code class="java">boolean hasLoop(Node first) {

    if(first == null) // list does not exist..so no loop either
        return false;

    Node slow, fast; // create two references.

    slow = fast = first; // make both refer to the start of the list

    while(true) {

        slow = slow.next;          // 1 hop

        if(fast.next != null)
            fast = fast.next.next; // 2 hops
        else
            return false;          // next node null => no loop

        if(slow == null || fast == null) // if either hits null..no loop
            return false;

        if(slow == fast) // if the two ever meet...we must have a loop
            return true;
    }
}</code>

利点

Floyd のサイクル検索アルゴリズムには、次の利点があります。

  • 一定の空間計算量: 必要なポインター (参照) は 2 つだけで、空間計算量は一定 (O(1)) になります。
  • 線形時間計算量:アルゴリズムの時間計算量は O(n) です。ここで、n はリンク リスト内のノードの数です。

以上がフロイドの循環探索アルゴリズムはリンクされたリスト内のループを効率的に検出しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン