ボイヤ・ムーア法のアルゴリズムがよくわかりません。
テストで
kouhou-ni-jouhou-ga-aru.(-はスペースです。)
というテキストをjouhouで検索した場合のパターンの移動の様子をかけという問題で
先生の答えは
kouhou-ni-jouhou-ga-aru.
jouhou
-jouhou
-------jouhou
----------jouhou
となるらしいんですが、自分は
kouhou-ni-jouhou-ga-aru.
jouhou
---jouhou
---------jouhou
----------jouhou
だと思いました。
一行目のkouhouのuから比較してjで一致しなかったら
次は三文字目のuに合わせるのではないのでしょうか?
どういう考え方をすればいいのかをご教授いただきたいです。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
とりあえず、ちょっとだけ補足しておきます。
ます、Wikipedia のBM法の説明は理解できますでしょうか。
http://goo.gl/HJ8N
私の説明は、ほぼこれに沿ったものとして、テーブルの作り方を具体的に書き下したものとなっています。
結果だけ書くと、
★第一のテーブル
文字 シフト
u 0
o 1
h 2
j 5
他のあらゆる文字 6
★第二のテーブル
N パターン シフト
0 _____X 1
1 ____Xu 6
2 ___Xou 3
3 __Xhou 6
4 _Xuhou 6
5 Xouhou 6
となります。
No.1
- 回答日時:
どちらの回答も間違えてます。
まずはテーブルの算出について説明すると
★右から一文字目がいきなり不一致の場合についての、移動量テーブルの算出
a)不一致文字がoの場合
?????o
-jouho ○一致可能性あり
--jouh ×一致可能性なし
---jou ×一致可能性なし
----jo ○一致可能性あり
-----j ×一致可能性なし
→次は1文字ずらす
-jouhou
b)不一致文字がhの場合
?????h
-jouho ×一致可能性なし
--jouh ○一致可能性あり
---jou ×一致可能性なし
----jo ×一致可能性なし
-----j ×一致可能性なし
→次は2文字ずらす
--jouhou
c)不一致文字がjの場合
?????j
-jouho ×一致可能性なし
--jouh ×一致可能性なし
---jou ×一致可能性なし
----jo ×一致可能性なし
-----j ○一致可能性あり
→次は5文字ずらす
-----jouhou
d)不一致文字がそれ以外の時は6文字ずらす
★右から二文字以降で不一致の場合についての、移動量テーブルの算出
A)右から5文字目までは一致、6文字目で不一致の場合
Xouhou (Xはj以外)
-jouho ×一致可能性無し
--jouh ×一致可能性無し
---jou ×一致可能性無し
----jo ×一致可能性無し
-----j ×一致可能性無し
→次は6文字ずらす
------jouhou
B)右から4文字目までは一致、5文字目で不一致の場合
?Xuhou (Xはo以外)
-jouho ×一致可能性無し(質問者さんが挙げられた回答1つ目)
--jouh ×一致可能性無し
---jou ×一致可能性無し(質問者さんが挙げられた回答2つ目)
----jo ×一致可能性無し
-----j ×一致可能性無し
→次は6文字ずらす
------jouhou
C)右から3文字目までは一致、4文字目で不一致の場合
??Xhou (Xはu以外)
-jouho ×一致可能性無し
--jouh ×一致可能性無し
---jou ×一致可能性無し
----jo ×一致可能性無し
-----j ×一致可能性無し
→次は6文字ずらす
------jouhou
D)右から2文字目までは一致、3文字目で不一致の場合
???Xou (Xはh以外)
-jouho ×一致可能性無し
--jouh ×一致可能性無し
---jou ○一致可能性アリ
----jo ×一致可能性無し
-----j ×一致可能性無し
→次は3文字ずらす
---jouhou
E)右から1文字目までは一致、2文字目で不一致の場合
????Xu (Xはo以外)
-jouho ×一致可能性無し
--jouh ×一致可能性無し
---jou ×一致可能性無し
----jo ×一致可能性無し
-----j ×一致可能性無し
→次は6文字ずらす
------jouhou
となります。
このようなテーブルに基づいて処理しますから、検索実行の結果は、
kouhou-ni-jouhou-ga-aru.
jouhou →右から6文字目で不一致、パターンA、6文字ずらし
------jouhou →右から1文字目で不一致、パターンa、1文字ずらし
-------jouhou →右から3文字目で不一致、パターンD、3文字ずらし
----------jouhou →全文字一致
となります。
とても詳しい回答ありがとうございます。
先生の言っていたことや教科書、また自分の考えていたやりかたとmtaka2さんのやりかたが
違いすぎて一体何が正しいのかよくわからなくなってしまいました。
mtaka2さんの回答を参考にしながらもっと調べてみようと思います。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 工学 永久機関を磁石で作れませんか?ずっと引き寄せる力があると思うのですが何かに利用できないのでしょうか? 2 2022/06/19 08:23
- その他(自然科学) 永久機関を磁石で作れませんか?ずっと引き寄せる力があると思うのですが何かに利用できないのでしょうか? 3 2022/06/22 10:57
- 電車・路線・地下鉄 2004 年に「近鉄奈良駅」で撮影された昔のビスタカーのような塗装の電車があるのですが、何の電車? 2 2022/10/05 18:52
- 経済学 マクロ経済学の「政府支出乗算」の求め方が分かりません。 10 2022/11/20 16:47
- 化学 陰イオン交換クロマトグラフィーについて 陰イオン錯体の形成による分離の実験を行いました。 試料溶液中 1 2023/05/02 01:24
- 物理学 図が見づらかったらすみません。 ソレノイドの磁場を求める問題で 上の図と下の図でθの取り方が違うので 2 2023/07/03 10:37
- 物理学 移流熱拡散方程式の解き方 フーリエ変換 1 2022/08/15 15:25
- 事件・事故 アメリカ・イリノイ州スプリングフィールドで黒人患者を搬送する際うつ伏せで担架に固定し死亡 3 2023/01/26 19:48
- 統計学 統計検定2級の過去問について 1 2023/01/04 16:40
- 化学 高校化学 浸透圧の範囲で質問があります。「浸透圧が同じなら移動する水の量は同じ」ですか? 「京大化学 4 2022/06/19 14:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessのクエリで、replace関数...
-
文字列にアルファベットが何文...
-
エクセル関数で記号から記号の...
-
ダブルクォーテーションを文字...
-
UNICODE文字が含まれているかの...
-
awk で右端の文字を1文字削除...
-
strcmp( )関数について教えて...
-
文字列の後ろから必要分だけ削...
-
VB 文字判別
-
URLで使える文字・使えない...
-
VBA B列にある前から10文字の...
-
PatternSyntaxException
-
◆COUNTIF関数またはダブルクォ...
-
CSVの禁則文字
-
64進数
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
VBAでActiveDirectoryのユーザ...
-
ListView 項目の選択/選択解除...
-
【Excel】指定したセルの名前で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのクエリで、replace関数...
-
文字列の後ろから必要分だけ削...
-
UNICODE文字が含まれているかの...
-
文字列にアルファベットが何文...
-
ダブルクォーテーションを文字...
-
エクセル関数で記号から記号の...
-
awk で右端の文字を1文字削除...
-
strcmp( )関数について教えて...
-
vb.net IVSの漢字を1文字切り...
-
CSVの禁則文字
-
VS C++6.0のCString にて先頭1...
-
URLで使える文字・使えない...
-
右から何文字目にあるか文字位...
-
GetDlgItemTextについて
-
vbscriptにてTeratrm macroの引...
-
PatternSyntaxException
-
VBからACCESSのレポートを印...
-
VBA B列にある前から10文字の...
-
ダブルクォーテーションについて
-
VBScriptでXcopyしたいのですが
おすすめ情報