Thuật toán

Một phần của tài liệu Luận văn:Tìm kiếm mờ và ứng dụng tìm kiếm thông tin trong các văn bản nén potx (Trang 38 - 41)

Khi cài đặt thuật toán cần lưu ý lựa chọn cấu trúc dữ liệu phù hợp để có thể truy nhập nhanh chóng trong bảng TFuzz.

Gọi A[0..k] là mảng lưu giữ bảng chữ A của otomat, trong đó k là số kí tự phân biệt trong mẫu P. Màng được sắp theo chiều tăng của các kí

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

30

tự và A[k] = „#‟. Để thuận tiện khi truy nhập đến các chữ cái trong A, có thể sử dụng mảng index xác định vị trí của chữ trong bảng.

i, nếu c = A [i] index [c] =

k, nếu c  {A[0], A[1], ...A[k-1]}

TFuzz là mảng [0..m, 0..k], trong đó TFuzz [i, j] là độ mờ mới khi độ mờ i gặp kí tự x có index [] = j.

Khi đó chi tiết thuật toán tạo lập bảng TFuzz và tìm kiếm dựa vào bảng TFuzz sẽ như sau:

Thuật toán 2.1. Tạo lập TFuzz

procedure initTFuzz() var i, j, t: integer; begin for i: = 0 to m do TFuzz [i,m]:=0; for j: = 0 to k do TFuzz [0, j] := 0; TFuzz [0, index [P1]]:=1; for i: = 0 to m do for t: = 0 to k-1 do

begin if i = m then j:= next [i+1] elsse j:=i+1;

while (j > 0) and (Pj A([t]) do j:=next [j]; TFuzz [i, index [A[t]]:= j;

end; end;

Thuật toán 2.2. Tìm kiếm mẫu dựa vào bảng TFuzz

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

31

var j, counter: integer; fuz: array [1..50] of integer; {* độ mờ*} begin

j :=1; counter :=0; fuz[0] = 0; while (còn đọc được Sj) do

begin fuz [j] = TFuzz [fuz[j-1], index [Sj]]; if fuz [j] = m then

begin counter :=counter+1; Ghi nhận vị trí j-m+1; end;

end; {while} Ghi nhận counter;

if counter = 0 then Ghi nhận vị trí 0; end;

Ví dụ 2.1. Với mẫu P = aababaab, A = {a, b, #}, AP = {a,b}.

Bảng TFuzz được tính toán dựa trên mảng next (ví dụ 1.1, Mục 1.5.1) cho kết quả như sau:

A Q a b # 0 1 0 0 1 2 0 0 2 0 3 0 3 4 0 0 4 2 5 0 5 6 0 0 6 7 0 0 7 2 8 0 8 4 0 0

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

32

Quá trình so mẫu trên dòng dữ liệu S = aabaababaababaababaab sẽ như sau:

j 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 S a a b a a b a b a a b a b a a b a b a a b j 1 2 3 4 2 3 4 5 6 7 8 4 5 6 7 8 4 5 6 7 8

ghi nhận ghi nhận ghi nhận 11-8+1=4 168+1=9 21-8+1=14 (adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu Luận văn:Tìm kiếm mờ và ứng dụng tìm kiếm thông tin trong các văn bản nén potx (Trang 38 - 41)