マッチングを並列化するには?
•状態遷移は常に「直前の状態」に依存しており,
単純に並列化できない.
Tuesday, March 27, 12
41.
マッチングを並列化するには?
•状態遷移は常に「直前の状態」に依存しており,
単純に並列化できない.
「各状態を初期状態とした全パターン」について
状態遷移を計算. 結果を最後にまとめる.
Tuesday, March 27, 12
42.
並列マッチングの例
a
/[ab]*a[ab]/
abaa
q2
DFA a b
b
q1 q3
b a
a
b
q0
Tuesday, March 27, 12
43.
並列マッチングの例
a
/[ab]*a[ab]/ q2
DFA a b
b
a b
q1 q3
b a
a
b
q0
a a
Tuesday, March 27, 12
44.
並列マッチングの例
a
/[ab]*a[ab]/ q2
DFA a b
b
q0 q0
a b
q1 q3
b a
a
q1 q1
b
q0
q2 q2
q3 q3
q0 q0
q1 q1 a a
q2 q2
q3 q3
Tuesday, March 27, 12
45.
並列マッチングの例
初期状態 a
/[ab]*a[ab]/ q2
DFA a b
b
q0 q0
a b
q1 q3
b a
a
q1 q1
b
q0
q2 q2
q3 q3
q0 q0
q1 q1 a a
q2 q2
q3 q3
Tuesday, March 27, 12
46.
並列マッチングの例
初期状態 a
遷移状態 /[ab]*a[ab]/ q2
DFA a b
b
q0 q0
a b
q1 q3
b a
a
q1 q1
b
q0
q2 q2
q3 q3
q0 q0
q1 q1 a a
q2 q2
q3 q3
Tuesday, March 27, 12
47.
並列マッチングの例
初期状態 a
遷移状態 /[ab]*a[ab]/ q2
DFA a b
b
q0 q0 q0 q1
a b
q1 q3
b a
a
q1 q1 q1 q2
b
q0
q2 q2 q2 q2
q3 q3 q3 q1
q0 q0 q0 q1
q1 q1 a q1 q2 a
q2 q2 q2 q2
q3 q3 q3 q1
Tuesday, March 27, 12
48.
並列マッチングの例
初期状態 a
遷移状態 /[ab]*a[ab]/ q2
DFA a b
b
q0 q0 q0 q1
a b q0 q3
q1 q3
b a
a
q1 q1 q1 q2
b
q1 q3 q0
q2 q2 q2 q2 q2 q3
q3 q3 q3 q1 q3 q3
q0 q0 q0 q1 q0 q2
q1 q1 a q1 q2 a q1 q2
q2 q2 q2 q2 q2 q2
q3 q3 q3 q1 q3 q2
Tuesday, March 27, 12
49.
並列マッチングの例
初期状態 a
遷移状態 /[ab]*a[ab]/ q2
DFA a b
b
q0 q0 q0 q1
a b q0 q3
q1 q3
b a
a
q1 q1 q1 q2
b
q1 q3 q0
q2 q2 q2 q2 q2 q3
q3 q3 q3 q1 q3 q3
q0 q0 q0 q1 q0 q2
q1 q1 a q1 q2 a q1 q2
q2 q2 q2 q2 q2 q2
q3 q3 q3 q1 q3 q2
Tuesday, March 27, 12
50.
並列マッチングの例
初期状態 a
遷移状態 /[ab]*a[ab]/ q2
DFA a b
b
q0 q0 q0 q1
a b q0 q3
q1 q3
b a
a
q1 q1 q1 q2
b
q1 q3 q0
q2 q2 q2 q2 q2 q3
q3 q3 q3 q1 q3 q3
q0 q0 q0 q1 q0 q2
q1 q1 a q1 q2 a q1 q2
q2 q2 q2 q2 q2 q2
q3 q3 q3 q1 q3 q2
Tuesday, March 27, 12
51.
並列マッチングの例
初期状態 a
遷移状態 /[ab]*a[ab]/ q2
DFA a b
b
q0 q0 q0 q1
a b q0 q3
q1 q3
b a
a
q1 q1 q1 q2
b
q1 q3 q0
q2 q2 q2 q2 q2 q3
q3 q3 q3 q1 q3 q3
結果からq0 → q3 → q2
q0 q0 q0 q1 q0 q2 と遷移することが解る.
q1 q1 a q1 q2 a q1 q2
q2 q2 q2 q2 q2 q2 abaaは「マッチする」
q3 q3 q3 q1 q3 q2 並列実行ができた!
Tuesday, March 27, 12
DFAからSFAの構築 a
q2
/[ab]*a[ab]/
DFA a b
b
q1 q3
b a
a
b
q0
Tuesday, March 27, 12
55.
DFAからSFAの構築 a
q2
q0 q0 /[ab]*a[ab]/
q1 q1 DFA a b
q2 q2 b
q1
q3 q3 b
a a
q3
b
q0
Tuesday, March 27, 12
56.
DFAからSFAの構築 a
q2
q0 q0 /[ab]*a[ab]/
q1 q1 DFA a b
q2 q2 b
q1
q3 q3 b
a a
q3
a q0
b
q0 q1
q1 q2
q2 q2
q3 q1
Tuesday, March 27, 12
57.
DFAからSFAの構築 a
q2
q0 q0 /[ab]*a[ab]/
q1 q1 DFA a b
q2 q2 b
q1
q3 q3 b
a a
q3
a b q0
b
q0 q1 q0 q0
q1 q2 q1 q3
q2 q2 q2 q3
q3 q1 q3 q0
Tuesday, March 27, 12
58.
DFAからSFAの構築 a
q2
q0 q0 /[ab]*a[ab]/
q1 q1 DFA a b
q2 q2 b
q1
q3 q3 b
a a
q3
a b q0
b
q0 q1 q0 q0
q1 q2 q1 q3
q2 q2 q2 q3
q3 q1 q3 q0
a ba b
Tuesday, March 27, 12
59.
DFAからSFAの構築 a
q’0 q2
q0 q0 /[ab]*a[ab]/
q1 q1 DFA a b
q2 q2 b
q1
q3 q3 b
a a
q3
a b q0
b
q0 q1 q0 q0
q1 q2 q1 q3
q2 q2 q2 q3
q3 q1 q3 q0
a ba b
Tuesday, March 27, 12
60.
DFAからSFAの構築 a
q’0 q2
q0 q0 /[ab]*a[ab]/
q1 q1 DFA a b
q2 q2 b
q1
q3 q3 b
a a
q3
a b q0
b
q’1
q0 q1 q0 q0
q1 q2 q1 q3
q2 q2 q2 q3
q3 q1 q3 q0
a ba b
Tuesday, March 27, 12
61.
DFAからSFAの構築 a
q’0 q2
q0 q0 /[ab]*a[ab]/
q1 q1 DFA a b
q2 q2 b
q1
q3 q3 b
a a
q3
a b q0
b
q’1
q0 q1 q’2
q0 q0
q1 q2 q1 q3
q2 q2 q2 q3
q3 q1 q3 q0
a ba b
Tuesday, March 27, 12
62.
DFAからSFAの構築 a
q’0 q2
q0 q0 /[ab]*a[ab]/
q1 q1 DFA a b
q2 q2 b
q1
q3 q3 b
a a
q3
a b q0
b
q’1
q0 q1 q’2
q0 q0
q1 q2 q1 q3
q2 q2 q2 q3 対応構成法
q3 q1 q3 q0 写像の遷移から
a ba b 状態の遷移に変換!
Tuesday, March 27, 12
63.
DFAからSFAの構築 (cont)
a
/[ab]*a[ab]/ q2
DFA a b
b
q1 q3
b a
a
b
q0
Tuesday, March 27, 12
64.
DFAからSFAの構築 (cont)
a
/[ab]*a[ab]/
対応構成法
q2
DFA a b
b
q1 q3
b a
a
b a
q0 b
b q2 b
q0
q6
a
b a
q1 b b
q4 q5
SSFA a
a b a
a
q3
Tuesday, March 27, 12
SSFA - 効率の良い並列マッチング
•SFAの状態遷移は決定的 → DFAと同等
•SFAは受理判定が特殊(並列実行結果のreduce)
•マッチングの計算量(N: テキスト長)
•DFA : O(N)
•SFA(from DFA): O(N/P+P) or O(N/P+|Qd|logP)
N = P の時 O(P) or O(|Qd|logP)
N >> P の時 O(N/P)
Tuesday, March 27, 12