文字列マッチングのためのボイヤー・ムーアアルゴリズム

文字列マッチングのためのボイヤー・ムーアアルゴリズム

前回の記事では、KMPアルゴリズムを紹介しました。

ただし、これは最も効率的なアルゴリズムではなく、実際には広く使用されていません。さまざまなテキスト エディターの「検索」機能 (Ctrl+F) では、主に Boyer-Moore アルゴリズムが使用されます。

Boyer-Moore アルゴリズムは効率的であるだけでなく、独創的に設計されており、理解しやすいものでもあります。このアルゴリズムは、1977 年にテキサス大学の Robert S. Boyer 教授と J Strother Moore 教授によって発明されました。

以下では、ムーア教授自身の例に基づいてこのアルゴリズムを説明します。

1.

文字列が「HERE IS A SIMPLE Examples」で、検索語が「EXAMPLE」であると仮定します。

2.

まず、「文字列」と「検索語」を先頭に揃え、末尾から比較を始めます。

これは非常に賢いアイデアです。末尾の文字が一致しない場合、1 回の比較だけで、最初の 7 文字 (全体) が探しているものではないことが確実にわかるからです。

「S」は「E」と一致しないことがわかります。このとき、 「S」は「不良文字」、つまり一致しない文字と呼ばれます。また、検索語「EXAMPLE」には「S」が含まれていないこともわかりました。つまり、検索語を「S」の後の位置に直接移動できるということです。

3.

さらに最後から始めると、「P」は「E」と一致しないので、「P」は「不正な文字」であることがわかります。ただし、検索語「EXAMPLE」には「P」が含まれています。したがって、2 つの「P」が揃うように、検索語を 2 つ後ろに移動します。

4.

「悪い性格のルール」を要約すると次のようになります。

シフト数 = 不正な文字の位置 - 検索用語内の前の出現

検索語に「不正な文字」が含まれていない場合、最後の出現位置は -1 になります。

「P」を例に挙げてみましょう。これは「悪い文字」として、検索語の 6 番目の位置に表示されます (番号は 0 から始まります)。検索語で最後に表示されたのは位置 4 だったので、6 - 4 = 2 位置後ろにシフトされます。 2 番目のステップの「S」を例に挙げてみましょう。これは 6 番目の位置に表示され、最後に表示されたのは -1 でした (つまり、表示されませんでした)。その後、検索用語全体が 6 - (-1) = 7 位置後ろにシフトされます。

5.

やはり最後から始めると、「E」は「E」と一致します。

6.

最初の数字を比較すると、「LE」は「LE」と一致します。

7.

最初の数字を比較すると、「PLE」は「PLE」と一致します。

#p#

8.

最初の数字を比較すると、「MPLE」は「MPLE」と一致します。この状況を「適切なサフィックス」、つまりすべての末尾が一致する文字列と呼びます。 「MPLE」、「PLE」、「LE」、および「E」はすべて適切な接尾辞であることに注意してください。

9.

前の数字と比較すると、「I」と「A」が一致しないことがわかります。つまり、「私」は「悪い性格」なのです。

10.

「悪い文字のルール」によれば、検索語は 2 - (-1) = 3 桁後ろにシフトする必要があります。問題は、現時点でもっと良い移動方法はあるかということです。

11.

この時点で「適切な接尾辞」が存在することがわかります。したがって、 「適切な接尾辞のルール」を採用することができます。

シフト番号 = 適切な接尾辞の位置 - 検索用語内の前の出現位置

たとえば、文字列「ABCDAB」の最後の「AB」が「適切なサフィックス」である場合。すると、その位置は 5 (0 から始まり、最初の「B」の値を取る) になり、「検索用語の最後の出現位置」は 1 (最初の「B」の位置) になるため、5 - 1 = 4 位置戻り、前の「AB」は次の「AB」の位置に移動します。

別の例を挙げると、文字列「ABCDEF」の「EF」が適切なサフィックスである場合、「EF」の位置は 5 で、最後に出現した位置は -1 (つまり、出現しなかった) であるため、5 - (-1) = 6 位置後ろにシフトされ、つまり、文字列全体が「F」の後の位置に移動されます。

このルールには注意すべき点が 3 つあります。

(1)「良い接尾辞」の位置は最後の文字を基準とする。 「ABCDEF」の「EF」が適切な接尾辞であると仮定すると、その位置は「F」、つまり 5 (0 から始まる) に基づきます。

(2)検索語の中に「好后支」が1回だけ出現する場合、その最後の出現位置は-1になります。たとえば、「EF」は「ABCDEF」に 1 回しか出現しないため、最後の出現位置は -1 (つまり、出現しなかった) になります。

(3)「良い接尾辞」が複数ある場合、最長の「良い接尾辞」を除き、他の「良い接尾辞」の最後の出現位置は先頭でなければならない。たとえば、「BABCDAB」の「良い接尾辞」が「DAB」、「AB」、「B」であると仮定すると、「良い接尾辞」が最後に現れたのはいつでしょうか。答えは、この時点で使用するのに適した接尾辞は「B」であり、その最後の出現は先頭、つまり位置 0 であるということです。このルールは次のように表現することもできます。最長の「適切なサフィックス」が 1 回だけ出現する場合、検索語句は位置計算のために次の形式「(DA)BABCDAB」に書き換えることができます。つまり、「DA」が仮想的に先頭に追加されます。

上の例に戻りましょう。この時点で、すべての「適切な接尾辞」(MPLE、PLE、LE、E)のうち、「EXAMPLE」の「E」だけが先頭にまだ表示されるため、6 - 0 = 6 桁後ろにシフトされます。

12.

ご覧のとおり、「悪い文字ルール」では 3 桁しかシフトできませんが、「良い接尾辞ルール」では 6 桁シフトできます。したがって、ボイヤー・ムーア アルゴリズムの基本的な考え方は、2 つのルールのうち大きい方の値を毎回元に戻すことです。

さらに巧妙なのは、これら 2 つのルールでシフトされる数字の数は検索語句のみに依存し、元の文字列とはまったく関係がないことです。そのため、「悪い文字ルールテーブル」と「良い接尾辞ルールテーブル」を事前に計算して生成することができます。使用する際は、表を参照して比較するだけです。

13.

末尾から比較を続けると、「P」は「E」と一致しないので、「P」は「悪い文字」です。 「悪い文字のルール」によれば、シフトは 6 - 4 = 2 桁です。

14.

最後から少しずつ比較していき、すべてが一致することがわかったら検索は終了します。検索を続行する場合 (つまり、すべての一致を検索する場合)、「適切な接尾辞のルール」に従って、6 - 0 = 6 位置戻ります。つまり、先頭の「E」を末尾の「E」の位置に移動します。

オリジナルリンク: http://www.ruanyifeng.com/blog/2013/05/boyer-moore_string_search_algorithm.html

<<:  文字列マッチングのためのKMPアルゴリズム

>>:  SQL Serverは最短経路検索アルゴリズムを実装しています

ブログ    
ブログ    

推薦する

人工知能は統合を加速させており、テレビ業界は若返りを急ぐべきではない

関連データによると、今年上半期、わが国のカラーテレビ市場の累計販売台数は2,000万台未満で、前年同...

2020 年の人工知能とディープラーニングの 5 つの将来トレンド

近年、人工知能は頻繁に話題になっていますが、まだ真の実現には程遠い状況です。 [[314350]]人...

フィンテックとAI: 金融におけるAIの活用方法

フィンテックの人工知能と機械学習技術は、大規模なデータセットをリアルタイムで分析し、改善を図るのに役...

...

ディープラーニングの概要: パーセプトロンからディープネットワークまで

近年、人工知能の分野は再び活発化しており、伝統的な学術界に加え、Google、Microsoft、F...

機械学習 = 「新しいボトルに入った古いワイン」の統計?いいえ!

最近、ディープラーニングと人工知能に関するジョークがソーシャルメディア上で広く流布しており、この2つ...

74KBの写真も高解像度です。Googleはニューラルネットワークを使用して新しい画像圧縮アルゴリズムを作成しました

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

ビッグデータ、クラウドコンピューティング、人工知能が統合され、セキュリティ分野に応用されている

過去2年間、安全都市、インテリジェント交通、スノーブライトプロジェクトの継続的な発展と深化に伴い、ビ...

蔡子星院士:オープンソースは人工知能開発の新たなトレンド

[[397103]] 「AIコア技術の躍進は産業の高度化の原動力であり、オープンソースはAI発展の新...

ネットワーク管理における機械学習の応用は何ですか?

ネットワークが自動化とインテリジェンス化に向かう​​につれ、ネットワークの問題をプログラムで特定し、...

AIは風力発電業界で深く応用されています。Kuoboのインテリジェントドローンは、わずか20分で全自動検査を行います

[原文は51CTO.comより] Cloboticsはこのほど、風力タービンブレードの全自動検査の新...

ロボットによるモノのインターネットは製造業の未来となるのでしょうか?

ロボットによるモノのインターネットは、産業用ロボットと IoT センサーという 2 つの貴重なテクノ...

Baiduの新しい論文はGram-CTCを提案:単一システムの音声転写が最高レベルに到達

[[188128]]最近、百度シリコンバレーAI研究所の劉海栄氏、李翔剛氏らは、音声認識の速度と精度...

「象の鼻」ロボットが登場!ボトルキャップを開けたり、家事も問題なく行えます。

ロボットに対する従来の印象は、四角くて冷たい機械、または人間に似た機械ですが、柔らかいロボット、特に...

IDC: 欧州の人工知能への支出は2022年に220億ドルに達する

インターナショナル・データ・コーポレーション(IDC)の新しい世界人工知能支出ガイドでは、ヨーロッパ...