Từ một thuật toán đối sánh xâu vòng tròn chính xác trong trƣờng hợp dƣới mức tối ƣu trung bình có thời gian đối sánh O(n), sẽ có hai thuật toán đối sánh xâu vòng tròn gần đúng trong trƣờng hợp nhanh trung bình với k khác biệt (không đối
sánh), theo mẫu khoảng cách Hamming, cần thời gian O(n) cho các giá trị trung bình của k, đó là k = O(m/log m) [12].
- Một xâu x với độ dài n nhƣ một hàng x[0. .n – 1], tại mỗi x[i], 0 ≤ i ≤ n, một kí tự đƣợc rút ra từ bảng chữ cái cố đã đƣợc cố định ∑ với có kích cỡ |∑|. Xâu rỗng với độ dài bằng 0 đƣợc dùng cho ԑ. Một xâu x là một một nhân tố của một xâu y nếu tồn tại 2 xâu u và v, sao cho y = uxv. Để các xâu x, y, u và v sao cho y = uxv. Nếu u = ԑ, thì x là một tiền tố của y, nếu v = ԑ, thì x là một hậu tố của y.
- Cho x là một xâu không rỗng có độ dài n và y là một xâu. Nếu có sự xuất hiện của chuỗi x trong chuỗi y một hoặc nhiều lần, hoặc, đơn giản hơn là x
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
tại vị khí bắt đầu i trong y khi y[i. .i + n -1] = x. Khoảng cách Hamming giữa
các xâu x và y, trong đó cả hai xâu đều có độ dài bằng n, là số vị trí i, 0 ≤ i ≤ n, sao cho x[i] ≠ y[i]. Với k là số nguyên không âm, chúng ta có thể viết x ≡ ky nếu
khoảng cách Hamming [14] giữa x và y hầu hết là thuộc dãy số k.
- Một xâu vòng có độ dài n có để đƣợc xem nhƣ là một xâu tuyến tính truyền thống với các biểu tƣợng ngoài cùng bên trái và phải bao quanh và gắn vào nhau theo một cách nào đó. Theo cách hiểu này, các xâu vòng tròn tƣơng tự có thể đƣợc xem nhƣ là các xâu tuyến tính với n khác nhau, tất cả các xâu đƣợc xem là tƣơng đƣơng nhau. Với một xâu x độ dài n, chúng ta có xi = x[i. .n-1]x[0. .i – 1], 0 < i < n,
vòng lặp i-th của x và x0= x. ví dụ, xem xâu x = x0= abababbc; xâu này sẽ có các
vòng lặp sau đây: x1
= bababbca, x2= ababbcab, x3= babbcaba, x4 = abbcabab, x5 =
bbcababa, x6 = bcababab, x7 = cabababb.
- Cần quan tâm tới vấn đề tìm ra các lần xuất hiện của xâu mẫu x với độ dài m với cấu trúc vòng trong một xâu văn bản t có độ dài n với cấu trúc tuyến tính.
Ví dụ: Trình tự DNA (deoxyribonucleic acid - vật liệu di truyền) của rất nhiều vi-rút có cấu trúc vòng xoắn, vì thế một nhà sinh học muốn tìm các lần xuất hiện của một vi-rút cụ thể trong trình tự DNA đƣợc đƣa ra mà không phải dạng vòng tròn-thì họ phải xem làm thế nào để xác định đƣợc tất cả các vị trí trong t mà có ít nhất một vòng lặp x xuất hiện. Đây chính là vấn đề của "đối sánh xâu vòng tròn".
Có hai vấn đề khi áp dụng xử lý đối sánh theo phƣơng pháp "xâu vòng tròn" đó là thực hiện đối sánh chính xác và đối sánh xấp xỉ với k ký tự khác nhau theo mô hình khoảng cách Hamming. Đó là:
- Vấn đề thứ nhất (đối sánh xâu vòng tròn chính xác): Từ một mẫu x có độ
dài m và một văn bản t có độ dài n > m, tìm ra tất cả các yếu tố u của t sao cho u = xi, 0 ≤ i < m.
- Vấn đề thứ hai (đối sánh xâu vòng tròn gần đúng với k khác biệt): Từ một mẫu x có độ dài m, một văn bản t có độ dài n > m, và một ngưỡng số nguyên k < m, tìm ra tất cả các yếu tố u của t sao cho u ≡ k xi , 0 ≤ i < m.
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
Với các cách tiếp cận chia nhỏ chuỗi đối sánh thành các phần bằng nhau để xử lý. Trong thuật toán đề cập sau đây sử dụng cách chia chuỗi đối sánh làm 4 chuỗi thành phần.
Bài toán đối sánh chuỗi xấp xỉ với k ký tự khác nhau đƣợc phát biểu nhƣ sau:
Từ một mẫu x có độ dài m, một văn bản t có độ dài n > m, và một ngưỡng số nguyên k < m, tìm ra tất cả các yếu tố u của t sao cho u ≡ k xi , 0 ≤ i < m.
Thuật toán đƣợc thực hiện trên ý tƣởng chia chuỗi đối sánh thành các thành phần có độ dài nhƣ nhau nhằm nâng cao hiệu quả tìm kiếm. Ý tƣởng đƣợc ần chứa dƣới hai kỹ thuật lọc trong quá trình đối sánh và kiểm tra thành phần sánh khớp. Bằng việc tìm kiếm chính xác các thành phần con để áp dụng cho tìm kiếm xấp xỉ chuỗi tổng thể. Ở đây thực hiện hiện tìm kiếm chính xác với thành phần cuối cùng của chuỗi để đối sánh chính xác. Thành phần này làm mẫu trong đối sánh xấp xỉ.
Sự kiện 1: Bất kỳ vòng lặp x = x [0. .m – 1] là một nhân tố của x' = x[0. .m – 1] x[0. .m – 2]; và bất kỳ yếu tố nào có độ dài m của x' là một vòng lặp x.
Bổ đề 1: Nếu chúng ta phân vùng x' = x [0. .m – 1]x[0. .m – 2] trong 4 mảnh có độ dài [2m-1)/4] và (2m-1)/4], ít nhất một trong 4 mảnh này là một yếu tố của bất kỳ yếu tố nào có độ dài m của x'.
Bổ đề 2: Để x và y = y0y1 … yk là k + 1 ≤ n xâu không rỗng và x =k y. Sau đó có ít nhất 1 xâu yi, 0 ≤ 1 ≤ k, bắt đầu từ vị trí j của y, 0 ≤ j < n, xuất hiện tại điểm khởi đầu j của x.
Bổ đề 3: Nếu chúng ta phân vùng x' = x[0 . .m – 1]x[0 . .m – 2] trong 2k + 4 mảnh có độ dài [(2m – 1)/(2k + 4)] và [(2m – 1)/(2k + 4)], ít nhất k + 1 của 2k + 4 mảnh là các yếu tố của bất kỳ yếu tố nào có độ dài m của x'.
Đối sánh xâu vòng tròn gần đúng với k không đối xứng qua bộ lọc
(Approximate Circular String Matching with k-mismatches via Filtering – ACSMF) đƣợc dựa trên các ý tƣởng của thuật toán ECSMF (Exact Circular String Matching via Filtering – Đối sánh xâu vòng tròn chính xác qua bộ lọc) để giải quyết vấn đề
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
thứ nhất), luận văn sẽ trình bày các thuật toán ACSMF và ACSMF-Đơn giản, hai thuật toán đối sánh xâu vòng tròn gần đúng mới cho trƣờng hợp nhanh trung bình này có k không đối xứng qua bộ lọc nhằm giải quyết vấn đề thứ hai.
* Thuật toán ACSMF:
Thuật toán đƣợc thực hiện qua các bƣớc sau đây [12]:
- Bƣớc 1: Xây dựng xâu x' = x[0 .. m – 1]x[0 .. m -2] có độ dài 2m -1. Bằng sự kiện 1, bất kỳ vòng lặp nào của x cũng là một yếu tố của x'.
- Bƣớc 2: Mẫu x' đƣợc phân vùng trong 2k + 4 mảnh có độ dài [(2m – 1)/(2k + 4)] và [(2m – 1)/(2k + 4)]. Bằng bổ đề 3, ít nhất k + 1 của 2k + 4 mảnh là những yếu tố của bất kỳ vòng lặp nào của x.
- Bƣớc 3: Đối sánh 2k + 4 mảnh đối với văn bản t sử dụng một thuật toán tự động Aho Corasick. Để £ là một danh sách bộ dữ liệu cỡ Occ (Occ – kết quả xuất hiện của x' trong t), tại đó < px', l, pt> є £ là một bộ 3 dữ liệu, sao cho 0 ≤ px' < 2m -1 là vị trí mà mảnh xuất hiện trong x'
, l là độ dài của mảnh tƣơng ứng, và 0 ≤ pt< n là vị trí mà mảnh xuất hiện trong t.
- Bƣớc 4: Tính toán chỉ số SA, iSA, LCP, và RMQLCP của T = tx'. Tính toán SA, iSA, LCP và RMQLCP của Tr = rev (tx'), đó là một xâu đảo ngƣợc của tx'
.
Trong đó:
+ SA (Suffix Array): Mảng hậu tố
+ iSA (inverted Suffix Array): Mảng hậu tố đảo ngƣợc
+ LCP (Longest Common Prefixes): Tiền tố thông thƣờng dài nhất + RMQLCP (Range Minimum Quere): Phạm vi tìm kiếm tối thiểu của LCP - Bƣớc 5: Đối với mỗi bộ dữ liệu < px', l, pt> є £, thử mở rộng tới k+1 bên phải qua phép tính toán ԑ (ԑ - chỉ số độ dài tiền tố thông thƣờng dài nhất):
ԑ0
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/ ԑl r← LCE(T, px' + l+ ԑ0 r, 2m – 1 + pt +l + ԑ0 r ) + 1 …. ԑk-1 r← LCE(T, px' + l + ԑk-2 r, 2m – 1 + pt +l + ԑk-2 r ) + 1 ԑk r← LCE(T, px' + l + ԑk-1 r, 2m – 1 + pt +l + ԑk-1 r ) Nói cách khác, tính toán độ dài ԑk
r của tiền tố thƣờng dài nhất của px' [px' + l . . 2m -1] và t[pt+ l .. n -1], cả hai đều là các hậu tố của T, với k không đối xứng. Tƣơng tự thử mở rộng sang trái với k + 1 thời gian qua tính toán ԑk
l sử dụng câu hỏi LCE (LCE: Longest common extension – Độ mở rộng thông thƣờng dài nhất) về các hậu tố của Tr.
- Bƣớc 6: Đối với mỗi bộ dữ liệu < px', l, pt> є £, thuật toán tiến hành mở rộng thử và cập nhật lại mảng M với 2m-1 phần tử, các phần tử đƣợc khởi đầu bởi 0 và ghi giá trị của phần tử theo biểu thức đƣợc đánh dấu vị trí của i - là vị trí bên phải và bên trái ký tự đối sánh xuất hiện sai khác với 0 < i < k, bằng thiết lập:
M[px'- ԑi-1
l - l] ← 1 và M[px'+ l + ԑi-1
l] ← 1 - Bƣớc 7: Với mỗi ԑk
l, ԑk
r, M tính toán cho bộ dữ liệu < px', l, pt> є £, thuật toán thực hiện ghi nhớ tất cả các vị trí bắt đầu trong chuỗi t bằng việc kiểm tra tổng độ dài phải thỏa mãn biểu thức ԑk
l + l + ԑk
r m; đó là chiều dài của sự mở rộng hết cỡ mảnh lớn hơn hoặc bằng m. Trong trƣờng hợp này thì thuật toán thực hiện đếm số ký tự đối sánh khác biệt tại vị trí xuất hiện đối sánh ở các vị trí maxpt- ԑkl, pt+l-
m,..., minpt+l-m+ ԑkr , pt; bởi việc tổng hợp các ký tự khác biệt bắt đầu từ vị trí bắt đầu xuất hiện ở trái cùng của chuỗi đối sánh j M[px' - ԑkl] + ... + M[px' - ԑkl +
m - 1], tại đó j = maxpt- ԑkl, pt+l-m. Với mỗi vị trí tuần tự j+1, thực hiện lấy ra các giá trị con ở bên phải cùng của M và tính toán đƣơck µj và thêm giá trị này vào để tính toán cho phần tử tiếp theo µj+1. Trong trƣờng hợp này µj<k và ghi lại vị trí j.
Ví dụ: Cho mẫu x = GGGTCTA có độ dài m = 7, văn bản t =
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/ GGGTCTAGGGTCT. Thuật toán đƣợc thực hiện nhƣ sau:
Bƣớc 1: x' đƣợc phân vùng vào GGG, TC, TA, GG, GT, và CT
Bƣớc 2: Xem xét < 9, 2, 15 > є £, đó là, mảnh x' [9 .. 10] = GT, có độ dài l =
2, xuất hiện tại vị trí khởi đầu pt = 15 trong t
Bƣớc 3: Sau đó T = GGGTCTAGGGTCTGATACGATACCTAGGGTGATAGAATAG và Tr = TCTGGGATCTGGGGATAAGATAGTGGGATCTATAGCATAG Bƣớc 4: Mở rộng sang trái có ԑk l= 6, khi đó Tr[4 .. 9] ≡ k Tr[25..30] và Tr[10] ≠ Tr[31]; và mở rộng sang phải có ԑk r = 1, khi đó T[11] ≡ k T[30] và T[12] ≠ T[31] Bƣớc 5: Thiết lập M[px'- ԑi-1 l - l] = M[9 – 6 – 2] = M[1] = 1 và M[px'+ l + ԑi-1 l] = M[9 + 1 + 1] = M[11] = 1
Bƣớc 6: Kiểm tra thấy ԑl + l + ԑr = 6 + 2 + 1 = 9 > m = 7, và do đó có các vị trí thứ 10, khi đó ∑10
i=4M[i] = 0 < k, và thứ 11, khi đó ∑11i=5M[i] = 1 = k
Bƣớc 7: Thuật toán thực hiện đếm số ký tự đối sánh khác biệt tại các vị trí xuất hiện nhƣ sau: maxpt- ԑkl, pt+l-m,..., minpt+l-m+ ԑkr , pt
= max{15 – 6, 15 + 2 – 7} = max{9, 10} = 10, …, = min{15 + 2 – 7 + 1, 15} = min{11, 15} = 11; Đó là, x4
= CTAGGGT và x5 = TAGGGTG xảy ra tại vị trí khởi đầu 10 trong t mà không có lỗi đối sánh và ở vị trí khởi đầu 11 trong t với 1 lỗi đối sánh.
Ta có định lý sau: Với một mẫu x với độ dài m được lấy từ bảng chữ cái ∑, ϭ = │∑│, một văn bản t có độ dài n > m rút ra từ ∑, và một ngưỡng nguyên dương k < m, thuật toán ACSMF cần thời gian trung bình O((1 +
4 2 1 2 k m - km )n) và không gian
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
Hệ luận 1: Có một mẫu x độ dài m đƣợc rút ra từ bảng chữ cái ∑, ϭ = │∑│,
một văn bản t độ dài n > m đƣợc rút ra ∑, và một ngƣỡng nguyên dƣơng k =
O(m/logϭm), thuật toán ACSMF cần thời gian trung bình O(n).
* Thuật toán ACSMF-Đơn giản:
Thuật toán ACSMF-đơn giản rất giống với thuật toán ACSMF. Chỉ có những khác biệt sau [12]:
- Thuật toán ACSMF-Đơn giản không thực hiện Bƣớc 4 của Thuật toán ACSMF;
- Với mỗi bộ dữ liệu < px', l, pt> є £, Bƣớc 5 của Thuật toán ACSMF đƣợc thực hiện mà không cần sử dụng các chỉ số tính toán trƣớc. Nói cách khác, sẽ tính ԑk
l và ԑk
r đƣợc thực hiện đơn giản bằng các so sánh kí tự và tính số lƣợng các lỗi đối sánh xảy ra. Sự mở rộng dừng lại ở bên phải trƣớc khi k + 1th không đối sánh.
Sự kiện 2: Số so sánh kí tự mong đợi yêu cầu cho mỗi mở rộng trong thuật
toán ACSMF-Đơn giản là ít hơn 3.
Ta có định lý sau: Cho một mẫu x độ dài m rút ra từ bảng chữ cái ∑, ϭ =
│∑│, một văn bản t có độ dài n > m rút ra từ ∑, và một ngưỡng nguyên dương k < m, thuật toán ACSMF-Đơn giản cần thời gian trung bình O((1 +
4 2 1 2 k m - km )n) và không gian O(m) để giải quyết Vấn đề 2.
Hệ luận 2: Cho một mẫu x có dài m rút ra từ bảng chữ cái ∑, ϭ = │∑│, một
văn bản t độ dài n > m rút ra từ ∑, và một ngƣỡng nguyên dƣơng k = O(m/logϭm),
thuật toán ACSMF-Đơn giản cần thời gian trung bình O(n).
Trong các trƣờng hợp thực tiễn, thuật toán ACSMF-Đơn giản đƣợc yêu thích hơn thuật toán ACSMF khi nó có ít yêu cầu bộ nhớ và nó tránh đƣợc việc xây dựng một loạt cấu trúc dữ liệu.
Thuật toán ACSMF-Đơn giản có thể dễ dàng mở rộng cho đối sánh xâu vòng tròn gần đúng khi biên tập mẫu khoảng cách [15]. Khi đó mỗi một phép toán biên tập
Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/
kí tự đơn có thể thay đổi phần lớn một trong 2k + 4 mảnh của x', bất kỳ thiết lập nào của phần lớn k các phép toán biên tập sẽ ở ít nhất một trong những mảnh còn nguyên. Nói cách khác, Bổ đề 2 thực hiện việc biên tập mẫu khoảng cách này rất tốt. Một vùng có độ dài O(m) xung quanh mỗi một xuất hiện tiềm năng đƣợc tìm thấy trong giai đoạn lọc (bƣớc 1đến bƣớc 3 của thuật toán ACSMF) sau đó tìm kiếm sử dụng thuật toán lập trình tự động tiêu chuẩn trong thời gian O(m2) và không gian O(m).
Khi đó số Occxuất hiện dự kiện của 2k + 4 mảnh là O(
4 2 1 2 k m - km ), tính phức tạp
thời gian trong trƣờng hợp trung bình sẽ là O((1 +
4 2 1 2 k m - km )n) và tính phức tạp
không gian vẫn là O(m). Khi k = O(m/logϭm), tính phức tạp thời gian trƣờng hợp
trung bình là O(n).
Các thuật toán ACSMF và ACSMF-Đơn giản để đối sánh xâu vòng tròn
gần đúng với k-lỗi đối sánh cần thời gian O(n) cho các giá trị trung bình của k, đó là
k = O(m/logϭ m).
2.5 Kết luận chƣơng
Trong chƣơng này tác giả thực hiện tìm hiểu và giới thiệu các thuật toán dành cho đối sánh chuỗi xấp xỉ. Với các thuật toán trên thể hiện việc tìm kiếm xấp xỉ đƣợc tiếp cận nhiều phƣơng pháp khác nhau. Thuật toán của Ukkonen sử dụng