4. Bruteforce(力まかせ)
● 完全に名前負けしている。
● 誰でも思いつく以下のような手法である。
① 文中での比較開始位置を決める。
② そこからパターンと一致しているか比較する。
不一致が確定した時点で打ち切り。
③ ①,②を文中の全ての位置に行う。
例)
パターン : kyubuns
文: x k y u r i k y u b u n s
k y u b u n s
↑
5. Bruteforce(力まかせ)
● 完全に名前負けしている。
● 誰でも思いつく以下のような手法である。
① 文中での比較開始位置を決める。
② そこからパターンと一致しているか比較する。
不一致が確定した時点で打ち切り。
③ ①,②を文中の全ての位置に行う。
例)
パターン : kyubuns
文: x k y u r i k y u b u n s
k y u b u n s
↑ 最初の文字で不一致した。
6. Bruteforce(力まかせ)
● 完全に名前負けしている。
● 誰でも思いつく以下のような手法である。
① 文中での比較開始位置を決める。
② そこからパターンと一致しているか比較する。
不一致が確定した時点で打ち切り。
③ ①,②を文中の全ての位置に行う。
例)
パターン : kyubuns
文: x k y u r i k y u b u n s
k y u b u n s
↑
7. Bruteforce(力まかせ)
● 完全に名前負けしている。
● 誰でも思いつく以下のような手法である。
① 文中での比較開始位置を決める。
② そこからパターンと一致しているか比較する。
不一致が確定した時点で打ち切り。
③ ①,②を文中の全ての位置に行う。
例)
パターン : kyubuns
文: x k y u r i k y u b u n s
k y u b u n s
↑
8. Bruteforce(力まかせ)
● 完全に名前負けしている。
● 誰でも思いつく以下のような手法である。
① 文中での比較開始位置を決める。
② そこからパターンと一致しているか比較する。
不一致が確定した時点で打ち切り。
③ ①,②を文中の全ての位置に行う。
例)
パターン : kyubuns
文: x k y u r i k y u b u n s
k y u b u n s
↑
9. Bruteforce(力まかせ)
● 完全に名前負けしている。
● 誰でも思いつく以下のような手法である。
① 文中での比較開始位置を決める。
② そこからパターンと一致しているか比較する。
不一致が確定した時点で打ち切り。
③ ①,②を文中の全ての位置に行う。
例)
パターン : kyubuns
文: x k y u r i k y u b u n s
k y u b u n s
↑
10. Bruteforce(力まかせ)
● 完全に名前負けしている。
● 誰でも思いつく以下のような手法である。
① 文中での比較開始位置を決める。
② そこからパターンと一致しているか比較する。
不一致が確定した時点で打ち切り。
③ ①,②を文中の全ての位置に行う。
例)
パターン : kyubuns
文: x k y u r i k y u b u n s
k y u b u n s
↑4文字目で不一致だった。
11. Bruteforce(力まかせ)
● 完全に名前負けしている。
● 誰でも思いつく以下のような手法である。
① 文中での比較開始位置を決める。
② そこからパターンと一致しているか比較する。
不一致が確定した時点で打ち切り。
③ ①,②を文中の全ての位置に行う。
例)
パターン : kyubuns
文: x k y u r i k y u b u n s
k y u b u n s
↑
12. Bruteforce(力まかせ)
● 完全に名前負けしている。
● 誰でも思いつく以下のような手法である。
① 文中での比較開始位置を決める。
② そこからパターンと一致しているか比較する。
不一致が確定した時点で打ち切り。
③ ①,②を文中の全ての位置に行う。
例)
パターン : kyubuns
文: x k y u r i k y u b u n s
k y u b u n s
↑
13. Bruteforce(力まかせ)
● 完全に名前負けしている。
● 誰でも思いつく以下のような手法である。
① 文中での比較開始位置を決める。
② そこからパターンと一致しているか比較する。
不一致が確定した時点で打ち切り。
③ ①,②を文中の全ての位置に行う。
例)
パターン : kyubuns
文: x k y u r i k y u b u n s
k y u b u n s
↑
14. Bruteforce(力まかせ)
● 完全に名前負けしている。
● 誰でも思いつく以下のような手法である。
① 文中での比較開始位置を決める。
② そこからパターンと一致しているか比較する。
不一致が確定した時点で打ち切り。
③ ①,②を文中の全ての位置に行う。
例)
パターン : kyubuns
文: x k y u r i k y u b u n s
k y u b u n s
↑
15. Bruteforce(力まかせ)
● 完全に名前負けしている。
● 誰でも思いつく以下のような手法である。
① 文中での比較開始位置を決める。
② そこからパターンと一致しているか比較する。
不一致が確定した時点で打ち切り。
③ ①,②を文中の全ての位置に行う。
例)
パターン : kyubuns
文: x k y u r i k y u b u n s
k y u b u n s
↑
一致した!
18. KMP法
● クヌースさん,モリスさん,プラットさんが発表した
● パターンのどの位置で不一致したかでずらす量を
決める 例)
パターン : ababc a b a b c
文 : abcadababc
何文字目で失敗した? 始点ずらす量 次何文字目から見るか
1 +1 1
2 +2 1
3 +3 1
4 +2 2
5 +2 3
a b c a d a b a b a b c
19. KMP法
● クヌースさん,モリスさん,プラットさんが発表した
● パターンのどの位置で不一致したかでずらす量を
決める 例)
パターン : ababc
文 : abcadababc
何文字目で失敗した? 始点ずらす量 次何文字目から見るか
1 +1 1
2 +2 1
3 +3 1
4 +2 2
5 +2 3
a b c a d a b a b a b c
a b a b c
↑
20. KMP法
● クヌースさん,モリスさん,プラットさんが発表した
● パターンのどの位置で不一致したかでずらす量を
決める 例)
パターン : ababc
文 : abcadababc
何文字目で失敗した? 始点ずらす量 次何文字目から見るか
1 +1 1
2 +2 1
3 +3 1
4 +2 2
5 +2 3
a b c a d a b a b a b c
a b a b c
↑ 3文字目で不一致
21. KMP法
● クヌースさん,モリスさん,プラットさんが発表した
● パターンのどの位置で不一致したかでずらす量を
決める 例)
パターン : ababc
文 : abcadababc
何文字目で失敗した? 始点ずらす量 次何文字目から見るか
1 +1 1
2 +2 1
3 +3 1
4 +2 2
5 +2 3
a b c a d a b a b a b c
a b a b c
↑
22. KMP法
● クヌースさん,モリスさん,プラットさんが発表した
● パターンのどの位置で不一致したかでずらす量を
決める 例)
パターン : ababc
文 : abcadababc
何文字目で失敗した? 始点ずらす量 次何文字目から見るか
1 +1 1
2 +2 1
3 +3 1
4 +2 2
5 +2 3
a b c a d a b a b a b c
a b a b c
↑ 2文字目で不一致
23. KMP法
● クヌースさん,モリスさん,プラットさんが発表した
● パターンのどの位置で不一致したかでずらす量を
決める 例)
パターン : ababc
文 : abcadababc
何文字目で失敗した? 始点ずらす量 次何文字目から見るか
1 +1 1
2 +2 1
3 +3 1
4 +2 2
5 +2 3
a b c a d a b a b a b c
a b a b c
↑
24. KMP法
● クヌースさん,モリスさん,プラットさんが発表した
● パターンのどの位置で不一致したかでずらす量を
決める 例)
パターン : ababc
文 : abcadababc
何文字目で失敗した? 始点ずらす量 次何文字目から見るか
1 +1 1
2 +2 1
3 +3 1
4 +2 2
5 +2 3
a b c a d a b a b a b c
a b a b c
↑ 5文字目で不一致
25. KMP法
● クヌースさん,モリスさん,プラットさんが発表した
● パターンのどの位置で不一致したかでずらす量を
決める 例)
パターン : ababc
文 : abcadababc
何文字目で失敗した? 始点ずらす量 次何文字目から見るか
1 +1 1
2 +2 1
3 +3 1
4 +2 2
5 +2 3
a b c a d a b a b a b c
a b a b c
↑
26. KMP法
● クヌースさん,モリスさん,プラットさんが発表した
● パターンのどの位置で不一致したかでずらす量を
決める 例)
パターン : ababc
文 : abcadababc
何文字目で失敗した? 始点ずらす量 次何文字目から見るか
1 +1 1
2 +2 1
3 +3 1
4 +2 2
5 +2 3
a b c a d a b a b a b c
a b a b c
↑ 一致した~
34. BM法
● ボイヤーさん,ムーアさんが開発した
● パターン比較時、後ろの文字から比較していく
● 失敗した文字種類に応じてずらす量決める
例)
a b a b c
パターン : ababc
文 : abcacdbabc
不一致したときの文中の文字 着目点をずらす量 次何文字目から見るか
a Max(+2,一致文字数+1) 5
b Max(+1,一致文字数+1) 5
c +5 5
それ以外 +5 5
a b c a c d b a b a b c
a b a b c
↑
35. BM法
● ボイヤーさん,ムーアさんが開発した
● パターン比較時、後ろの文字から比較していく
● 失敗した文字種類に応じてずらす量決める
例)
a b a b c
パターン : ababc
文 : abcacdbabc
不一致したときの文中の文字 着目点をずらす量 次何文字目から見るか
a Max(+2,一致文字数+1) 5
b Max(+1,一致文字数+1) 5
c +5 5
それ以外 +5 5
a b c a c d b a b a b c
a b a b c
↑ 'a'で不一致, 1文字一致した後失敗した
36. BM法
● ボイヤーさん,ムーアさんが開発した
● パターン比較時、後ろの文字から比較していく
● 失敗した文字種類に応じてずらす量決める
例)
a b a b c
パターン : ababc
文 : abcacdbabc
不一致したときの文中の文字 着目点をずらす量 次何文字目から見るか
a Max(+2,一致文字数+1) 5
b Max(+1,一致文字数+1) 5
c +5 5
それ以外 +5 5
a b c a c d b a b a b c
a b a b c
↑ 着目点(↑)を2文字ずらした
37. BM法
● ボイヤーさん,ムーアさんが開発した
● パターン比較時、後ろの文字から比較していく
● 失敗した文字種類に応じてずらす量決める
例)
a b a b c
パターン : ababc
文 : abcacdbabc
不一致したときの文中の文字 着目点をずらす量 次何文字目から見るか
a Max(+2,一致文字数+1) 5
b Max(+1,一致文字数+1) 5
c +5 5
それ以外 +5 5
a b c a c d b a b a b c
a b a b c
↑ 'd'で不一致,5文字ずらす
38. BM法
● ボイヤーさん,ムーアさんが開発した
● パターン比較時、後ろの文字から比較していく
● 失敗した文字種類に応じてずらす量決める
例)
a b a b c
パターン : ababc
文 : abcacdbabc
不一致したときの文中の文字 着目点をずらす量 次何文字目から見るか
a Max(+2,一致文字数+1) 5
b Max(+1,一致文字数+1) 5
c +5 5
それ以外 +5 5
a b c a c a b a b a b c
a b a b c
↑
39. BM法
● ボイヤーさん,ムーアさんが開発した
● パターン比較時、後ろの文字から比較していく
● 失敗した文字種類に応じてずらす量決める
例)
a b a b c
パターン : ababc
文 : abcacdbabc
不一致したときの文中の文字 着目点をずらす量 次何文字目から見るか
a Max(+2,一致文字数+1) 5
b Max(+1,一致文字数+1) 5
c +5 5
それ以外 +5 5
a b c a c a b a b a b c
a b a b c
↑ 'b'で不一致,1文字ずらす
40. BM法
● ボイヤーさん,ムーアさんが開発した
● パターン比較時、後ろの文字から比較していく
● 失敗した文字種類に応じてずらす量決める
例)
a b a b c
パターン : ababc
文 : abcacdbabc
不一致したときの文中の文字 着目点をずらす量 次何文字目から見るか
a Max(+2,一致文字数+1) 5
b Max(+1,一致文字数+1) 5
c +5 5
それ以外 +5 5
a b c a c a b a b a b c
a b a b c
↑
41. BM法
● ボイヤーさん,ムーアさんが開発した
● パターン比較時、後ろの文字から比較していく
● 失敗した文字種類に応じてずらす量決める
例)
a b a b c
パターン : ababc
文 : abcacdbabc
不一致したときの文中の文字 着目点をずらす量 次何文字目から見るか
a Max(+2,一致文字数+1) 5
b Max(+1,一致文字数+1) 5
c +5 5
それ以外 +5 5
a b c a c a b a b a b c
a b a b c
↑ 一致した!