Phương pháp phần tử trội trong bài toán 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 38 - 43)

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, Hakata và Imai [8] đã đưa ra đánh giá như sau: Bài tốn tìm xâu con chung dài nhất với số chuỗi d 3 với độ dài n được tính tốn trong khoảng thời gian là

function findDominant(b,X[1..m],i,j) Đầu vào: các xâu S1,S2,...,Sd

Đầu ra: tập các phần tử trội D

Các bước: 1. D0 0,0,...,0 ; k 0; 2. While k D con khác trống 3. A; 4. for pDk 5. Parp, = cha (p); 6. AAParp,; 7. k1 D = phần tử nhỏ nhất của A 8. k; 9. endWhile

        dDN d nN nN

O logd 3 logd 2 , với D là số tất cả các phần tử trội, N là số chữ cái trong bảng chữ cái  (N  .) Ước lượng này dựa trên việc tính tốn các phần tử cực tiểu của một tập mất thời gian t1Odmlogd 2m để tính tốn các phần tử cức tiểu của m trong d chiều. Tuy nhiên ước lượng này là quá rộng, Korkin và các cộng sự [7] đã đưa ra một ước lượng tốt hơn cho bài toán này, vào cỡ

                k k D n d N

O 2 , với Dk là tập tất cả các phần tử k trội, do số lượng các phần

tử trội là ít hơn rất nhiều so với số điểm của ma trận phương án.

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 38 - 43)

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

(61 trang)