Thuật toán đối sánh xâu vòng tròn gần đúng

Một phần của tài liệu Nghiên cứu phương pháp so sánh xâu xấp xỉ và ứng dụng (Trang 34 - 41)

CHƯƠNG 2: TÌM HIỂU MỘT SỐ THUẬT TOÁN

2.4 Thuật toán đối sánh xâu vòng tròn gần đúng

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, sao cho y = uxv. Để các xâu x, y, u 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 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 xuất hiện trong y, khi x là một yếu tố của y. Đương nhiên có thể nói x xuất hiện

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 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 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 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):

ԑ0r ← LCE(T, px' + l, 2m – 1 + pt + l) + 1

Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc-tnu.edu.vn/

ԑlr ← LCE(T, px' + l+ ԑ0r, 2m – 1 + pt +l + ԑ0r ) + 1

….

ԑk-1r ← LCE(T, px' + l + ԑk-2r, 2m – 1 + pt +l + ԑk-2r ) + 1 ԑkr ← LCE(T, px' + l + ԑk-1r, 2m – 1 + pt +l + ԑk-1r )

Nói cách khác, tính toán độ dài ԑkr 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 ԑkl 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-1l - l] ← 1 và M[px'+ l + ԑi-1l] ← 1

- Bước 7: Với mỗi ԑkl, ԑkr, 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 ԑkl + l + ԑkrm; đó 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í maxpt- ԑkl, pt+l- m,..., minpt+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 = maxpt- ԑ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 = GATACGATACCTAGGGTGATAGAATAG, k = 1. Sau đó có x' =

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 Tr = TCTGGGATCTGGGGATAAGATAGTGGGATCTATAGCATAG

Bước 4: Mở rộng sang trái có ԑkl= 6, khi đó Tr[4 .. 9] ≡ k Tr[25..30] và Tr[10]

Tr[31]; và mở rộng sang phải có ԑkr = 1, khi đó T[11] ≡ k T[30] và T[12] ≠ T[31]

Bước 5: Thiết lập M[px'- ԑi-1l - l] = M[9 – 6 – 2] = M[1] = 1 và M[px'+ l + ԑi-1l] = 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 đó ∑10i=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: maxpt- ԑkl, pt+l-m,..., minpt+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 = CTAGGGTx5 = 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 O(n) để giải quyết Vấn đề 2.

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 ԑkl và ԑkr đƣợ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ố Occ xuấ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 ACSMFACSMF-Đơ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).

Một phần của tài liệu Nghiên cứu phương pháp so sánh xâu xấp xỉ và ứng dụng (Trang 34 - 41)

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

(61 trang)