• 検索結果がありません。

アルゴリズムとデータ構造III 2回目:10月18日

N/A
N/A
Protected

Academic year: 2021

シェア "アルゴリズムとデータ構造III 2回目:10月18日"

Copied!
27
0
0

読み込み中.... (全文を見る)

全文

(1)

アルゴリズムとデータ構造 III 2 回目: 10 月 18 日

授業資料 

http://ir.cs.yamanashi.ac.jp/~ysuzuki/algorithm3/index.html

文脈自由文法

(2)

授業の予定(中間試験まで)

 スタック (後置記法で書かれた式の計算)

 文脈自由文法

 構文解析  CKY 法

 構文解析 チャート法, LR 法

 グラフ(ダイクストラ法,動的計画法, DP マ ッチング)

 グラフ(ビームサーチ, A* アルゴリズム)

 グラフ(トライ構造,トライサーチ)

 中間試験

(3)

授業の予定(中間試験以降)

1. 全文検索アルゴリズム( simple search, KMP, BM)

2. 全文検索アルゴリズム( Aho-Corasick)

3. テキスト圧縮 暗号 (例:モールス信号,

黄金虫,踊る人形,ハフマン符号, Zipf の 法則)

4. テキスト圧縮  zip

5. 音声圧縮  ADPCM , MP3

6. 音声圧縮( CELP ),画像圧縮( JPEG )

7. 期末試験

(4)

練習問題 2 の解答

yzw*+2/ の計算方法(スタックの変化)

y

スタック

yzw*+2/

z y

y

計算可能

w

y zw*

+

計算可能

yzw*+

yzw*+

2

yzw*+

2 /

計算可能

yzw*+2/

z

*

yzw*+2/ yzw*+2/ yzw*+2/ yzw*+2/ yzw*+2/

yzw*+2/ yzw*+2/ yzw*+2/ yzw*+2/ yzw*+2/

y w

z

zw*

y

(5)

7 2 3 + - を計算してみよう

(アセンブリ言語でプログラミング)

数式 (7 2 3 + - ) をメモリ(データ領域)に書き込まれている

3.

データ領域から 1 文字読み込む

1. 数字(アスキーコード:

30H

39H

)なら

数値に変換し,数値をスタックにプッシュ

2. 演算子なら

1. 一旦スタックにプッシュし,ポップする.

2. スタックからポップし,数値を

B

レジスタに取り込む

3. スタックからポップし,数値を

A

レジスタ(アキュムレータ)に取り込む

4. 演算子が+なら

A + B

を計算し,

A

レジスタに計算結果を格納

5. 演算子が-なら

A

B

を計算し,

A

レジスタに計算結果を格納

6.

A

レジスタの内容をスタックにプッシュ

4.

データ領域すべてを読み終えるまで続ける.

(6)

簡単な計算の例  7 2 3 + -

; 後置記法 7 2 3 + - の計算 ORG 8000H ;

LD HL, DATA ; 数式の先頭番地を指定 LOOP: LD A, (HL)

CP 00H

JP Z, OWARI ; 数式を全部読み込んだら終わ

LD E, (HL) LD D, 0H LD A, (HL) INC HL CP 2BH

JP Z, LOOPA ; +なら加算処理へ CP 2DH

JP Z, LOOPS ; -なら減算処理へ LD A, E

SUB 30H ; 数字なら数値に変換

; Aレジスタの内容をスタックへプッシュ STPUSH: LD E, A

LD D, 0H

PUSH DE ; 読み込んだ数値をスタックへプッシ

JP LOOP ; つぎの文字読み込みへ

;加算

LOOPA: PUSH DE ; 演算子をスタックへプッシュ POP DE ; 演算子をスタックからポップ POP DE ; 数値をスタックからポップ

LD B, E ; スタックトップの値をBレジスタへ POP DE ; 数値をスタックからポップ

LD A, E ; スタックトップの値をAレジスタへ ADD A, B ; 加算( A <= A + B )

JP STPUSH

; 減算

LOOPS: PUSH DE ; 演算子をスタックへプッシュ POP DE ; 演算子をスタックからポップ POP DE ; 数値をスタックからポップ

LD B, E ; スタックトップの値をBレジスタへ POP DE ; 数値をスタックからポップ

LD A, E ; スタックトップの値をAレジスタへ SUB B ; 減算( A <= A - B )

JP STPUSH

;

OWARI: HALT

;入力データ

DATA: DEFB 37H ;7 DEFB 32H ;2 DEFB 33H ;3 DEFB 2BH ;+

DEFB 2DH ;- DEFB 00H ;END

(7)

文脈自由文法

 「オートマトンと言語」の最後の授業の続き

(8)

8

形式文法 G の定義

 G=(N,T,P,S)

 N: 非終端記号の集合

 T : 終端記号の集合

 P : プロダクション

 S: 開始記号

(9)

9

文脈自由文法と文脈依存文法

 文脈自由文法( CFG)

 文脈自由プロダクションのみから構成される

 文脈自由プロダクション

α β →  

ただし, α N ∈ , β V* ∈

N: 非終端記号の集合, T: 終端記号の集合, V: N と T の直 和

左辺は変数1つ

(10)

10

文脈自由文法と文脈依存文法

 文脈依存文法 (CSG)

 文脈依存プロダクションを含むプロダクションから構成 される

 文脈依存プロダクション

uαv uβv →  ただし, α N ∈ , u,v V* ∈ , β V ∈

+

N: 非終端記号の集合, T: 終端記号の集合, V: N と T の直 和

u=v=ε のとき( α β → )文脈自由プロダクションとなる

(11)

11

文脈自由文法の例 ( 例題 5.9 )

 CFG G=(N,T,P,S)

 N (非終端記号) ={B,S}

 T (終端記号) ={a,b}

 P: S aSB | ab →

     B b

 語  aaabbb の導出過程

 L(G) はどのような言語か

(12)

12

例題 5.9 の解答例

 S ⇒ aSB ⇒ a aSBB aa ⇒ abBB aaab ⇒ bB aaabb ⇒ b

 L(G): a n b n

 正規表現では表せない

 プッシュダウンオートマトンでは表現可能

 構文木 S

a S B

b

a S B

a b b

 CFG G=(N,T,P,S)

 N={B,S}

 T={a,b}

 P: S aSB | ab →

(13)

13

練習問題 1

例題 5.10  文脈依存文法の例

 CSG G=(N,T,P,S)

 N={A,B,S}

 T={a,b}

 P: S aSBA | abA, AB BA, bB bb, → → →     bA ba, aA aa → →

 語  aabbaa  の導出過程

 L(G)  はどのような言語か

(14)

14

練習問題 1  解答 例題 5.10 aabbaa

 S ⇒ aSBA ⇒ a abABA aab ⇒ BAA aa ⇒ bbAA

 ⇒ aabbaA aabb ⇒ aa

 L(G): a n b n a n

(15)

15

構文木(導出木)

Time flies like an arrow.

arrow an

like flies

Time S NP

N V

PREP

DET VP

PP

NP N

arrow an

like flies

Time

S NP

V

DET VP

NP N ADJ N

S→NP VP

NP→N |DET N|ADJ N VP→V PP|V NP

PP→PREP NP

N→Time|arrow | flies V→flies | like

PREP→like DET→an

光陰矢の如し 時蠅は矢を好む

2

種類の導出木

(16)

16

 解答

 導出: S +SS +*SSS +*xSS +*xxS +*xx*SS ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ +*xx*+SSS +*xx*+xxx ⇒

S

S S

S S

S S

S

+ S

x x +

x x

x

 問題:

 文法  N={S},T={x,+,*},P={S +SS|*SS|x} →

 語 w=   +*xx*+xxx  を導出せよ

 語 w の導出木

導出木

例題 5.11

(17)

17

例題 5.12 ①

 解答例

 前置記法  +x*x+x*xx

 S +SS +xS +x*SS +x*xS +x*x+SS ⇒ ⇒ ⇒ ⇒ ⇒

⇒ +x*x+xS +x*x+x*SS +x*x+x*xS +x*x+x*xx ⇒ ⇒ ⇒

S

x +

* S S

S S

x + S S

x * S S x x

 問題

 文法    N={S},T={x,+,*},P={S +SS|*SS|x} →

 中置記法  x+x*(x+x*x)

導出木

(18)

18

練習問題 2  例題 5.12 ②

 問題

 文法    N={S},T={x,+,*},P={S +SS|*SS|x} →

 中置記法  (x*x+x*x)*(x+x)*x

 前置記法?

 最左導出?

 構文木?

(19)

19

練習問題 2  例題 5.12 ② の解答例

 問題

 文法   N={S},T={x,+,*},P={S +SS|*SS|x} →

 中置記法  (x*x+x*x)*(x+x)*x

 解答例

 前置記法  **+*xx*xx+xxx

 S *SS **SSS **+SSSS **+*SSSSS **+*xSSSS ⇒ ⇒ ⇒ ⇒ ⇒

**+*xxSSS **+*xx*SSSS **+*xx*xSSS **

⇒ ⇒ ⇒ ⇒

+*xx*xxSS **+*xx*xx+SSS ⇒

 ⇒ **+*xx*xx+xxx

S

* S S

* S S

+ S S

* S S x x

* S S x x

+ S S x x

x

導出木

(20)

20

文脈自由文法の曖昧性

 どのような導出を行っても同じ導出木が得られる

 ⇒文法 G は曖昧でない

 複数の異なった導出木が構成できるような語を含 む

 ⇒文法 G は曖昧である

(21)

21

構文木(導出木)

Time flies like an arrow.

arrow an

like flies

Time S NP

N V

PREP

DET VP

PP

NP N

arrow an

like flies

Time

S NP

V

DET VP

NP N ADJ N

S→NP VP

NP→N |DET N|ADJ N VP→V PP|V NP

PP→PREP NP

N→Time|arrow | flies V→flies | like

PREP→like DET→an

光陰矢の如し 時蠅は矢を好む

2 種類の導出木

→ 文法が曖昧

(22)

22

例題 5.26

 文法 G=(N,T,P,S) におい て, N={S,A,B},T={a,b},

 P :  S AB|aAB → ,  A aA|a → ,  B bB|b →

 この文法が曖昧であることを示せ

(23)

23

例題 5.26 答え 

同一文字列に対して 2 種類の導出 木が構成可能→曖昧である

 1. S → AB → aAB aA → bB → a abB aab → b

 2. S → aAB → a aB aa → bB → aab b

S

A B

a

b A b B

a

S

A B a

a b B b 2.

1.

(24)

24

練習問題 3 例題 5.27

 文法 G=(N,T,P,S) において,

 N={S,A,B,C},T={a,b},

 P :  S AC|CB → ,  A aA|a → ,  A aAb|ab → ,  B bB|ba →

     C aC|a →

 この文法が曖昧であることを, aabba の導出木を構成

して示せ

(25)

25

練習問題 3  例題 5.27  答え 

同一文字列に対して 2 種類の導出 木が構成可能 → 曖昧である

 1. S → AC → aAbC aAb → a → a abba

 2. S → CB → aCB aC → bB → a abB aab → ba

S

A C

a

b

b a

S

B

a b

a B

b 2.

1.

A a

C

C

a

(26)

26

CFG の構文図式

α α

1

α

2

α

n

α

1

α

2

α

n

α

α

α A→α

A→α

1

2

|・・・|α

n

A→α

1

α

2

・・・α

n

A→α|αA|

A→ε|α|αA|

A→ε|α

A

A

A A A

A

文脈自由プロダクション 構文図式

(27)

構文解析アルゴリズム

1. CKY ( Cocke-Kasami-Younger) 法

2. チャート法, LR 法

参照

関連したドキュメント

本番前日、師匠と今回で卒業するリーダーにみん なで手紙を書き、 自分の思いを伝えた。

料金算定期間 前回検針計量日 ~ 9月4日 基本料金 前回検針計量日 ~ 9月4日 電力量料金 前回検針計量日 0:00 ~ 9月4日

7ORDER LIVE FACTORY 「脱色と着色」~FINAL~ 追加公演情報 11月3日(木・祝)【1回目】開場 13:00/開演 14:00 【2回目】開場 17:30/開演

「1 つでも、2 つでも、世界を変えるような 事柄について考えましょう。素晴らしいアイデ

大正13年 3月20日 大正 4年 3月20日 大正 4年 5月18日 大正10年10月10日 大正10年12月 7日 大正13年 1月 8日 大正13年 6月27日 大正13年 1月 8日 大正14年 7月17日 大正15年

■実 施 日:平成 26 年8月8日~9月 18

第1回 平成27年6月11日 第2回 平成28年4月26日 第3回 平成28年6月24日 第4回 平成28年8月29日

3号機使用済燃料プールにおいて、平成27年10月15日にCUWF/D