Ứng dụng cây hậu tố để so khớp độ giống nhau giữa các văn bản

Một phần của tài liệu Ứng dụng cây hậu tố để so khớp độ giống nhau giữa các tài liệu (Trang 32 - 35)

CHƯƠNG 2. ỨNG DỤNG CÂY HẬU TỐ ĐỂ SO KHỚP ĐỘ GIỐNG NHAU GIỮA CÁC TÀI LIỆU

2.4. Ứng dụng cây hậu tố để so khớp độ giống nhau giữa các văn bản

Cây hậu tố là một cấu trúc dữ liệu quan trọng đƣợc sử dụng trong rất nhiều thuật toán xử lý chuỗi. Nó cho phép thực hiện rất nhiều thuật toán hiệu quả quan trọng về chuỗi và đƣợc ứng dụng rộng rãi trong nhiều lĩnh vực khác nhau của khoa học máy tính nhƣ: đối sánh mẫu, tìm xâu con chung... Đây là những bài toán trong các kỹ thuật xử lý văn bản, tìm kiếm thông tin.

Một trong những điểm mạnh của cây hậu tố là cho phép thay đổi và mở rộng cấu trúc mỗi khi có sự cập nhật dữ liệu mới. Tính chất này có thể xử lý trên một tập dữ liệu lớn, đặc biệt là dữ liệu chuỗi, sẽ tiết kiệm đƣợc thời gian và không gian xử lý dữ liệu.

2.4.1. Phát biểu bài toán

Chuỗi con của một chuỗi S là chuỗi thu đƣợc bằng cách chọn ra một số ký tự liên tục trong S.

Xét ví dụ dưới đây, Cho 2 chuỗi S và T:

S = ab ga ctc a gcbac t ggbcagctadacbaccgc @ T = ab gt ctc t gcbacggbcagctad c acbaccgc $

Dễ thấy 2 chuỗi S và T có chung khá nhiều xâu con: ab, ctc, gcbac, ggbcagctad và acbaccgc. Trong 5 xâu con chung đó chỉ có ac không phải là duy nhất. Nó xuất hiện hơn một lần ở cả hai chuỗi. Bạn có thể chỉ ra rằng a, c, b và g cũng là xâu con chung của S và T. Tuy nhiên chúng không phải là lớn nhất vì chúng có trong ít nhất một xâu con chung dài hơn. Chúng ta chỉ xét tới những xâu con chung có độ dài lớn nhất.

Nhiệm vụ của chúng ta là tìm ra tất cả các xâu con chung duy nhất và có độ dài

lớn nhất của hai xâu A và B cho trước. Mỗi xâu con chung này còn được gọi là LCS. Vì vậy LCS có hai đặc tính:

 Nó xuất hiện duy nhất một lần trong cả hai xâu

 Nó không nằm trong bất kì một LCSs dài hơn (hay nó có chiều dài tối đa).

Chúng ta có định nghĩa về LCS nhƣ sau:

LCS là một xâu con chung giữa 2 xâu có độ dài lớn hơn một độ dài d xác định và nó có độ dài lớn nhất, nghĩa là không thể mở rộng nó bằng cách thêm vào bất kỳ kí tự nào và cuối cùng LCS là duy nhất trong cả hai xâu.

Với ví dụ trên giả sử d = 3, Chuỗi S và T có 4 LCSs: ctc, gcbac, ggbcagctad, acbaccgc. Xâu con ac không phải là LCS vì có độ dài bé hơn d và nó không phải là duy nhất trong cả hai chuỗi.

Bài toán: Đưa ra tất cả các LCS giữa hai xâu S1, S2 cho trước.

Input: Hai xâu S1 và S2;

Output: Tất cả các LCS của hai xâu;

2.4.2. Xây dựng tập dữ liệu

Ý tưởng cơ bản của thuật toán là xây dựng cây hậu tố cho xâu có độ dài bé hơn trong hai xâu nhằm giảm thời gian duyệt cây do đó tăng tốc độ tìm kiếm các LCS. Sau đó duyệt xâu còn lại trên cây vừa xây dựng đƣợc để đƣa ra đƣợc các xâu con chung, cuối cùng ta mở rộng các xâu con này ra tới mức tối đa và thu đƣợc các LCS.

Giả sử length(S1) < length(S2), ta sẽ xây dựng cây hậu tố T cho xâu S1. Quy ƣớc:

- Cấu trúc LCS lưu trữ các thông tin sau (start1, start2, length).

- Start1 là vị trí bắt đầu của LCS ở xâu S1 và start2 là vị trí bắt đầu của LCS ở xâu S2, length là độ dài của LCS, length >= k.

- k là độ dài tối thiểu của 1 LCS,

- S1(p) là xâu con của S1 từ vị trí p đến p+k-1, - S2(p) là xâu con của S2 từ p đến p-k+1, - SS là mảng lưu trữ các LCS hiện tại, - len1: độ dài S1,

- len2: độ dài S2.

- 1 LCS sa = (start1, start2, length) trong danh sách SA đƣợc gọi là mở rộng đƣợc (extendable), nếu (start1 + p - start2) là 1 giá trị trong danh sách L1.

Bảng 2.2. Thủ tục tìm LCS sử dụng cây hậu tố

1. Xây dựng cây hậu tố T1 từ S1, set SA = [], L1=[], SS=[];

2. for p := 0 to len2 – k do slide S2(p) on T1;

3. if S2(p) end at a node of T1 then

4. lưu tất cả các vị trí xuất hiện của S2(p) trong xâu S1; 5. lưu tất cả các LCS vào SS;

6. While all LCS in SS isn’t extentable do

7. if LCS sa= (start1, start2, length) is extentable then length++;

delete value (start1 +1) in L1; 8. else save sa to SA;

9. if L1!= NULL then save all value in L1 to SA;

Một phần của tài liệu Ứng dụng cây hậu tố để so khớp độ giống nhau giữa các tài liệu (Trang 32 - 35)

Tải bản đầy đủ (PDF)

(71 trang)