Thuật toán Faster QuickSearch

Một phần của tài liệu (LUẬN văn THẠC sĩ) một họ thuật toán đối sánh mẫu chính xác nhanh SSABS TVSBS FQS và thực nghiệm (Trang 32)

CHƯƠNG 1 GIỚI THIỆU CHUNG VỀ THUẬT TOÁN SÁNH MẪU

2.4. Thuật toán Faster QuickSearch

2.4.1. Giới thiệu

Thuật toán Faster Quick Search (FQS) do Jie Lin và cộng sự công bố vào năm 2014 [3]. Thuật toán FQS là một thuật toán cải tiến dựa trên thuật toán đối sánh mẫu chính xác QS. FQS tính toán độ dài dịch chuyển dự kiến, cho phép các dịch chuyển tối đa và một số lượng so sánh nhỏ hơn giữa mẫu và văn bản. FQS cũng sử dụng bảng dịch chuyển xuất hiện của thuật toán QS trong giai đoạn tiền xử lý mẫu.

2.4.2. Thuật toán Giai đoạn tiền xử lý Giai đoạn tiền xử lý

Trong giai đoạn tiền xử lý, FQS cần xác định 3 yếu tố:

- Vị trí dịch chuyển tối đa dự kiến (pos) cho mẫu P bằng Biểu thức

pos=min(k│ESk=max(ESj), 0≤ j ≤ m- 1) (2.2) - Bảng dịch chuyển cho mẫu P sử dụng thuật toán QS.

- Bảng dịch chuyển cho P[0,…,pos – 1], tiền tố của P, sử dụng thuật toán QS. Vị trí dịch chuyển dự kiến tối đa pos sử dụng quy tắc dịch chuyển xuất hiện, pos được tính toán từ mẫu P trong giai đoạn tiền xử lý.

Tính toán trong mảng ES:

Trong tính toán đơn giản, ESj = Pc ( j – prepos( c)) cho ký tự c, c ϵ số phức hợp thời gian cho tính toán tất cả ESj, nơi đó 0 ≤ j ≤ m -1, là O(m││). ESj có thể được tính toán từ ESj-1 khi j > 0. Điều đó có nghĩa rằng, giá trị bước nhảy dự kiến ở vị trí hiện tại có thể được tính toán bằng cách sử dụng giá trị bước nhảy dự kiến đã biết ở vị trí trước. Sự khác nhau giữa ESjESj-1 là:

ESj– ESj – 1 = Σc(j – preposj(c)) – Σc( j – 1–preposj -1(c))

=Σc(j – preposj(c)) – ( j – 1–preposj -1(c))) (2.3)

= Σc(1 – (preposj(c) –preposj -1(c))) = Σc(1) – Σc(preposj(c) –preposj -1(c)))

Since Σc(1)= |Σ|, then ESj– ESj – 1= |Σ| - Σc(preposj(c) –preposj -1(c))

Với mỗi cc ≠ P[j], preposj – 1 = preposj (c)). Các ký hiệu trong mẫu P, ESj đều có preposj(c) = preposj-1(c) chỉ trừ một ký hiệu ở vị trí hiện tại là j. Nói cách khác, trừ ký hiệu hiện tại trong mẫu P, tất cả các ký hiệu khác trong Σ sẽ có preposj(c) = preposj-1(c). Sự khác nhau giữa ESjEsj - 1 được phân tích như sau: ESj– ESj – 1 = |Σ| - Σc(preposj(c) –preposj -1(c)) = |Σ| - preposj(P[j]) –preposj -1(P[j])) (2.3) = |Σ| - (j–preposj -1(P[j])) Ta có: ESj= ESj – 1 + |Σ| - (j–preposj -1(P[j])) (2.4)

Giai đoạn tiền xử lý của thuật toán

Sử dụng một hàng Prepos với độ dài |Σ|, để giữ vị trí trước đó cho mỗi ký tự c, tại đó c∑ . Theo phân tích ở trên, các tác giả có thể có ESj từ ESj = ESj-1 + |Σ| -

(j− preposj− 1(P[j])), tại đó m-1 ≥ j ≥ 1. Phép tính có thể được thực hiện trong thời gian liên tục cho mỗi vị trí được đưa ra j.

Từ tính toán về vị trí dịch chuyển tối đa dự kiến (pos), ta biết được độ phức tạp thời gian là Θ(m + |Σ|). Thời gian cần thiết dự kiến là Θ(pos + |Σ|) và độ phức tạp thời gian giai đoạn tiền xử lý tổng thể cho FQS là Θ(m + |Σ|) khi pos < m.

2.4.2.2. Giai đoạn tìm kiếm

Trong giai đoạn tìm kiếm, FQS bắt đầu so sánh vị trí trong mẫu P, có giá trị dịch chuyển tối đa dự kiến, chứ không phải vị trí ngoài cùng bên phải trong P như trong QS (và các biến thể BM khác).

Sau bước tiền xử lý, chiến lược tìm kiếm FQS như sau:

Bước 1: Kiểm tra các ký tự ở vị trí dịch chuyển tối đa dự kiến pos, đó là vị trí so sánh các biểu tượng P[pos] và T[j+pos];

Bước 2: Nếu có một lỗi đối sánh, dịch chuyển mẫu P dựa trên khoảng cách được xác định bằng next[T[j+pos]]. Đi tới bước 1 để tiếp tục kiểm tra vị trí pos;

Bước 3: Nếu không thì tiến hành so sánh P[0,…,m-1] với T[j,…,j+m-1] theo cách như trong thuật toán QS. Nếu tất cả đều đối sánh, một mẫu đối sánh sẽ được tìm thấy tại vị trí j trong T;

Bước 4: Dù tất cả đều đối sánh hay không, dịch chuyển mẫu sang bên phải dựa trên giá trị của shift[T[j+m]] bằng việc sử dụng thuật toán QS cổ điển.

Bước 5: Lặp lại các bước từ 1-4 ở trên trong vòng lặp cho tới khi văn bản T

bị trống (j>n-m).

2.4.2.3. Phân tích thuật toán

Tính chính xác của thuật toán FQS : Kế thừa chủ yếu từ tính chính xác của thuật toán QS. Trong giai đoạn tìm kiếm, FQS sử dụng 2 hàng dịch chuyển ký tự xuất hiện trong 2 bước, khi so sánh mẫu P với văn bản T, FQS trước tiên kiểm tra vị trí pos trong P, vị trí dịch chuyển tối đa dự kiến so sánh nó với vị trí j + pos trong T. Nếu có một lỗi đối sánh, nó sử dụng hàng dịch chuyển next, để dịch chuyển mẫu tới vị trí bên phải kế tiếp. Giá trị dịch chuyển ở hầu hết pos + 1. Nó sẽ không bỏ qua bất kỳ vị trí đối sánh quan trọng nào. Sau mỗi so sánh biểu tượng đầu tiên (P[pos] vàT[j + pos]), các bước còn lại được thực hiện tương tự như trong thuật toán QS.

Độ phức tạp của thuật toán : Trong giai đoạn tìm kiếm, thuật toán FQS tích hợp một bước tiền xử lý với thuật toán QS. Độ phức tạp thời gian của bước này vẫn liên tục và tổng phức tạp thời gian là O(n). Độ phức tạp thời gian trong trường hợp xấu nhất đối với giai đoạn tìm kiếm trong FQS là O(mn) và độ phức tạp thời gian trung bình là O(n). Không gian mở rộng được yêu cầu bởi FQS là trong

nhất và trung bình tương tự như QS. Cũng như với thuật toán BM thông thường, độ phức tạp trong trường hợp xấu nhất có thể được cải thiện O(n + m + |Σ|) bằng sử dụng phương pháp thử nghiệm dịch chuyển khớp đã ghi nhớ.

2.4.2.4. Thực hiện

Thuật toán 1: Giai đoạn tiền xử lý (Có giá trị dịch chuyển dự kiến tối đa) GETPOS(P, m, |Σ|)

1 ES 0, maxES 0, pos ← 0 2 for (i ← 0 to |Σ| − 1) do

3 PrePos[i] ← −1 /*initializing all of prepos*/ 4 end for 5 for (j ← 0 to m − 1) do 6 ES ES + |Σ| − (j − PrePos[P[j]]); 7 PrePos[P[j]] ← j; 8 if ES maxES then 9 maxES ES; 10 pos ← j; 11 end if 12 end for 13 return pos

Thuật toán 1 cho thấy các bước chi tiết của giai đoạn tiền xử lý để tính toán vị trí dịch chuyển tối đa (pos) cho mẫu P[0,…, m-1] sử dụng Biểu thức (2.1). Trong đó, biến ES là giá trị dịch chuyển dự kiến, được khởi tạo bằng 0. Trong bước đầu tiên của vòng lặp trong Dòng 5-12, ES0 sẽ được thiết lập bằng |Σ| − 1. Biến maxES là giá trị dịch chuyển tối đa dự kiến. Đồng thời, pos, một vị trí trong mẫu P, là vị trí ở nơi mà giá trị dịch chuyển tối đa dự kiến nằm ở trong mẫu P.

Thuật toán 2: Giai đoạn tìm kiếm (Thuật toán FQS(P, m, T, n, |Σ|) 1 pos GetPos (P,m,|Σ|)

2 next preQS(P,pos)

3 shift preQS(P,m) 4 j ← 0

5 while (j ≤ n − m)

6 while (P[pos] = T[j+pos])

7 j ← j + next[T[j + pos]] 8 ifj > n − m then do

9 return

11 end while

12 Compare P[0, ..., m − 1] and T[j, ..., j + m − 1] 13 if all matched then do

14 output j

15 end if

16 j ← j + shift[T[j + m]] 17 end while

Dòng 1 gọi Thuật toán 1 để có được vị trí pos với giá trị dịch chuyển dự kiến tối đa. Các Dòng 2 và 3 tính toán 2 bảng dịch chuyển (gọi là next và shift) cho tiền tố P[0,…,pos-1] và toàn bộ mẫu P, trong giai đoạn tiền xử lý FQS còn thêm vào 2 dòng: Dòng 1 và Dòng 2. Tổng phức hợp thời gian của 3 bước vẫn là O(m + |Σ|).

FQS quyết định vị trí dịch chuyển dự kiến tối đa. Vị trí này có một khoảng cách dịch chuyển thống kê tối đa. Một khi có lỗi đối sánh được tìm thấy, thuật toán nhảy đến vị trí mới, có khoảng cách dịch chuyển dự kiến tối đa. Cơ chế này tăng tốc đáng kể cho thuật toán FQS.

Dòng 2-4 khởi tạo giá trị của mỗi biểu tượng bằng “-1” cho hàng vị trí mới xuất hiện PrePos bằng biểu thức:

ESj = c (j - preposj (c)), 0 j m-1, c (2.5)

Còn các Dòng từ 5-12 là vòng lặp for tính toán giá trị dịch chuyển dự kiến của mỗi vị trí là ES và quyết định giá trị dịch chuyển tối đa dự kiến. Dòng 6 tính toán giá trị dịch chuyển dự kiến ES bằng việc sử dụng phương pháp tịnh tiến, như đã được thảo luận ở trên (Biểu thức (2.3)).

Trong Thuật toán 2, các dòng từ 5-17 bắt vào giai đoạn tìm kiếm. So với thuật toán QS, FQS thêm các Dòng từ 6-11 trong giai đoạn tìm kiếm. Trong giai đoạn này, ban đầu, văn bản T được sắp xếp với mẫu P, ở các vị trí T[j] và P[0], tại đó 0 ≤ j ≤ n – m. FQS trước tiên sẽ bắt đầu so sánh vị trí giá trị dịch chuyển dự kiến tối đa, pos trong P, với vị trí tương ứng j + pos trong T. Nếu lỗi đối sánh xảy ra, mẫu được dịch chuyển tới 1 vị trí được xác định bằng giá trị next[T[j + pos]]. Các bước này được thực hiện trong các Dòng 6-11. Nếu không thì, thuật toán FQS làm việc tương tự như thuật toán QS bằng việc bắt đầu so sánh mẫu P[0,…,m-1] và

T[j,…,j + m-1] từ phải sang trái.

Các dòng từ 9-12 tìm kiếm giá trị dịch chuyển tối đa dự kiến maxES. Cuối cùng thuật toán trở về vị trí dịch chuyển tối đa dự kiến pos, trong Dòng 13. Quy trình tiền xử lý này chỉ thực hiện một lần cho mẫu P với thời gian O(m + |Σ|).

2.4.3. Ví dụ

Cho văn bản T = “GCATCGCAGTCAG TATACAGTAC” (n = 23) và mẫu P = “GCAGTCAG” (m = 8). Văn bản và mẫu là các trình tự DNA từ bảng chữ Σ = {A, C, G, T}, do vậy |Σ| = 4.

Tính toán vị trí dịch chuyển dự kiến tối đa (pos) cho mẫu P

Để tính toán giá trị dịch chuyển dự kiến tối đa của mẫu P = “GCAGTCAG”, trong Dòng 3 của Thuật toán 3, vị trí xuất hiện tại hàng PrePos trong Thuật toán 3 cho 4 biểu tượng này được khởi tạo bằng “1”. Sau đó, Thuật toán 3 tính toán pos

cho mẫu P, bằng cách quét từ trái sang phải.

Khi ký tự đầu tiên P[0] = G được đọc (j = 0), PrePos[G] có giá trị khởi tạo “- 1”. Dòng 6 thiết lập ES = 0 + 4 -(0 -(-1)1) = 3. ES = 3 là khoảng cách dịch chuyển dự kiến cho Vị trí 0 trong mẫu P. Trong Dòng 7, PrePos[G] được thiết lập tới vị trí hiện tại 0; điều này chỉ ra rằng ký tự G xuất hiện ít nhất 1 lần tại thời điểm này. Trong các Dòng 8-10, khoảng cách dịch chuyển tối đa dự kiến đã thiết lập bằng

maxES = 3.

Khi ký tự thứ hai P[1] = C được đọc (j = 1), Dòng 6 thiết lập ES = 3 + 4-(1- (-1)) = 5. Trong Dòng 7, PrePos[C] được thiết lập vị trí hiện tại của nó là 1. Trong Dòng 9, khoảng cách dịch chuyển tối đa dự kiến được thiết lập là 5.

Khi ký tự thứ ba P[2] = A được đọc (j = 2), Dòng 6 sẽ thiết lập ES = 5 + 4 - (2 -(-1)) = 6. Trong Dòng 7, PrePos[A] được thiết lập vị trí hiện tại là 2. Trong Dòng 9, khoảng cách dịch chuyển tối đa dự kiến được thiết lập là 6.

Khi ký tự thứ tư P[3] = G được đọc (j = 3), giá trị PrePos[G] được thay đổi tới vị trí xuất hiện trước đó; trong trường hợp này, PrePos[G] = 0. Dòng 6 sẽ thiết lập ES = 6 + 4 -(3 -(0)) = 7. Trong Dòng 7, PrePos[G] được thiết lập vị trí hiện tại là 3. Trong Dòng 9, khoảng cách dịch chuyển tối đa dự kiến được thiết lập là 7.

Bảng 2.2. Các hàng ES, next và shift cho một mẫu ví dụ j 0 1 2 3 4 5 6 7 P[j] G C A G T C A G ESj 3 5 6 7 6 6 6 6 Σ A C G T Next 1 2 3 4 Σ A C G T Shift 2 3 1 4

Các ký tự còn lại trong mẫu P được xử lý theo cùng một cách giống nhau. Các khoảng cách dịch chuyển dự kiến cuối cùng cho mỗi vị trí trong mẫu P[0,…,m- 1] là 3, 5, 6, 7, 6, 6, 6, 6. Vị trí dịch chuyển dự kiến tối đa trong P[3] = G, có giá trị bằng 7. Do đó, các tác giả có khoảng cách dịch chuyển tối đa dự kiến trong Vị trí 3 của mẫu P, đó là, pos = 3 (xem Bảng 2.2).

Tính toán các Bảng dịch chuyển: next shift

Các tác giả tính toán bảng dịch chuyển cho mẫu tiền tố P[0,…,pos – 1] =

P[0,…,2] = “GCA”, được biểu thị là next với giá trị của next (A, C, G, T) = [1, 2, 3, 4]. Đồng thời, bảng dịch chuyển cho mẫu P[0,…,m-1] = P[0…7] được biểu thị bằng hàng shift, trong đó shift(A,C, G, T) = [2,3,1,4]. Cả hàng next shift đều được tính toán bằng thuật toán QS cổ điển;

Tìm kiếm mẫu P trong T

Sau các bước tiền xử lý, giai đoạn tìm kiếm bắt đầu:

Thử nghiệm thứ nhất: Thử nghiệm đầu tiên này so sánh mẫu P với văn bản T từ khởi đầu.

x Next[A,C,G,T] = {1,2,3,4}

G C A T C G C A G T C A G T A T A C A G T A C G C A G T C A G

Do vị trí dịch chuyển tối đa dự kiến bằng 3 (pos = 3), cho nên so sánh bắt đầu ở P[3] =G đối với vị trí tương ứng trong văn bản T[j + pos] = T[0 + 3] = T[3]. Đó sẽ là biểu tượng ‘T’, do vậy dẫn đến một lỗi đối sánh. Thuật toán dịch chuyển

mẫu P tới vị trí kế tiếp với khoảng cách dịch chuyển được xác định bằng next

[T[3]] = next[T] = 4. Đồng thời giá trị j được cập nhật là j = j + next[T[3]] = 4.

Thử nghiệm thứ hai: Thuật toán vẫn bắt đầu so sánh P[3] = G với vị trí tương ứng trong văn bản T[j +pos] = T[4+3] = T[7] = A. Nhưng vẫn diễn ra một lỗi đối sánh. Khoảng cách dịch chuyển là next[T[7]] = next[A] = 1.

Giá trị của j được cập nhật là j = j + next[T[7]] = 4 + 1 = 5.

x Next[A,C,G,T] = {1,2,3,4}

G C A T C G C A G T C A G T A T A C A G T A C G C A G T C A G

Thử nghiệm thứ ba: Thuật toán so sánh P[3] = G với văn bản T[j + pos] = T[5 + 3] =

T[8] = G các ký tự đối sánh. Tiếp theo Thuật toán tiến hành như thuật toán QS cổ điển. Sau mỗi lần so sánh, thuật tìm thấy một đối sánh chính xác. Nó cho biết vị trí xảy ra và xác định khoảng cách dịch chuyển là j. Khoảng cách dịch chuyển này được xác định bằng thuật toán QS cổ điển.

j = j + shift[T[j + m]] = 5 + shift[T[5 + 8]] = 5 + shift[T[13]] = 5 + shift[T]=5 + 4= 9 x shift[A,C,G,T] = {2,3,1,4}

G C A T C G C A G T C A G T A T A C A G T A C G C A G T C A G

Thử nghiệm thứ bốn: Thuật toán FQS so sánh P[3] = G văn bản T[j + pos] = T[9 + 3] = G. Khi các biểu tượng đối sánh, thuật toán theo các bước của thuật toán QS cổ điển bằng việc so sánh từ phải sang trái. Ký tự ngoài cùng bên phải của mẫu là G không đối sánh với biểu tượng tương ứng là A trong T. Thuật toán xác định khoảng cách dịch chuyển kế tiếp shift[T[j + m]] = shift[T[9 + 8]] = shift[C] = 3, và giá trị của j được cập nhật là j = j + shift[T[j + m]] = 9 + shift[T[9 + 8]] = 9 + shift[T[17]] = 9 + shift[C] = 9 + 3 = 12.

shift[A,C,G,T] = {2,3,1,4} x 

G C A T C G C A G T C A G T A T A C A G T A C G C A G T C A G

Thuật toán so sánh P[3] = G với vị trí tương ứng trong văn bản T[j + pos] =

T[12 + 3] = T[15] = T. Xảy ra lỗi đối sánh. Khoảng cách dịch chuyển được xác định bằng giá trị dịch chuyền FQS next[T[15]] = 4, và giá trị của j được cập nhật là j = j + next[T[15]] = 12 + 4 = 16. Đối với n = 23; m = 8, khi j = 16 > n -m = 15, văn bản

T bị rỗng. Giai đoạn tìm kiếm dừng lại.

next[A,C,G,T] ={1,2,3,4} x G C A T C G C A G T C A G T A T A C A G T A C G C A G T C A G Vậy số lần thử nghiệm là: 5 Tổng số ký tự được so sánh là: 13. 2.5. Kết luận chương 2

Chương 2 trình bày một họ thuật toán sánh mẫu chính xác nhanh SSABS (Sheik- Sumit- Anindya- Balakrishnan-Seka) - TVSBS (Thathoo- Virmani- Sai- Balakrishnan- Sekar) – FQS (faster quick search). Đây là một nhóm thuật toán biến thể của thuật toán Quick Search được kiểm định là có lợi thế khi mẫu ngắn với bảng chữ nhỏ hoặc mẫu dài với bảng chữ lớn với đại diện là thuật toán TVSBS.

CHƯƠNG 3: CHƯƠNG TRÌNH THỰC NGHIỆM HỌ THUẬT TOÁN ĐỐI SÁNH MẪU CHÍNH XÁC NHANH VỚI BỘ CÔNG CỤ SMART 3.1. Giới thiệu

Bài toán đặt ra trong chương trình thực nghiệm là bài toán sánh mẫu ngoại tuyến (offline pattern matching) trong đó cả mẫu P và văn bản T đã có sẵn. Một trường hợp đặc biệt chính là cả mẫu P và văn bản T đã có trong bộ nhớ. Trong sánh mẫu ngoại tuyến, việc tiền xử lý dữ liệu đối với P và T có thể được tiến hành từ trước để tạo điều kiện tạo nên các cơ chế phù hợp (bao gồm các cấu trúc dữ liệu bổ sung thích hợp) để tăng tốc độ quá trình sánh mẫu. Thông tin cơ bản như độ dài của P và T được coi như một thông tin tiên liệu về quá trình sánh mẫu. Luận văn lựa chọn bộ công cụ SMART để tiến hành thực nghiệm hai thuật toán sánh mẫu SSABS và TVSBS. Để thuận tiện cho việc thực hiện bài toán sánh mẫu ngoại tuyến, chương trình đăng nhập qua bộ trung gian PUTTY.

3.2. Bộ công cụ Smart

SMART (String Matching Algorithms Research Tool: công cụ nghiên cứu các thuật thoán sánh xâu) do Thierry Lecroq [10] và Simone Faro [10] xây dựng nhằm cung cấp một khung chuẩn cho các nhà nghiên cứu về sánh xâu. Bộ công cụ giúp người sử dụng kiểm tra, thiết kế, đánh giá và hiểu biết các giải pháp hiện có đối với bài toán sánh xâu. Hơn nữa, nó cung cấp một bộ công cụ cho việc triển khai

Một phần của tài liệu (LUẬN văn THẠC sĩ) một họ thuật toán đối sánh mẫu chính xác nhanh SSABS TVSBS FQS và thực nghiệm (Trang 32)

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

(74 trang)