Presentation is loading. Please wait.

Presentation is loading. Please wait.

アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師 山田敬三 k-yamada@iwate-pu.ac.jp.

Similar presentations


Presentation on theme: "アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師 山田敬三 k-yamada@iwate-pu.ac.jp."— Presentation transcript:

1 アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師 山田敬三

2 文字列照合

3 文字列照合問題 入力:テキストS,語W 処理:S 中に W が出現するか否かを調べる 出力:出現すれば yes,そうでなければ no

4 2.1 文字列の走査 a l g o r i t h m S 1 2 3 4 5 6 7 8 文字列は文字の配列によって表される.
1 2 3 4 5 6 7 8 文字列は文字の配列によって表される. 配列の要素は 0 から始まる添え字によって参照される. 例) S[0] = a, S[2] = g 文字列 S の文字数を |S| と表す. 例) S = “algorithm” のとき,|S| = 9 検索対象となる文字列を,特にテキストという.

5 文字の照合 文字列照合問題を扱う前に, テキスト S 中に文字 x が出現するか否かを問う問題を扱う.

6 例題 2.1 テキスト S が “algorithm” で,文字 x が ’t’ のとき, S 中で x が最初に現れる位置の添字は何か. 答え:6 a l g o r i t h m S 1 2 3 4 5 6 7 8

7 例題 2.2 入力として,テキスト S と文字 x が与えられたとき,S 中で x が最初に 現れる位置の添字を求めるアルゴリズムを示せ.ただし,x が S 中に 現れないときは |S| を返すこととする.

8 解答 Input: テキスト S,文字 x Output: テキスト S における文字 x の最初の出現位置 i ← 0
while i < |S| do   if x = S[i] then     i を出力して終了する   else     i ← i + 1 /* end of while */ i を出力して終了する.

9 1回目 S a l g o r i t h m x t 7回目 S a l g o r i t h m x t

10 2.2 文字列照合問題 入力:テキスト S,文字列 W 処理:S 中に W が出現するか否かを調べる
出力:出現すれば yes,そうでなければ no 出力:出現すれば出現位置,そうでなければ |S| S が algorithm,W が go のとき,2 を返す. ※ Wを単語 or 語という.

11 素朴な文字列照合アルゴリズム Input: テキスト S,単語 W Output: S における W の最初の出現位置
i ← 0; j ← 0 while i + j < |S| do   if W[j] = S[i + j] then     j ← j + 1     もし j = |W| なら i を出力して終了する   else     i ← i + 1     j ← 0 /* end of while */ |S| を出力して終了する

12 S a l g o r i t h m W g o S a l g o r i t h m W g o i = 0, j = 0

13 高速化のアイディア 一度照合した文字は,飛ばして実行する. すると,うまくいく場合と,いかない場合がある.

14 例:うまくいく場合(上) いかない場合(下)
S t e s t d t e s t e d W t e s t e d S t e s t e s t e d W t e s t e d

15 2.3 KMP法 クヌース-モリス-プラット法(Knuth-Morris-Pratt algorithm: KMP法)
照合に失敗したときの動作を改良した. Wに依存したパタン照合テーブル(後述)を用いる.

16 KMP法 Input: テキストS,単語W Output: Wの出現位置 i ← 0; j ← 0
while i + j < |S| do   if W[j] = S[i + j] then     j ← j + 1     もし j = |W|なら i を出力して終了   else     i ← i + j – T[j]     もし j > 0 なら j ← T[j] /* end of while */

17 S W t e s t e d t W e s d

18 S t W t e s t e d t W e s d

19 S t e W t e s t e d t W e s d

20 S t e s t e W t e s t e d t W e s d

21 パタン照合テーブル 1 2 3 4 5 W t e s d T -1 j – T[j]

22 2.4 パタン照合テーブルの構成法 Input: 単語W Output: パタン照合テーブルT T[0] = -1
foreach 1 <= j <= |W| - 1 do   k ← j – 1   while W[0 .. k – 1] != W[j – k .. j - 1] and k > 0 do     k ← k – 1   /* end of while */   T[j] ← k /* end of foreach */

23 W t e s t e d t e s t e s t e t e s s t e t e t e j = 5 k = 4 k = 3

24 評価 パタン照合テーブルの作成には,𝑂( |𝑊| 3 )かかる. 改良により𝑂(|𝑊|)で作成可能であることが知られている.


Download ppt "アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師 山田敬三 k-yamada@iwate-pu.ac.jp."

Similar presentations


Ads by Google