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

Slides:



Advertisements
Similar presentations
情報生命科学特別講義III (1) 文字列マッチング
Advertisements

プログラムのパタン演習 解説.
情報とコンピュータ 静岡大学工学部 安藤和敏
Fortran と有限差分法の 入門の入門の…
情報理論2 第4回 小林 学 湘南工科大学 2011年11月1日 〒 神奈川県藤沢市辻堂西海岸1-1-25
アルゴリズムイントロダクション第2章 主にソートに関して
プログラミング基礎I(再) 山元進.
データ構造とアルゴリズム論 第6章 探索のアルゴリズム
言語処理系(4) 金子敬一.
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
Microsoft Excel 2010 を利用した 2項分布の確率計算
アルゴリズムとデータ構造 2012年7月19日
文字配列の課題1 解説 /* a */ #include <stdio.h> main( ) { int i;
アルゴリズムとデータ構造 第9回演習解答.
String - 文字列 2009年10月9日 7ADD2116 佐藤洋輔.
第8回 プログラミングⅡ 第8回
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
動的ハフマン符号化の例 入力:ABCDEからなる文字列 出力:動的に作ったハフマン木.
実習4 2次元テーブルの利用 フローチャートの作成.
情報理論2 第6回 小林 学 湘南工科大学 2011年11月15日 〒 神奈川県藤沢市辻堂西海岸1-1-25
アルゴリズムとデータ構造 補足資料6-3 「サンプルプログラムcat3.c」
システム開発実験No.7        解 説       “論理式の簡略化方法”.
 データベースによる並列処理 情報論理工学研究室  三宅健太.
アルゴリズムとデータ構造 2013年7月18日
データ構造とプログラミング技法 (第10回) ー文字列照合(KMP法、BM法)ー.
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
ハッシュテーブル.
情報工学Ⅱ (第9回) 月曜4限 担当:北川 晃.
Fast Pattern Matching Algorithms in Compressed Texts
定兼邦彦 今井浩 東京大学理学系研究科 情報科学専攻
文字列照合を用いた XMLデータアクセス機構の提案
データ構造とアルゴリズム 第14回 文字列の照合.
アルゴリズムとプログラミング (Algorithms and Programming)
情報工学概論 (アルゴリズムとデータ構造)
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
アルゴリズムとデータ構造 2011年7月12日
半構造化テキストに対する 文字列照合アルゴリズム
プログラムの制御構造 配列・繰り返し.
情報理論2 第3回 小林 学 湘南工科大学 2011年10月25日 〒 神奈川県藤沢市辻堂西海岸1-1-25
データ圧縮技術による文字列照合処理の高速化に関する研究
プログラミング 4 探索と計算量.
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語.
プログラムの基本構造と 構造化チャート(PAD)
プログラミングⅠ 平成30年10月22日 森田 彦.
プログラミング入門.
生物情報ソフトウェア特論 (2)たたみ込みとハッシュに 基づくマッチング
データ構造とアルゴリズム (第5回) 静岡大学工学部 安藤和敏
第6回レポート解説 条件1 条件2 条件3 月の入力 月、日、曜日の表示 日の入力 曜日の入力
構造的類似性を持つ半構造化文書における頻度分析
第5章 計算とプログラム 本章で説明すること ・計算の概観と記述法 ・代表的な計算モデル ・プログラムとプログラム言語 1.
LZW 圧縮テキストに対する 高速文字列照合アルゴリズム 喜田 拓也 竹田 正幸 篠原 歩 九州大学大学院システム情報科学研究科
アルゴリズムとデータ構造 --- 理論編 --- 山本 真基
高度プログラミング演習 (11).
情報処理Ⅱ 2006年11月24日(金).
情報処理Ⅱ 第7回 2004年11月16日(火).
プログラミング基礎演習 第4回.
情報工学Ⅱ (第8回) 月曜4限 担当:北川 晃.
Microsoft Excel 2010 を利用した 2項分布の確率計算
コンパイラ 2012年10月11日
プログラミング 4 文字列.
アルゴリズムとデータ構造 補足資料6-1 「サンプルプログラムcat1.c」
アルゴリズムとデータ構造 補足資料5-3 「サンプルプログラムstrcat.c」
情報生命科学特別講義III (3)たたみ込みとハッシュに 基づくマッチング
データ構造とアルゴリズム 第14回 文字列の照合.
情報処理Ⅱ 2005年11月25日(金).
8.文字列処理 8.1 C#の文字列 C#では, “ABCD”のように文字列を2重引用符で挟んで指定します。ASCIIコード体系のとき,以下のような内部形式となります。 1 1 文字 ‘A’ ナル文字 1 1 文字 ‘B’ A B C D \ 文字 ‘C’ 1 1 文字 ‘D’ ナル文字‘\0’
場合分け(If Then Else,Select Case) 繰返し(Do While) 繰返しその2(For Next)
計算技術研究会 C言語講座 第二回 制御構文 if , switch.
アルゴリズム ~すべてのプログラムの基礎~.
Presentation transcript:

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

文字列照合

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

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 検索対象となる文字列を,特にテキストという.

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

例題 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

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

解答 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 を出力して終了する.

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

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

素朴な文字列照合アルゴリズム 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| を出力して終了する

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

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

例:うまくいく場合(上) いかない場合(下) 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

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

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 */

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

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

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

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

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

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 */

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

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