ホームページ バックエンド開発 C#.Net チュートリアル C# で KMP アルゴリズムを実装する方法

C# で KMP アルゴリズムを実装する方法

Sep 19, 2023 pm 01:31 PM
文字列マッチング C#プログラミング kmpアルゴリズム

C# で KMP アルゴリズムを実装する方法

KMP アルゴリズムを C で実装する方法

#KMP (Knuth-Morris-Pratt) アルゴリズムは、テキスト文字列の一致に使用される効率的な文字列一致アルゴリズムです。のパターン文字列。その中心となる考え方は、一致した部分情報を使用して不必要な比較を避けることです。

KMP アルゴリズムを実装するための鍵は、次の配列とも呼ばれる部分一致テーブル (部分一致テーブル) を構築することです。この配列は、パターン文字列内の各プレフィックス部分文字列の最長一致するサフィックス部分文字列の長さを記録します。

以下は、C# で KMP アルゴリズムを実装するための具体的な手順とコード例です。

ステップ 1: 部分一致テーブルを構築する

  1. 次のパターンを定義します。パターン文字列の長さのサイズを整数配列で指定し、next[0] = -1 で初期化します。
  2. 2 つのポインター i と j を、それぞれ初期値 0 と -1 で定義します。
  3. i がパターン文字列の末尾に到達したかどうかを確認します。到達していない場合は、次の手順を実行します:
    a. j が -1 に等しいか、現在の文字がポインタ j に対応する文字に等しい場合、次に i と j は同時に後方に移動され、 、next[i] = j となります。
    b. それ以外の場合は、ポインタ j を next[j] の位置に移動し、照合を続けます。
  4. 次に構築された部分一致テーブルを返します。

上記の手順を実装する方法のコードは次のとおりです。

private int[] BuildNext(string pattern)
{
    int[] next = new int[pattern.Length];
    next[0] = -1;
    int i = 0, j = -1;
    
    while (i < pattern.Length - 1)
    {
        if (j == -1 || pattern[i] == pattern[j])
        {
            i++;
            j++;
            next[i] = j;
        }
        else
        {
            j = next[j];
        }
    }
    
    return next;
}
ログイン後にコピー

ステップ 2: 部分一致テーブルを使用してマッチングを行う

  1. 2 つのポインターを定義するi と j は、それぞれテキスト文字列とパターン文字列の開始位置を指します。
  2. i と j が最後に到達したかどうかを確認します。到達していない場合は、次の手順を実行します:
    a. j が -1 に等しい場合、または現在の文字がポインタ j に対応する文字に等しい場合、その場合、i と j は同時に後方に移動します。
    b. それ以外の場合は、ポインタ j を next[j] の位置に移動し、照合を続けます。
  3. ポインタ j がパターン文字列の末尾を指している場合、一致が成功し、テキスト文字列の開始位置のインデックスが返されることを意味します。
  4. 一致に失敗した場合は、-1 が返されます。

上記の手順を実装するコードは次のとおりです。

private int KMP(string text, string pattern)
{
    int[] next = BuildNext(pattern);
    int i = 0, j = 0;
    
    while (i < text.Length && j < pattern.Length)
    {
        if (j == -1 || text[i] == pattern[j])
        {
            i++;
            j++;
        }
        else
        {
            j = next[j];
        }
    }
    
    if (j == pattern.Length)
    {
        return i - j;
    }
    
    return -1;
}
ログイン後にコピー

KMP メソッドを呼び出し、テキスト文字列とパターン文字列を渡すことで、一致する結果を取得できます。 。

上記は、C# で KMP アルゴリズムを実装する方法の手順とコード例です。 KMP アルゴリズムは、部分一致テーブルを利用することで、特に大きなテキスト文字列や長いパターン文字列を処理する場合に、文字列一致の効率を効果的に向上させ、パフォーマンスを向上させることができます。

以上がC# で KMP アルゴリズムを実装する方法の詳細内容です。詳細については、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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C# を使用して時系列予測アルゴリズムを作成する方法 C# を使用して時系列予測アルゴリズムを作成する方法 Sep 19, 2023 pm 02:33 PM

C# を使用した時系列予測アルゴリズムの作成方法 時系列予測とは、過去のデータを分析することで将来のデータの傾向を予測する手法です。金融、販売、天気予報など、さまざまな分野で幅広く応用されています。この記事では、C#を使用した時系列予測アルゴリズムの書き方を具体的なコード例とともに紹介します。データの準備 時系列予測を実行する前に、まずデータを準備する必要があります。一般に、時系列データは十分な長さがあり、時系列に並べられている必要があります。データベースから取得するか、

C# を使用して深層学習アルゴリズムを作成する方法 C# を使用して深層学習アルゴリズムを作成する方法 Sep 19, 2023 am 09:53 AM

C# を使用してディープ ラーニング アルゴリズムを作成する方法 はじめに: 人工知能の急速な発展に伴い、ディープ ラーニング テクノロジは多くの分野で画期的な成果を達成しました。深層学習アルゴリズムの作成と適用を実装するために、現在最も一般的に使用されている言語は Python です。ただし、C# 言語の使用を好む開発者にとっては、C# を使用して深層学習アルゴリズムを作成することも可能です。この記事では、C# を使用してディープ ラーニング アルゴリズムを作成する方法を紹介し、具体的なコード例を示します。 1. C# プロジェクトを作成します。深層学習アルゴリズムの作成を開始する前に、まず C# プロジェクトを作成する必要があります。

C# で貪欲アルゴリズムを実装する方法 C# で貪欲アルゴリズムを実装する方法 Sep 19, 2023 am 11:48 AM

C# で貪欲アルゴリズムを実装する方法 貪欲アルゴリズム (Greedy アルゴリズム) は、一般的に使用される問題解決手法であり、毎回現在の最適解を選択して、大域的な最適解を取得することを目指します。 C# では、貪欲なアルゴリズムを使用して、多くの実際的な問題を解決できます。この記事では、C# で貪欲アルゴリズムを実装する方法を紹介し、具体的なコード例を示します。 1. 貪欲アルゴリズムの基本原理 貪欲アルゴリズムの基本的な考え方は、後続のステップの影響に関係なく、毎回現在の最適解を選択することです。このような考え方

C# を使用して幅優先検索アルゴリズムを作成する方法 C# を使用して幅優先検索アルゴリズムを作成する方法 Sep 19, 2023 am 11:45 AM

C# を使用して幅優先検索アルゴリズムを作成する方法 幅優先検索 (BFS) は、幅に従ってグラフまたはツリーを走査するために使用される、一般的に使用されるグラフ検索アルゴリズムです。この記事では、C# を使用して幅優先検索アルゴリズムを作成する方法を検討し、具体的なコード例を示します。アルゴリズムの原理 幅優先検索アルゴリズムの基本原理は、アルゴリズムの開始点から開始して、ターゲットが見つかるかグラフ全体が走査されるまで、検索範囲を層ごとに拡大することです。通常、キューを通じて実装されます。

C# を使用してハフマン符号化アルゴリズムを作成する方法 C# を使用してハフマン符号化アルゴリズムを作成する方法 Sep 21, 2023 pm 03:14 PM

C# を使用してハフマン コーディング アルゴリズムを作成する方法 はじめに: ハフマン コーディング アルゴリズムは、データ圧縮に使用される可逆アルゴリズムです。データの送信または保存中に、頻度の高い文字には短いコードを使用し、頻度の低い文字には長いコードを使用することで、データが効果的に圧縮されます。この記事では、C# を使用してハフマン コーディング アルゴリズムを作成する方法を紹介し、具体的なコード例を示します。ハフマン符号化アルゴリズムの基本原理 ハフマン符号化アルゴリズムの中心的な考え方は、ハフマン ツリーを構築することです。まず、文字の出現頻度を数えることによって、

C# を使用してクラスター分析アルゴリズムを作成する方法 C# を使用してクラスター分析アルゴリズムを作成する方法 Sep 19, 2023 pm 02:40 PM

C# を使用したクラスター分析アルゴリズムの作成方法 1. 概要 クラスター分析は、類似したデータ点をクラスターにグループ化し、異なるデータ点を互いに分離するデータ分析手法です。機械学習とデータ マイニングの分野では、クラスター分析は、分類器を構築し、データの構造を調査し、隠れたパターンを明らかにするために一般的に使用されます。この記事では、C# を使用してクラスター分析アルゴリズムを作成する方法を紹介します。 K 平均法アルゴリズムをアルゴリズム例として使用し、具体的なコード例を示します。 2. K 平均法アルゴリズムの概要 K 平均法アルゴリズムは最も一般的に使用されます。

C# を使用して最小スパニング ツリー アルゴリズムを作成する方法 C# を使用して最小スパニング ツリー アルゴリズムを作成する方法 Sep 19, 2023 pm 01:55 PM

C# を使用して最小スパニング ツリー アルゴリズムを作成する方法. 最小スパニング ツリー アルゴリズムは、グラフの接続性の問題を解決するために使用される重要なグラフ理論アルゴリズムです。コンピューター サイエンスでは、最小スパニング ツリーとは、スパニング ツリーのすべてのエッジの重みの合計が最小となる、接続されたグラフのスパニング ツリーを指します。この記事では、C# を使用して最小限のスパニング ツリー アルゴリズムを作成する方法を紹介し、具体的なコード例を示します。まず、問題を表すグラフ データ構造を定義する必要があります。 C# では、隣接行列を使用してグラフを表現できます。隣接行列は、各要素が表す 2 次元配列です。

C# を使用してクイック ソート アルゴリズムを作成する方法 C# を使用してクイック ソート アルゴリズムを作成する方法 Sep 19, 2023 pm 03:28 PM

C# を使用してクイック ソート アルゴリズムを作成する方法. クイック ソート アルゴリズムは、効率的なソート アルゴリズムです。そのアイデアは、分割統治の考え方を通じて配列をより小さなサブ問題に分割し、これらのサブ問題を再帰的に解決することです。そして最後にそれらをマージして、問題全体に対する答えを取得します。以下では、C# を使用してクイック ソート アルゴリズムを作成する方法を詳しく紹介し、関連するコード例を示します。アルゴリズムのアイデア クイックソートのアイデアは、次の 3 つのステップに要約できます。ベンチマーク要素 (通常は配列の最初の要素) を選択します。

See all articles