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
54. 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
67. 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