Pythonのナイーブな文字列照合アルゴリズム:例、注目、長所、短所

公開: 2020-05-14

文字列内の入力パターンを見つける必要がある場合、コーダーとプログラマーは文字列照合アルゴリズムを使用します。 通常、短い文字列の場合、Pythonプログラマーは、プログラムが入力文字列の各位置でクエリパターンをチェックするという単純なアプローチを使用することを好みます。 一致する場合は、位置番号を出力します。

単純な文字列照合アルゴリズムが使用される最大の理由の1つは、高速で非常に正確な結果が得られるためです。 また、前処理が不要です。 いずれにせよ、これらの利点については、この投稿の後の段階で説明します。 まず、素朴なアプローチを使用したパターン検索のアルゴリズムを理解しましょう。

目次

ナイーブパターン検索アルゴリズム

単純な文字列パターン検索では、プログラムは文字列T[1…..m]内の入力パターンP[1……i]の位置をテストします。

入力テキストまたは文字列の長さは、常にパターンの長さ以上になることに注意してください。

これは、さまざまなプログラミング言語の単純なパターン検索アルゴリズムです。

始める

pat=パターンサイズ

str=文字列サイズ

i = 0から(str – pat)の場合、

j = 0でパットするには、

text [i +j]≠pattern[j]の場合、

ループを壊す

終わり

j == patの場合、

見つかったパターンとしてiの位置を表示します

終わり

終わり

このアルゴリズムは、検索結果を出力として提供するのに役立つため、コンピュータサイエンスでは非常に重要です。

読む:知っておくべきAIアルゴリズムの種類

Pythonでのナイーブな文字列照合の例

これは、Pythonのコードでナイーブパターン検索アプローチが使用されている例です。

#ナイーブ文字列照合用のPythonプログラム

#検索アルゴリズム

def search(P、T):

X = len(P)

Y = len(T)

#P[]を1つずつシフトするループ*/

範囲内i場合(X Y + 1):

j = 0

#現在のインデックスiについては、

#パターンマッチの場合* /

range(0、X)j場合:

if (txt [i + j]! = P [j]):

壊す

if (j == X 1):

印刷(「位置で見つかったパターン」、i)

#ドライバーコード

if __name__ == '__main__':

T = 「UPGRADEDUBUPGRAABUPGRADEDU」

P = 「アップグレード」

search(P、T)

出力

位置0で見つかったパターン

位置17で見つかったパターン

説明:最初の位置は0番目位置です。 ここで最初にパターン「UPGRAD」が検出されたため、出力はパターンが位置0にあることを示しています。

同様に、次のパターンは位置17で見つかりました。

ナイーブパターン検索のベストケース

2つの最悪のケースとは異なり、ナイーブパターン検索アルゴリズムのベストケースは1つだけです。

最良のケースは、パターンテキストの最初の文字が入力文字列のどこにもない場合に発生します。

例:

T [] =“ UPGRADEDUHIJKLUPGRA”;

P [] =“ TUPGRA”;

したがって、一致するパターンの数の場合はO(n)です。

ナイーブパターン検索の最悪のケース

単純な文字列検索アプローチには、2つの最悪のケースがあります。

  1. パターン内のすべての文字が入力文字列内の文字と同じである場合。

T [] =“ EEEEEEEEEEEEEEEE”;

P [] =“ EEE”;

  1. パターンの最後の文字だけが入力文字列と異なる場合。

T [] =“ EEEEEEEEEEED”;

P [] =“ EEEED”;

このような場合、O(m *(n-m + 1))での比較の数。

ナイーブ文字列照合アルゴリズムの機能

文字列照合アルゴリズムは、テキスト内の特定のパターンのすべての出現を見つけることを目的としています。

アルゴリズムの主な機能は次のとおりです。

  1. 入力テキストのパターンを探すのは、すべての中で最も簡単な方法です。 指定された文字列内のすべての文字を1つずつチェックします。
  2. それは完全に一致する文字列を見つけます–それがパターンの多かれ少なかれ正確な出現であるかどうか。
  3. 小さなテキストがある場合によく使用されます。 さらに、前処理フェーズは必要ありません。
  4. この検索方法は、文字列内のパターンを検索するために余分なスペースを占有しません。

また読む: Pythonのデータ構造とアルゴリズム

ナイーブパターン検索の利点

  1. ナイーブ検索アプローチでは、実行時間がマッチング時間と等しいため、前処理フェーズは必要ありません。
  2. 余分な操作スペースは必要ありません。
  3. パターンと文字列の比較は、任意の順序で実行できます。

ナイーブな文字列照合のデメリット

単純な文字列照合アプローチの欠点は1つだけです。それは、非効率的であるということです。 これは、位置を見つけたときに、他の位置を見つけるためにそれを再度使用しないためです。 開始点に戻り、パターンをもう一度探します。 そのため、前のシフトの情報を再度使用することはありません。

結論

ナイーブ文字列照合アルゴリズムは、前処理の必要がない、操作のための余分なスペースがないなどのさまざまな理由で、特定のテキスト内のパターンの位置を見つけるための最も好ましいアプローチです。ただし、かなり大きなテキストには使用できません。大規模な操作をより高速に実行するには非効率です。

この投稿が、Pythonでの素朴なパターン検索アプローチについての実質的に良いアイデアを提供してくれることを願っています。 このアプローチの使用法について学び、トピックをより広く理解するには、upGradの専門家に連絡してください。 スキルセットの拡大を目指す個人向けに特別に設計されたコースを用意しています。 今日私たちに連絡してください!

AI、機械学習について詳しく知りたい場合は、IIIT-BとupGradの機械学習とAIのPGディプロマをご覧ください。これは、働く専門家向けに設計されており、450時間以上の厳格なトレーニング、30以上のケーススタディと課題を提供します。 IIIT-B卒業生のステータス、5つ以上の実践的な実践的なキャップストーンプロジェクト、トップ企業との雇用支援。

単純な文字列照合アルゴリズムとは何ですか?

単純な文字列照合アルゴリズムは、2つの文字列を文字ごとに単純に比較するアルゴリズムです。 この素朴なアルゴリズムは、単純なファイル検索機能を実装した多くの初期のコンピュータープログラムで使用されています。 つまり、文字列は文字ごとに比較され、不一致が見つかるとアルゴリズムは停止します。 これは低速でメモリを浪費するため、文字列照合を行うには不適切な方法です。 テキスト内の文字列の数は膨大であるため、これは非常に非効率的ですが、検索クエリは数文字にすぎません。

文字列照合のナイーブアルゴリズムの制限は何ですか?

エイトクイーンの充足可能性とNP完全問題としての関連する問題は、単純な文字列照合アルゴリズムには制限があることを示しています。 素朴な文字列マッチングアルゴリズムはあなたに解決策を与えません。 文字列照合の場合、指数関数的な時間が必要です。 したがって、一致する文字列がn個ある場合、完了するまでに2nの時間がかかります。 この問題を回避するために、文字列照合問題を実行可能にするアルゴリズムが開発されました。 指数時間アルゴリズムであるこのアルゴリズムは、Aho-Corasickアルゴリズムと呼ばれます。 このアルゴリズムは、動的計画法の原理に基づいて機能します。

単純な文字列照合アルゴリズムを最適化するにはどうすればよいですか?

単純な文字列照合アルゴリズムの最適化は、次の2つの方法で行われます。
1)文字列データベース検索:これはデータベース検索に最適なソリューションです。 高速ですが、莫大な予算が必要です。
2)試行:これらは、メモリから作成できるため、データベースの優れた代替手段であり、低予算を維持します。 文字列を二分木形式で簡単に表すことができます。 次に、ツリーを調べて、結果を確認します。 ツリーの最後にいることがわかった場合は、適切な一致が見つかりました。 ツリーの最初に戻る必要はありません。 このアルゴリズムは高速ですが、長い文字列を比較することはできません。