Bài tốn tìm xâu con chung dài nhất

Một phần của tài liệu (LUẬN văn THẠC sĩ) một số phương pháp thiết kế thuật toán cơ bản trong tính toán song song và ứng dụng (Trang 33)

Định nghĩa xâu.

Kí hiệu a,b,c,...là các kí tự trong bảng chữ cái . Một xâu được xác định như một dãy liên tiếp của các kí tự. Với một xâu s ta có một số quy ước về ký hiệu như sau:

- s là độ dài xâu s. Nếu s 0 thì s là xâu rỗng và được ký hiệu là .

- si là ký tự thứ i của xâu si1,...,s. Định nghĩa xâu con.

Cho ss1s2...sn,si  là một xâu có độ dài n trên bảng chữ cái . Một xâu

   sisi si si X k, ... 2

1 là một xâu con của s, nếu j,1 jk: 1ijn, và ijij1

Định nghĩa xâu con chung dài nhất

Cho S s1,s2,...,sd là một tập các xâu trên bảng chữ cái  với độ dài

d

n n

n1, 2,..., tương ứng. Xâu con chung dài nhất của tập S là một xâu X thỏa mãn:

(i) X là một xâu con của si, i1,2,...,d.

(ii) X có độ dài lớn nhất thỏa mãn (i). Ví dụ:

Cho 3 xâu s1"ATGCCAAT", s2 "AGGTGCT", s3"GCCTAC". Khi đó xâu con chung dài nhất của cả ba xâu là X"GCT".

Trong tin sinh học, tùy thuộc vào kiểu của dữ liệu, kích thước của bảng chữ cái

 thì độ dài của xâu ký tự rất đa dạng. Bảng 1 dưới đây thống kê về độ dài xâu ký tự của một số dữ liệu tin sinh học [12].

Bảng 2.1 Độ dài xâu ký tự của một số dữ liệu tin sinh học

Dữ liệu sinh học Bảng chữ cái  Độ dài xâu ký tự

Protein A,C,...,W, 20 ~ 102 – 104

ARN A,C,G,U ~ 102 – 104

Gen gen1,gen2,...,genk ~ 102 – 104

ADN A,C,G,T ~ 103 – 1012

Bảng 2.1 cho thấy độ dài của các xâu trong dữ liệu tin sinh học là rất lớn. Do đó việc tìm ra xâu con chung dài nhất giữa các xâu địi hỏi tính tốn rất phức tạp và tốn rất nhiều thời gian.

2.3. Thuật tốn quy hoạch động giải bài tốn tìm xâu con chung dài nhất. Giả sử ta có hai dãy X x1,x2,...,xm và Y y1,y2,...,yn.

Ta có Z z1,z2,...,zk là một xâu con chung bất kỳ của XY. Tiền tố thứ

icủa xâu X x1,x2,...,xm là một dãy con của X bao gồm từ phần tử ban đầu đến phần tử tứ thứ i của X nghĩa là Xi x1,x2,...,xi, i0,1,2,...,m. Khi đó ý tưởng giải bài tốn là tính xâu con chung dài nhất cho mọi khả năng các cặp của tiền tố hai dãy đã cho. Ký hiệu c , i j là độ dài của dãy con chung dài nhất XiYj. Khi đó đại lượng cm,n là xâu con chung dài nhất của toàn bộ hai chuỗi đã cho. Các bước tính

m n

c , như sau:

Bước cơ sở: c i,0 c0,j0, Nếu một trong những xâu đã cho là rỗng thì dãy con chung dài nhất cũng rỗng và có độ dài bằng 0.

Ký tự cuối cùng của tiền tố bằng nhau: Giả sử XiYj. Khi đó phần tử cuối cùng của xâu con chung dài nhất zkxiyjZk1 là một xâu con chung dài nhất của xâu Xm1 và Yn1. Thật vậy, nếu zkxi thì ta ghép thêm xiyj vào Z để có

được dãy con chung của XY có chiều dài k1, mâu thuẫn với giả thiết cho rằng Z là dãy con chung dài nhất của XY. Như vậy ta phải có zkxiyj. Vậy thì Zk1 là xâu con chung dài nhất của Xm1 và Yn1 có độ dài k1.

Như vậy, nếu xiyj thì c i, jci1,j11.

Ký tự cuối cùng của tiền tố không bằng nhau: Giả sử xiyj. Khi đó phần tử

i

k x

z  ( hoặc zkyj ) nghĩa là Z là xâu con chung dài nhất của Xi1 và Yj ( hoặc

Z là xâu con chung dài nhất của XiYj1). Thật vậy, nếu zkxi, thì Z là xâu con chung của Xi1 và Yj. Nếu có một xâu con chung của XiYj, điều này mâu thuẫn với giả thiết Z là xâu con chung dài nhất của XiYj.

Như vậy, xiyj không đồng thời nằm trong xâu con chung dài nhất, nghĩa là hoặc xi nằm trong xâu con chung dài nhất, hoặc yj nằm trong xâu con chung dài nhất (có khả năng cả hai đều không nằm trong xâu con chung dài nhất). Vậy nếu

j

i y

x  thì c i,j maxci1, j ,ci, j1.

Công thức truy hồi cho xâu con chung dài nhất được thiết lập như sau:

              y x khi 1 v , y x khi 0 v ( v 1 - j 1, - i c , 1 - j i, c , j 1, - i c i c j j c i i c j j j i ) max( 0 , 0 , 0 0 0 ,           (2.1) Thuật tốn tuần tự tìm xâu con chung dài nhất.

Dựa trên cơng thức truy hồi, thuật tốn tiếp nhận hai chuỗi hữu hạn, mỗi giá trị

 i j

c , sẽ được lưu vào mảng c1...m,1...n. Việc tính tốn sẽ được thực hiện theo các hàng của mảng và cột trước đó theo cơng thức trên. Việc truy xuất lại mảng phương án c1...m,1...n để tìm ra xâu con chung dài nhất sẽ đi từ điểm cm,n của ma trận phương án. Ta lập mảng thứ hai b1...m,1...n để ghi những giải pháp tối ưu. Thuật toán trả về mảngc,bcm,n chứa chiều dài xâu con chung dài nhất của X và Y.

Thuật tốn tìm xâu con chung dài nhất (lengthLCS)

Thuật tốn 2.1. Thuật tốn tuần tự tìm dãy con chung dài nhất

Ví dụ: Cho hai xâu : s1"AGGTGCT", s2 "GCCTAC". Tính giá trị c , i j sau đó lưu vào mảng c1...m,1...n A G G T G C T G 0 1 1 1 1 1 1 C 0 1 1 1 1 2 1 C 0 1 1 1 1 2 1 T 0 1 1 2 2 2 3 A 1 1 1 2 2 2 3 C 0 1 1 2 2 3 3

function lengthLCS(X[1..m], Y[1..n])

Đầu vào: Hai chuỗi X[1..m], Y[1..n])

Đầu ra: Dãy con chung lớn nhất giữa hai chuỗi V, W. 1. Khai báo c[1..m, 1..n] và b[1..m, 1..n]

2. m:= length (X); n= length (Y) 3. c(i=0 to m,0) = 0

4. c(0,j=0 to n) = 0 5. Loop i over length (X) 6. Loop j over length (Y)

7. c(i,j) = MAX [ c(i-1,j), c(i, j-1), c(i-1,j-1)+1 if X(i) = Y(j) ] 8. b(i,j) = UP if c(i,j) = c(i-1,j)

9. b(i,j) = LEFT if c(i,j) = c(i,j-1)

10. b(i,j) = DIAGONAL if c(i,j) = c(i-1,j-1) +1 11. Tìm giá trị lớn nhất trong hàng và cột cuối cùng của c 12. Return ( c và b)

Mảng b1...m,1...n ghi những giải pháp tối ưu: A G G T G C T G  0  1 1 1 1 1 1 C  0  1  1  1  1  2  1 C  0  1  1  1  1 2  1 T  0  1  1  2 2  2  3 A  1  1  1  2  2  2  3 C  1  1  1  2  2  3  3

Như vậy: thời gian thực hiện thuật toán là Omn. Nghiệm của thuật toán sẽ được tìm như sau:

Thuật tốn 2.2. Thuật tốn tuần tự in ra dãy con chung dài nhất function printLCS(b,X[1..m],i,j) function printLCS(b,X[1..m],i,j)

Đầu vào: Ma trận b, Mảng X[1..m] Đầu ra: Mảng LCS của X và Y Các bước:

1. If i = 0 or j = 0 return

2. if b(i,j) = DIAGONAL THEN 3. printLCS(b,X,i-1,j-1) 4. write X(i) 5. ELSE 6. IF b(i,j) = UP THEN 7. printLCS(b,X,i-1,j) 8. ELSE 9. printLCS(b,X,i,j-1)

2.4. Phương pháp phần tử trội trong bài toán xâu con chung dài nhất.

Thuật toán quy hoạch động giải quyết bài toán xâu con chung dài nhất khá hiệu quả với ma trận phương án có thể truy xuất lại xâu rất nhanh. Tuy nhiên khi dữ liệu lớn với số chuỗi tăng lên, phương pháp lưu trữ bằng ma trận như vậy sẽ không hiệu quả. Đặc biệt, khi độ dài chuỗi tăng dần, kích thước ma trận sẽ tăng đột biến và khi đạt đến một cỡ đủ lớn thì máy tính sẽ bị tràn bộ nhớ. Để giải quyết vấn đề này một cách hiệu quả, Hakata và Imai [8] đã đưa ra phương pháp phần tử trội để lưu trữ các phương án tìm xâu con chung dài nhất. Phương pháp này như sau:

Giả sử L là ma trận phương án với d chiều tương đương với d xâu ký tự

d

s ,..., s ,

s1 2 trên bảng chữ cái a1,a2,...,aN. pp1,p2,...,pdlà một điểm trên ma trận L với mỗi thành phần số nguyên pi là các vị trí tương ứng trên xâu si. Giá trị của vị trí p trong ma trận L được ký hiệu là L p . Tương tự như vậy, với một xâu

s, ký tự a ở vị trí thứ k trong xâu s được ký hiệu là as k . Định nghĩa điểm khớp

Một điểm pp1,p2,...,pd trong L được gọi là một điểm “khớp” nếu:

 p s  p ... sd pd

s1 1  2 2   . Điểm khớp p tương ứng với một ký tự a được ký hiệu là p a .[8]

Định nghĩa điểm trội

Một điểm pp1,p2,...,pd được gọi là trội hơn điểm qq1,q2,...,qd nếu

d i

q

pii, 1,2,..., . Nếu điểm p trội hơn điểm q thì ta ký hiệu là pq.

Tương tự như vậy, một điểm pp1,p2,...,pd được gọi là trội hơn hẳn điểm

q q qd

q  1, 2,..., nếu piqi,i1,2,...,d. Nếu điểm p trội hơn điểm q thì ta ký hiệu là pq.

Một điểm pp1,p2,...,pd không trội hơn điểm qq1,q2,...,qd nếu

d i

i  

,1 sao cho piqi. Nếu điểm p không trội hơn điểm q thì ta ký hiệu là

q p . [8]

Định nghĩa điểm k trội

Một điểm khớp p a được gọi là một điểm k trội (phần tử k trội) nếu: (i) L pk;

(ii) Khơng có một điểm khớp q a nào thỏa mãn (i) và qp. Ký hiệu k

D là tập tất cả các điểm k trội. Ký hiệu D là tập tất cả các điểm trội. [8]

Định nghĩa điểm cha

Một điểm khớp p a được gọi là điểm cha của điểm q, nếu qp và khơng có một điểm khớp r a nào thỏa mãn qrp. Ký hiệu Par ,q a là tập tất cả các điểm cha của điểm q, ParA,a là tập tất cả các điểm cha của tập các điểm A

A,

Par là tập tất cả các điểm cha (a ParA,a) của tập các điểm A. [8] Định nghĩa thành phần nhỏ nhất:

Một điểm p trong tập các điểm A được gọi là thành phần nhỏ nhất của A, nếu qA:q p. Nếu A 1, khi đó thành phần duy nhất chính là thành phần nhỏ nhất của A.

Bảng 2.2 Ví dụ về các điểm trội trong ma trận phương án.

H E A G A W G H E E A 0 0 1 1 1 1 1 1 1 1 W 0 0 1 1 1 2 2 2 2 2 H 1 1 1 1 1 2 2 3 3 3 E 1 2 2 2 2 2 2 3 4 4 A 1 2 3 3 3 3 3 3 4 4 E 1 2 3 3 3 3 3 3 4 5

Bảng 2 nêu ví dụ về các phần tử trội trong ma trận phương án của bài tốn tìm xâu con chung dài nhất của hai xâu s1 "HEAGAWGHEE" và s2 "AWHEAE". Các

điểm được khoanh tròn là các điểm trội. Các điểm được khoanh ô vuông là các điểm có vị trí khớp nhưng khơng phải là điểm trội.

Cho s1,s2,...,sdd xâu ký tự trên bảng chữ cái  và L là ma trận phương án. Khi đó chúng ta có nhận xét sau:

- Mỗi một vị trí trên xâu con chung dài nhất của d xâu ký tự trên là một vị trí khớp trên ma trận phương án L. Như vậy chúng ta chỉ cần tập trung vào tất cả các điểm khớp trên ma trận phương án L.

- Số lượng các mức của phần tử trội chính là độ dài của xâu con chung dài nhất của d xâu. Hơn nữa, tại mỗi mức k sẽ có ít nhất một k phần tử trội tương ứng với vị trí của ký tự thứ k trong xâu con chung dài nhất của d xâu.

- Các phần tử trội của L có thể được tính một cách thông qua tập các phần tử trội trước đó, tức là việc tính tốn k1

D sẽ trực tiếp dựa vào

k

D .

- Tập các k1 phần tử trội Dk1 chính là tập con của tập các điểm cha của tập Dk hay Dk1ParDk,.

- Phần tử nhỏ nhất trong tập các phần tử cha của tập các phần tử trội chính là các phần tử trội.

Qua các nhận xét trên, có thể thấy rằng các phần tử trội ở mức cao hơn luôn trội hơn hẳn một phần tử trội ở mức thấp hơn một bậc. Như vậy, để tìm các phần tử trội, chúng ta thực hiện như sau:

Xuất phát với k1, Dk . Dị tìm lần lượt trên các xâu ký tự, nếu gặp điểm khớp p đầu tiên thì đó chính là phần tử trội ở mức 1. Bổ sung p vào 1

D . Giả sử ta

đã có i

D D

D1, 2,..., là tập các phần tử trội nhỏ hơn hoặc bằng mức i (i1). Khi tìm thấy một điểm khớp q, chúng ta sẽ kiểm tra xem q trội hơn so với các phần tử k

q với các phần tử trong k1

D . Khi tìm được k là mức lớn nhất mà q trội hơn ít nhât một phần tử trong tập Dk, chúng ta sẽ kiểm tra xem q có trội hơn hẳn một phần tử trội nào trong tập Dk hay khơng. Nếu có thì q chính là phần tử trội của tập Dk1, ngược lại thì q khơng phải là phần tử trội.

Truy xuất tìm xâu con chung dài nhất khi biết phần tử trội

Khi có được tập tất cả các phần tử trội, chúng ta hồn tồn có thể xây dựng ma trận phương án như sau:

Giả sử s1,s2,...,sdd xâu ký tự trên bảng chữ cái  và L là ma trận phương án với tất cả các phần tử bằng 0. Xâu con chung dài nhất với độ dài là l.

Xuất phát từ tập tất cả các phần tử trội ở mức lớn nhất (mức l). Tại vị trí này ta đánh số l. Tất cả vị trí trội hơn các phần tử trội này cũng sẽ đều được đánh số l. Sau đó giảm xuống l1 và lại đánh số như trên. Cần lưu ý rằng các vị trí đã được đánh số khác 0 thì sẽ khơng được đánh số lại nữa. Cứ tiếp tục như vậy ta sẽ có ma trận phương án.

Bảng 2.3 mô tả việc dựng lại ma trận bảng phương án khi biết các phần tử trội. Bảng đang thể hiện việc xây dựng ma trận ở đối với các phần tử trội ở mức 3.

Bảng 2.3. Ví dụ về việc xây dựng lại ma trận phương án với các phần tử trội.

H E A G A W G H E E A 1 W 2 H 1 3 3 3 E 2 3 4 4 A 3 3 3 3 3 3 4 4 E 3 3 3 3 3 3 4 5

Thuật tốn tìm phần tử trội như sau:

Thuật tốn 2.3. Thuật tốn tìm phần tử trội

Ví dụ như trong bảng 2.3, xâu con chung dài nhất của hai xâu

" HEAGAWGHEE "

s1  và s2 "AWHEAE""AWHEE".

Mặt khác, khi biết được tập các phần tử trội, chúng ta có thể dễ dàng tìm trực tiếp ra xâu con chung dài nhất như sau:

Xuất phát từ một phần tử pl trong tập các phần tử trội Dl, tìm một phần tử

1

l

p trong tập l1

D sao cho plpl1, rồi lại tiếp tục áp dụng tương tự với các tập

1 2,..., D

Dl . Như vậy, tập các điểm p1,p2,...,pl chính là các điểm trên xâu gốc mà tại đó là các ký tự trên xâu con chung dài nhất. Nói cách khác, xâu con chung dài nhất chính là si   p1si p2 ....si pl với 1id.

Đánh giá về độ phức tạp tính tốn đối với bài tốn tìm xâu con chung dài nhất,

Một phần của tài liệu (LUẬN văn THẠC sĩ) một số phương pháp thiết kế thuật toán cơ bản trong tính toán song song và ứng dụng (Trang 33)

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

(61 trang)