2.2.3.1. Phát biểu bài toán
Bài toán: Cho xâu mẫu P = P1P2 ...Pm (độ dài m) và xâu đích S = S1S2 ... Sn (đo độ dài n) trên bảng chữ A. Tìm khúc con chung dài nhất giữa hai xâu P và S.
Bài toán có thể hiểu là tìm khúc con dài nhất của P xuất hiện trên S.
Để giải quyết bài toán, trước hết ta đưa vào một số ký hiệu.
Cho bảng chữ A, với mỗi xâu u = u1u2...uk, uiA:
+ prefm(u) = u1u2..um (hay gọn hơn là u(m), là khúc đầu gồm m chữ của u. + sufm(u) = uk-m+1uk-m+2...uk là khúc cuối gồm m chữ của u.
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
41 + Quy ước pref0(u) = suf0(u) = (từ rỗng)
+ Với hai số tự nhiên f, d, ||u|| d f 0, đặt u(f,d) = suff(prefd(u)) là khúc cuối độ dài f của một khúc đầu gồm d kí tự của u. Quy ước u(0,d) = . + Với mỗi xâu y là khúc con của u, đặt lid(y,u) = (|y|, Min {dN| f 0: u(f,d) = y}).
+ Cho hai xâu u, v, kí hiệu lfact(v, u) là khúc cuối y dài nhất của v mà y là khúc con nào đó của u, độ dài của xâu y như vậy được ký hiệu là lfuz(v, u).
Ví dụ 2.2. Cho u = drabcgaba, pref6(u) = drabcg, suf2(drabcg) = cg, do vậy u(2,6) = cg, lid(ab, u) = (2,4) vì ab là khúc con trái nhất của u kết thúc tại vị trí 4 trên u và ab có độ dài 2.
Cho v = ghbacabc, lfact(v,u) = abc, lfuz (v,u) = 3, lfact (u,v) = ba, lfuz(u,v) = 2.
Với xâu P độ dài m đã cho, trên các cặp số (f,d), với m d f 0, xác định một quan hệ tương đương như sau: (f,d) tương đương với (f‟,d‟) nếu P(f,d) = P(f‟,d‟) (khi đó hiển nhiên f = f‟). Lớp tương đương của một cặp (f,d) được kí hiệu là [f,d]. Cặp số (f,d) được gọi là có nghĩa (với P) nếu (f,d) là cặp có d nhỏ nhất trong lớp, nghĩa là có khúc con y của P sao cho lid(y,P) = (f,d).
Ví dụ 2.3. Cho u = drabcgaba, các cặp (2,4), (2,8) tương đương vì u (2,4) = u(2,8) = ab, cặp (f,d) = (2,8) là không có nghĩa vì y = ab có vị trí kết thúc trái nhất trên u là ở vị trí 4, không phải ở vị trí 8 mặc dù u (2,8) = y = ab.
Phương pháp giải quyết
Độ mờ xuất hiện mẫu P tại vị trí j trên S là lfuz(S(j),P) (chính là độ dài khúc cuối dài nhất w của S(j) mà w là khúc con nào đó của P). Bản chất thuật toán cần được xây dựng là: duyệt S từ trái sang phải, ở vị trí thứ j, sau khi đọc được kí tự Sj, cho biết ngay cặp giá trị (f,d) có nghĩa
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
42
của P, sao cho P(f,d) = lfact (S(j), P), do đó f = lfuz (S(j), P). Sử dụng biến LenMax để đánh dấu độ dài của khúc con dài nhất tìm được, tính tới vị trí j trên S. Sau khi duyệt xong S, LenMax cho biết độ dài khúc con chung dài nhất của P và S. Thuật toán 2.4 (Mục 2.2.3) được xây dựng dựa trên một mô hình otomat mờ sẽ đáp ứng được yêu cầu trên.
Để xây dựng thuật toán chi tiết, sau đây ta sẽ xét hai hệ hình thức otomat, hệ hình thức thứ nhất đóng vai trò bổ trợ nhằm giúp thể hiện bản chất của hệ thức sau.
2.2.3.2. Otomat so mẫu
Định nghĩa 2.4. Otomat trạng thái các khúc con của P có:
+ Bảng chữ vào A = Ap {#}, Ap gồm các ký tự xuất hiện trong mẫu P và ký tự # Ap đại diện cho các ký tự không có mặt trong P,
+ Tập trạng thái là tập tất cả các khúc con của P, mỗi trạng thái là một khúc con của P (bao gồm cả xâu rỗng),
+ Với mỗi chữ a, mỗi khúc con u của P, hàm chuyển T cho bởi: T(u,a):= lfact(ua,P)
Ta mở rộng tác động cho xâu w=a1a2...ak tuỳ ý
T(u,w):= T(..T(T(T(u,a1),a2),a3),...ak), quy ước T(u, ) = u.
Ví dụ 2.4. P = bcgabcdbabed
T(ab, c) = abc, T(ab, e) = abe, T(ab, z) = , T(ab, zebcd) = bcd.
Dựa vào các tính chất đã được chứng minh trong [11], chúng ta có thuật toán sau:
Thuật toán 2.5. Tìm khúc con chung dài nhất giữa hai sâu Vào: Mẫu P độ dài m; xâu đích S độ dài n
Dựa vào thông tin trên P, đã xây dựng otomat mờ so mẫu với hàm chuyển 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
43
+ LenMax: độ dài của khúc con chung dài nhất + LF_P: vị trí (kết thúc) xuất hiện trên P
+ LF_S: vị trí (kết thúc) xuất hiện trên S Phương pháp
(f,d) := (0,0); f_max := 0; LenMax := 0; LF_P := 0, LF_S := 0; for j:=1 to n do
(f’,d’) := TFuzz((f,d),Sj); (f,d):= (f’,d’);
if f > f_max then f_max := f
else {đã tìm được một khúc con dài nhất của P độ dài f_max và là khúc cuối của S(j)}
if LenMax < f_max then
LenMax := f_max; LF_P := d; LF_S := j; endif; f_max := f; endif; endfor; Return(LF_P, LF_S, LenMax); 2.2.4. Độ gần tựa ngữ nghĩa 2.2.4.1. Ý tưởng về độ gần
Độ gần của xâu S so với xâu P được xác định thông qua số khúc con của P xuất hiện trong S.
Bài toán: Cho xâu kí tự P (xâu nguồn hay mẫu) độ dài m (P = P1P2..Pm) và S (xâu đích) độ dài n (S = S1S2...Sn). Hãy xác định độ gần tựa ngữ nghĩa của S so với P. Độ gần ở đây được hiểu là giá trị thực nằm trong khoảng [1,0] thoả mãn:
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
44 + độ gần bằng 1 nếu xâu P xuất hiện trong S
+ độ gần bằng 0 nếu không có một phần nào của P xuất hiện trong S.
2.2.4.2. Thuật toán sơ bộ tính độ gần 2.2.4.2.1. Ý tưởng 2.2.4.2.1. Ý tưởng
Hình 2.3. Một ví dụ với các khối độ dài t = 3
- Gọi PiPi+1...Pi+t-1 là một khối độ dài t của mẫu P và kí hiệu khối này là (t,i). - Lần lượt xét tất cả các khối độ dài t, t = 1,2,..,m, và kiểm tra xem khối đó có xuất hiện trong S hay không (xem Hình 2.3).
- Tính hàm giá H(S, P) = m t t k 1
* , trong đó k là số khối độ dài t có xuất hiện trong xâu đích S.
- Gọi M là giá trị cực đại của hàm giá (khi S = P),
M = H(P, P) = m 1 t t * 1 t m (2.1). - Độ gần của s so với P là tỷ số H/M
2.2.4.2.2. Thuật toán chi tiết
Thuật toán 2.6. Tính độ gần tựa ngữ nghĩa của xâu S độ dài n so với mẫu P độ dài m.
{Tính độ gần tối đa M = Hmax = H(P, P)}
(3,1) (3,3) (3,5) (3,2) (3,4) P (3,2) (3,1) S (3,5) (3,1)
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 45 M= H(P,P) = m 1 t t * 1 t m ; {Xây dựng hàm giả H(P, S) H:=0; for t:=1 to m do for i:=1 to m - t + 1 do
if (khối (t, i) xuất hiện trong S) then H:=H + t; (2.2)
{Tính độ gần của S so với P} F := H/M;
2.2.4.3. Giải thích độ mờ của mô hình
Giá trị mờ P(S) = H/M cho biết độ gần tựa ngữ nghĩa của P trong S. Tập nền X là tập rõ bao gồm tập tất cả các xâu S trong cơ sở dữ liệu. Khi P(S) = 1 nghĩa là có mẫu P trong S hay toàn bộ thông tin của P được phản ánh trong S. Khi P(S) = 0 thì không có bất kỳ một phần nào của mẫu P trong S (xem Hình 2.4).
Hình 2.4. Tập mờ mô tả độ gần tựa ngữ nghĩa của mẫu P so với xâu đích S Độ phức tạp khi so sánh mỗi khối (t,i) của mẫu được cắt với S có thể sử dụng thuật toán theo tiếp cận mờ xác định nhiều lần lặp mẫu (xem
S1 S S2 S3 độ gần 1,0 0,8 0,4 0,0 0(S)
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
46
mục 2.1.3), cỡ là n, chưa tính khâu tiền xử lý cho cấu trúc bảng chuyển của otomat.
Số khối được xét với mọi t là: m+(m-1) + ... + 1 = m(m+1)/2. Vì mẫu đưa vào thường ngắn từ 3 đến 30 ký tự nên giá trị này có thể coi là hằng số C.
Do đó độ phức tạp thời gian của thuật toán là T = n.m(m+1)/2+Tpt, với Tpr là thời gian tiền xử lý để tính m(m+1)/2 cấu trúc otomat. Thời gian tiền xử lý này là hằng số và không lớn nếu so với n = |S| (rất lớn) nên xem độ phức tạp của thuật toán là O(n). Nhưng nếu S nhỏ và tìm nhiều lần trên nhiều S khác nhau, mỗi S là giá trị trên trường text của bản ghi trong cơ sở dữ liệu, mà phải bắt đầu lại quá trình tìm mẫu thì quá là con số không nhỏ: cỡ k.T, với k là số bản ghi cần duyệt.
2.3. Kết luận chương 2
Chương này trình bày hai bài toán so mẫu xấp xỉ và chính xác theo tiếp cận otomat mờ. Bài toán so mẫu xấp xỉ và chính xác trình bày hệ hình thức cụ thể của otomat mờ tổng quát đã giới thiệu ở Mục 1.2. Hệ hình thức otomat thứ nhất có trạng thái mờ là một số tự nhiên (chính là một vectơ gồm 1 thành phần), làm cơ sở cho thuật toán so mẫu KMP mờ. Thuật toán này có thể xem như một tiếp cận mới cho thuật toán kinh điển KMP - tiếp cận otomat mờ. Hình thức thứ hai có trạng thái mờ là một bộ gồm hai thành phần, làm cơ sở cho thuật toán so mẫu KMP - BM mờ, với ý tưởng có bước dịch chuyển xa trên xâu đích S như trong thuật toán BM. Quan niệm về “độ mờ xuất hiện mẫu” trong cả hai thuật toán này đều là độ dài khúc đầu dài nhất của mẫu P đã xuất hiện trên xâu đích S, tính tới vị trí đang xét.
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
47
Chương 3. TÌM KIẾM MẪU TRONG VĂN BẢN NÉN VÀ MÃ HOÁ
3.1. Tiếp cận tìm kiếm tổng quát trên văn bản nén và mã hoá
Khi tìm kiếm trên văn bản nén hoặc mã hoá, bài toán bơ bản đặt ra như sau: Cho mẫu P là một xâu độ dài m (P = P1,P2,...Pm) trên bảng chữ A. Xâu vào S được nén hoặc mã hoá thành xâu Y = Y1Y2...Yn trên bảng chữ B bằng một phương pháp nén (hoặc mã hoá) đã biết trước. Tìm tất cả các xuất hiện của mẫu P trên Y.
Đối với những văn bản nén, mặc dù đem lại hiệu quả rõ rệt về mặt lưu trữ, quản lý, tổ chức và chuyển tải, song lại làm mất đi phần lớn cấu trúc của dữ liệu, dẫn đến khó khăn cho việc tìm kiếm và trích rút thông tin. Cách đơn giản nhất rất tốn thời gian (và khó khả thi với những văn bản quá lớn) là giải nén toàn bộ rồi tiến hành tìm kiếm bằng một thuật toán so mẫu kinh điển. Hiện nay đã có nhiều giải pháp tốt hơn cho phép tìm kiếm trực tiếp trên dữ liệu nén mà không cần giải nén hoặc chỉ giải nén một phần. Tìm kiếm không giải nén được gọi là so mẫu nén (full- compressed pattern matching hay còn gọi là compressed pattern matching), trong đó mẫu được nén rồi đem so với văn bản nén. Tuy nhiên phương pháp này nhiều khi không khả thi, đặc biệt là với những thuật toán nén có sử dụng các biểu diễn khác nhau cho cùng một xâu con, tuỳ thuộc vào ngữ cảnh của xâu con đó. Một kỹ thuật khác là so mẫu trên miền nén (compressed-domain pattern matching), trong đó sử dụng biện pháp giải nén bộ phận trên văn bản, nhờ đó mà tránh được một số hạn chế của phương pháp so mẫu nén mà vẫn đảm bảo không phải giải nén toàn bộ.
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
48
Hình 3.1. Phương pháp so mẫu trên miền nén có sử dụng otomat mờ Cải tiến từ thuật toán so mẫu KMP - BM mờ được giới thiệu ở Chương 1, một thuật toán theo kiểu so mẫu trên miền nén được đưa ra. Giải pháp này phù hợp với những văn bản đã được nén bằng bất kỳ phương pháp nén nào mà có giải nén là một khối kí tự. Ưu điểm quan trọng của việc sử dụng thuật toán KMP-BM mờ trên dữ liệu giải nén cục bộ so với các thuật toán kinh điển (như KMP, BM,...) là không cần lưu lại bất kỳ kí tự nào mà đã duyệt qua, đồng thời có tốc độ nhanh nhờ những bước dịch chuyển xa trên khối dữ liệu tìm kiếm, song việc cài đặt lại đơn giản. Ý tưởng chung của các thuật toán so mẫu trên miền nén có sử dụng tiếp cận otomat mờ được mô tả trong Hình 3.1.
Văn bản nén Vùng đệm Otomat so mẫu Mẫu P Tiền xử lý
Độ mờ xuất hiện mẫu P Giải nén cục bộ
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
49
Hình 3.2. Phương pháp so mẫu không giải mã
Nén dữ liệu text thực chất là một quá trình mã hóa, vì vậy thuật toán tìm kiếm trên văn bản nén có thể áp dụng đối với văn bản mã hóa dạng khối kí tự. Tuy nhiên, đối với các văn bản mã hóa, yêu cầu về tính bảo mật là rất quan trọng. Mặc dù dữ liệu giải nén cục bộ chỉ được lưu giữ một thời gian ngắn trên bộ nhớ trong, song không thể chắc chắn đây không là một sơ hở để lộ thông tin. Để nâng cao tính bảo mật, tránh rò rỉ thông tin ngay trong quá trình tìm kiếm, ý tưởng tìm kiếm xâu mẫu trong văn bản mã hóa mà không cần giải mã cục bộ được đưa ra. Phương pháp này được gọi là so mẫu không giải mã. Khả năng này có được chính là nhờ sử dụng tiếp cận otomat cho quá trình tìm kiếm. Hình 3.2 mô tả ý tưởng chung của các phương pháp so mẫu không giải mã. Trong Mục
Tiền xử lý Mẫu P Nếu được 1 từ mã Đọc một ký tự thuộc bản mã Văn bản mã hoá Otomat đoán nhận một từ mã Otomat so mẫu Đọc một ký tự thuộc bản mã
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
50
3.2.3.3 sẽ trình bày một ứng dụng cụ thể kiểu so mẫu không giải mã, áp dụng trên văn bản mã hóa bởi mã đàn hồi (đây là một dạng mã dựa trên tích đàn hồi được giới thiệu trong [HN]).
Với tiếp cận otomat mờ, các thuật toán tìm kiếm chính xác trên văn bản nén và mã hóa được trình bày ở đây có thể dễ dàng chuyển đổi sang tìm kiếm gần đúng bằng cách sử dụng những otomat so mẫu xấp xỉ đã giới thiệu ở trên.
3.2. Tìm kiếm trên văn bản nén 3.2.1. Các mô hình nén văn bản 3.2.1. Các mô hình nén văn bản
Nén dữ liệu là một lĩnh vực của lý thuyết thông tin mà mục đích chính là làm giảm thiểu khối lượng dữ liệu được lưu trữ và trao đổi. Nén dữ liệu text thực chất là một quá trình mã hóa, chuyển các thông báo nguồn (trong bảng chữ nguồn A) thành các bản mã (trong bảng chữ mã B) và ngược lại là quá trình giải mã. Các dạng mã hóa có thể là block - block, block - variable, variable - block và variable - variable , trong đó block - block là các thông báo nguồn và các bản mã đều có thể thay đổi. Một cách phân loại khác chỉ ra 2 phương pháp nén là tĩnh và động. Trong phương pháp tĩnh, ánh xạ từ tập thông báo nguồn đến tập từ mã được xác định trước khi bắt đầu quá trình chuyển đổi nên với một thông báo cho trước thì tất cả các lần xuất hiện của nó đều tương ứng với một bản mã. Với phương pháp động, ánh xạ từ tập thông báo đến tập bản mã thay đổi theo thời gian. Cho đến nay đã có nhiều thuật toán nén dữ liệu text được đưa ra [15], như nén Hufman, LZ, LZW,...
3.2.2. Thuật toán tìm kiếm trên dữ liệu nén dạng text
Thuật toán theo tiếp cận mờ đã nêu ở mục 2.2 có thể áp dụng trên các tệp dữ liệu nén mà không cần giải nén toàn bộ. Ý tưởng cơ bản là đọc tuần tự trên tệp nén và mở nén một số mã nén, lưu kết quả giải nén
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
51
cục bộ vào vùng đệm và áp dụng thuật toán theo tiếp cận mờ trên vùng đệm này. Khi đó một số vấn đề đặt ra là:
(i) Vùng đệm phải có độ dài đáp ứng được yêu cầu:
- Luôn có thể đọc được một khối kí tự w độ dài m+1 (với m là độ