Top Banner
アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師 山田敬三 [email protected]
23

アルゴリズム論 (第12回)p-k-yamada/lecture/algorithm2016/12th-week.pdf · アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師

May 21, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: アルゴリズム論 (第12回)p-k-yamada/lecture/algorithm2016/12th-week.pdf · アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師

アルゴリズム論(第12回)

佐々木研(情報システム構築学講座)

講師 山田敬三[email protected]

Page 2: アルゴリズム論 (第12回)p-k-yamada/lecture/algorithm2016/12th-week.pdf · アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師

文字列照合

Page 3: アルゴリズム論 (第12回)p-k-yamada/lecture/algorithm2016/12th-week.pdf · アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師

文字列照合問題

• 入力:テキストS,語W• 処理:S中にWが出現するか否かを調べる

• 出力:出現すればyes,そうでなければno

• 出力:出現すれば出現位置,そうでなければno

Page 4: アルゴリズム論 (第12回)p-k-yamada/lecture/algorithm2016/12th-week.pdf · アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師

2.1文字列の走査

• 文字列は文字の配列によって表される.

• 配列の要素は0から始まる添え字によって参照される.• 例) S[0]=a, S[2]=g

• 文字列Sの文字数を|S|と表す.• 例) S=“algorithm”のとき,|S|=9

• 検索対象となる文字列を,特にテキストという.

a l g o r i t h mS0 1 2 3 4 5 6 7 8

Page 5: アルゴリズム論 (第12回)p-k-yamada/lecture/algorithm2016/12th-week.pdf · アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師

文字の照合

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

Page 6: アルゴリズム論 (第12回)p-k-yamada/lecture/algorithm2016/12th-week.pdf · アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師

例題2.1

• テキストSがalgorithmで,文字xが’t’のとき,S中でxが最初に現れる位置の添字は何か.

• 答え:6

a l g o r i t h mS0 1 2 3 4 5 6 7 8

Page 7: アルゴリズム論 (第12回)p-k-yamada/lecture/algorithm2016/12th-week.pdf · アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師

例題2.2

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

Page 8: アルゴリズム論 (第12回)p-k-yamada/lecture/algorithm2016/12th-week.pdf · アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師

解答

Input: テキストS,文字xOutput: テキストSにおける文字xの最初の出現位置1. i ← 02. while i < |S| do3. if x = S[i] then4. i を出力して終了する5. else6. i ← i + 17. /* end of while */8. i を出力して終了する.

Page 9: アルゴリズム論 (第12回)p-k-yamada/lecture/algorithm2016/12th-week.pdf · アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師

a l g o r i t h mS

tx

a l g o r i t h mS

tx

1回目

7回目

Page 10: アルゴリズム論 (第12回)p-k-yamada/lecture/algorithm2016/12th-week.pdf · アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師

2.2文字列照合問題

• 入力:テキストS,文字列W• 処理:S中にWが出現するか否かを調べる

• 出力:出現すればyes,そうでなければno

• 出力:出現すれば出現位置,そうでなければ|S|• Sがalgorithm,Wがgoのとき,2を返す.

※ Wを単語 or 語という.

Page 11: アルゴリズム論 (第12回)p-k-yamada/lecture/algorithm2016/12th-week.pdf · アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師

素朴な文字列照合アルゴリズム

Input: テキストS,単語WOutput: SにおけるWの最初の出現位置

1. i ← 0; j ← 02. while i + j < |S| do3. if W[j] = S[i + j] then4. j ← j + 15. もし j = |W| なら i を出力して終了する

6. else7. i ← i + 18. j ← 09. /* end of while */10. |S| を出力して終了する

Page 12: アルゴリズム論 (第12回)p-k-yamada/lecture/algorithm2016/12th-week.pdf · アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師

a l g o r i t h mS

gW

a l g o r i t h mS

o

gW o

i = 0, j = 0

i = 2, j = 1

Page 13: アルゴリズム論 (第12回)p-k-yamada/lecture/algorithm2016/12th-week.pdf · アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師

都合の悪い例

a a a b a a a b aS

aW a a a

a a a b a a a b aS

aW a a a

Page 14: アルゴリズム論 (第12回)p-k-yamada/lecture/algorithm2016/12th-week.pdf · アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師

2.3 KMP法

• クヌース-モリス-プラット法(Knuth-Morris-Pratt algorithm: KMP法)

• 照合に失敗したときの動作を改良した.

• Wに依存したパタン照合テーブル(後述)を用いる.

Page 15: アルゴリズム論 (第12回)p-k-yamada/lecture/algorithm2016/12th-week.pdf · アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師

KMP法

Input: テキストS,単語WOutput: Wの出現位置

1. i ← 0; j ← 02. while i + j < |S| do3. if W[j] = S[i + j] then4. j ← j + 15. もし j = |W|なら i を出力して終了

6. else7. i ← i + j – T[j]8. もし j > 0 なら j ← T[j]9. /* end of while */

Page 16: アルゴリズム論 (第12回)p-k-yamada/lecture/algorithm2016/12th-week.pdf · アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師

S

tW e s t e d

tW e s t e d

Page 17: アルゴリズム論 (第12回)p-k-yamada/lecture/algorithm2016/12th-week.pdf · アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師

tS

tW e s t e d

tW e s t e d

Page 18: アルゴリズム論 (第12回)p-k-yamada/lecture/algorithm2016/12th-week.pdf · アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師

t eS

tW e s t e d

tW e s t e d

Page 19: アルゴリズム論 (第12回)p-k-yamada/lecture/algorithm2016/12th-week.pdf · アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師

t e s t eS

tW e s t e d

tW e s t e d

Page 20: アルゴリズム論 (第12回)p-k-yamada/lecture/algorithm2016/12th-week.pdf · アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師

パタン照合テーブル

j 0 1 2 3 4 5W t e s t e dT -1 0 0 0 1 2

j – T[j] 1 1 2 3 3 3

Page 21: アルゴリズム論 (第12回)p-k-yamada/lecture/algorithm2016/12th-week.pdf · アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師

2.4パタン照合テーブルの構成法

Input: 単語WOutput: パタン照合テーブルT1. T[0] = -12. foreach 1 <= j <= |W| - 1 do3. k ← j – 14. while W[0 .. k – 1] != W[j – k .. j - 1] and k > 0 do5. k ← k – 16. /* end of while */7. T[j] ← k8. /* end of foreach */

Page 22: アルゴリズム論 (第12回)p-k-yamada/lecture/algorithm2016/12th-week.pdf · アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師

tW e s t e dj = 5

t e s t e s t e

t e s s t e

t e t e

k = 4

k = 3

k = 2

Page 23: アルゴリズム論 (第12回)p-k-yamada/lecture/algorithm2016/12th-week.pdf · アルゴリズム論 (第12回) 佐々木研(情報システム構築学講座) 講師

評価

• パタン照合テーブルの作成には,𝑂𝑂(|𝑊𝑊|3)かかる.

• 改良により𝑂𝑂(|𝑊𝑊|)で作成可能であることが知られている.