5. Bố cục của đề tài
2.1.4.2. Xõy dựng mỏy đối sỏnh mẫu hữu hạn trạng thỏi từ tập cỏc mẫu
hợp với từ khúa.
Như đó trỡnh bày ở trờn, mỏy đối sỏnh mẫu được xõy dựng từ 3 hàm chức năng: Hàm goto(g), hàm failure(f), và hàm output. Chỳng ta sẽ đi tỡm hiểu kỹ và sõu hơn về 3 hàm này.
a. Hàm goto (g).
- Để xõy dựng hàm goto (g) hay xõy dựng đồ thị(trie) goto (g). Mỗi một đỉnh của đồ thị tương ứng với một trạng thỏi hiện tại mà ký tự hay từ khúa được đưa vào bằng cỏch thờm một đường dẫn từ trạng thỏi đầu tiờn. Đường dẫn này biểu diễn cho ký tự, chuỗi được đưa vào.
Cũng bằng cỏch thờm đường dẫn mà đỉnh mới và cạnh mới của đồ thị được thờm vào.
- Xột vớ dụ: Cho cỏc từ khúa, chuỗi (he, she, his, hers) biểu diễn hàm goto như sau: Xõy dựng trie
B1: Quột từ khúa đầu tiờn: “he”, chỳng ta được.
Cỏc đỉnh của đồ thị tương ứng với trạng thỏi hiện tại của ký tự được quột: 0,1; đường dẫn từ đỉnh 0->1 biểu diễn cho ký tự được quột: h
20 Tiếp tục đến ký tự e của từ khúa.
Đường dẫn từ trạng thỏi 0->2 tương ứng với từ khúa “he” sẽ kết hợp với hàm output đưa ra từ khúa “he” tại trạng thỏi 2.
B2: Quột thờm từ khúa: she lỳc này đồ thị goto sẽ là:
Đầu ra là từ khúa “she” tương ứng là trạng thỏi 5.
B3: Quột đến ký tự: his .
Nhận thấy khi quột từ khúa his. Đường dẫn biểu diễn ký tự h từ trạng thỏi 0->1đó cú nờn chỳng ta khụng cần biểu diễn lại nữa.
Đầu ra là từ khúa “ his” tương ứng trạng thỏi 7.
21
Hỡnh 2.6: Đồ thị hàm goto với cỏc từ khúa đầu vào.
Đầu ra là từ khúa “ hers” tương ứng ở trạng thỏi 9. - Xõy dựng hàm goto: Pseudocode thuật toỏn 1. Input : Cho tập hợp cỏc từ khúa K { ,y y1 2,...,yk}.
Output: hàm goto(g) và một phần chuỗi ký tự đầu ra output. Method: Giả sử
( )
output s khi trạng thỏi s được gọi đầu tiờn.
( , ) g s a fail nếu ký tự a khụng xỏc định. ( , ) g s a chưa được xỏc định. Pseudocode : hàm goto (g). begin: newstate=0;
for i=1 until k do enter(yi)
for all a such that g(0,a)=fail do g(0,a)=0
end;
procedure enter(a1,a2,...,am):
begin:
state=0; j=1;
while g(state,aj)!= fail do begin
22 state=g(state,aj); j=j+1; end; for p=j until m do begin newstate=newstate+1; g(state,ap)=newstate; state=newstate; end; ouput(state)={a1,a2,...,am}; end; b. Hàm function failure (f):
- Hàm failure được xõy dựng dựa trờn hàm goto.
- Một khỏi niệm được nhắc đến trong hàm failure là độ sõu(depth) của 1 trạng thỏi trong đồ thị hàm goto. Depth là chiều dài ngắn nhất từ trạng thỏi bắt đầu cho tới trạng thỏi hiện tại s.
- Vớ dụ khi quột cỏc ký tự, từ khúa đầu vào: he, she, his, hers
Hỡnh 2.7: Hàm failure
Ta cú: Độ sõu(depth) của 1 trạng thỏi Depth 0: 0
Depth 1: 1, 3 (hay depth 1: f s( ) f(1) 0). Depth 2: 2, 4, 6 (depth 2: f s( ) f(2) 0).
23 …
Depth 9: 9 (depth 9: f s( ) f(9) 3).
- Tại depth d: xột mỗi trạng thỏi rcú depth d 1. + Nếu g r a( , )= fail a : bỏ qua.
+ Nếu g r a( , ) s ta cú thể làm như sau: (a): Đặt trạng thỏi t f r( ).
(b): Gỏn t f t( ) đến khi g t a( , )≠ fail. (c): Đặt f s( ) g t a( , ).
- Xõu dựng hàm failure (f): Pseudocode thuật toỏn 2.
Input : hàm goto (g) và hàm output từ bước xõy dựng hàm goto ở trờn. Output: Hàm failure (f) và đầu ra hàm output.
Method :
begin
queue=empty;
for each a such that g(0,a)=s!=0 do begin queue=queue U {s}; f(s)=0; end; while queue!=empty do begin
let r be the next state in queue queue=queue-{r};
for each a such that g(r,a)=s!=fail do begin queue=queue U {s}; state=t; t=f(r); while g(t,a)=fail do t=f(t) f(s)=g(t,a);
24 output(s)=output(s) U ouput(f(s)); end; end; end; c. Hàm output:
- Được xõy dựng trong quỏ trỡnh xõy dựng 2 hàm goto và hàm failure. - Vớ dụ:
Hỡnh 2.8: Hàm ouput
+ Ở hàm goto:
(2, )
g e -> he; g(5, )e -> she; g(7, )s -> his; g(9, )s -> hers. + Ở hàm failure:
(2) 0
f => output (2) = he;
(5) 2
f => ouput (5) = { she, he}
(7) 3
f => output (7) = {his}
(9) 3
f => ouput (9) = {hers}