Giải thuật tính toán dựa theo kỹ thuật chia để trị

Một phần của tài liệu Các kỹ thuật toán học cho bài toán so sánh đa trình tự (Trang 54 - 60)

4- NGÀY HOÀN THÀNH NHI ỆM VỤ :

4.1.1.Giải thuật tính toán dựa theo kỹ thuật chia để trị

Trong chương 2 chúng ta đã đề cập đến phương pháp cải tiến giải thuật Gotoh cho phép tính toán S(m,n) với độ phức tạp Ο(nm) và không gian nhớ sử dụng là

( )

Ο m n+ . Trong phần này chúng ta sẽ phát triển giải thuật cho phép tìm ra kết quả alignment dựa trên giải thuật Gotoh đã cải tiến.

Thuật giải để tìm kiếm phép alignment được xây dựng dựa trên ý tưởng của Hirschberg khi giải quyết bài toán tìm chuỗi con lớn nhất của 2 chuỗi. Hirschberg (1975)[15] đã giới thiệu một kỹ thuật chia để trị nhằm giải quyết bài toán tìm chuỗi con dài nhất của 2 chuỗi với độ phức tạp Ο(nm) và cần Ο +(n lg )m không gian nhớ. Nội dung chính của giải thuật được xây dựng trong phần này sẽ là tìm kiếm điểm giữa (midpoint) của một alignment tối ưu, sau đó xem điểm vừa tìm được là điểm biên sử dụng kỹ thuật đệ quy để tiếp tục tìm phép alignment tối ưu của phần trước và sau của nó. Ý tưởng này được minh họa như hình dưới đây.

Hình 4.1 Mô hình quá trình thực hiện giải thuật PSA

Xét 2 chuỗi A, B có chiều dài m, n(1≤m,1≤n) A(a1a2…am ),B(b1b2…bn). Ta đưa ra một số qui ước sau:

i*

j*

Ailà chuỗi con của A bắt đầu từ phần tử đầu tiên đến phần tử thứ i, Ai(a1 a2…ai).

T i

A : là phần sau của chuỗi A từ vị trí thứ i+1. AiT (ai+1…am) rev(A)m: chuỗi ngược của chuỗi A( amam-1…a1).

rev(A)m-i: chuỗi ngược của chuỗi ai+1ai+2…am.

Chúng ta gọi PSA là tối ưu nếu giá trị hàm đánh giá của nó là lớn nhất.

Giải thuật sẽ tìm kiếm điểm M*(i*,j*) (i j*, * [0, ]∈ n ) trên ma trận sao cho M* nằm trên con đường sinh ra PSA tối ưu(đồng nghĩa với M* chia ma trận thành 2 vùng mà cách chia của nó là tối ưu), với M* ta có thể thực hiện quá trình chia nhỏ phục vụ cho quá trình gọi đệ quy. M* có thể thuộc 1 trong 2 hình thức:

ƒ M* là điểm kết thúc của một alignment của Ai* với Bj* và là điểm bắt đầu của 1 alignment của T

i

A*với *

T j

B (1).

ƒ M* là điểm kết thúc của một alignment của Ai* với Bj* kết thúc bằng gap, và là điểm bắt đầu của 1 alignment của T

i

A*với BTj*, bắt đầu với 1 gap (2).

Định lý 4.1 Gọi SP là giá trị của phép alignment bất kỳ của AB. M(i,j) (i j, ∈[0, ]n )là một điểm nằm trên con đường sinh ra alignment này. Khi đó, SP bằng tổng giá trị alignment tối ưu của Ai với Bj và giá trị alignment tối ưu của AiT với T

j B : ( , ) ( T, T) i j i j SP=score A B +score A B (3) Chứng minh: Thật vậy ta có = ( , )= ( T , T ) i i j j SP score A B score A A B B (1’)

Do M(i,j) thuộc con đường sinh ra phép alignment tối ưu nên ta có thể tách thành 2 bài toán con hay ( T , T )= ( , )+ ( T, T)

i i j j i j i j

score A A B B score A B score A B (2’) Từ (1’), (2’) ta có điều phải chứng minh

Để tìm M*, phương pháp được sử dụng là cố định i* và tìm j*.

Ta chọn i* = [m/2]. Chúng ta sẽ tìm j* [0, ]∈ n thỏa mãn yêu cầu đặt ra. Xét 1 giá trị j bất kỳ j∈[0, ]n .

Gọi SS(j) là giá trị của phép alignment tối ưu của Ai* Bj , DD(j) là giá trị của phép alignmenttối ưu củaAi* với Bj mà kết thúc bằng một gap.

Gọi RR(j) là giá trị của phép alignment tối ưu của rev(A)m-i* với rev(B)j, và CC(j) là giá trị của phép alignment tối ưu của rev(A)m-i* với rev(B)j kết thúc bằng một gap. (adsbygoogle = window.adsbygoogle || []).push({});

SS, DD, RR, CC là các vector gồm n phần tử.

Định lý 4.2 Giá trị j* cần tìm sẽ thỏa đẳng thức sau:

j*=max j∈[0,n] {max (SS( j) + RR(n j) , DD( j) + CC(n j) + q) } Chứng minh:

Thật vậy: Do rev(rev(A)m-i* )= T* i

A và rev(rev(B)n-j )= BTj nên ta có:

RR(n-j) là giá trị của alignment tối ưu của T* i

A với BTj

CC(n-j) là giá trị của alignment tối ưu của T* i

A với BTj bắt đầu với một gap

Như vậy theo định l ý 4.1, ứng với mỗi giá trị j, giá trị của toàn bộ alignment ứng với kiểu (1): SP=SS(j) +RR(n-j). Giá trị của toàn bộ alignment ứng với kiểu (2) là

SP=DD(j)+CC(n-j)+q.

Do đó việc tìm giá trị tối ưu của việc chuyển đổi từ A sang B sẽ là việc tìm j* sao cho giá trị max (SS( j*) + RR(n j*) , DD( j*) + CC(n j*) + q) là lớn nhất:

j*=max j∈[0,n] {max (SS( j) + RR(n j) , DD( j) + CC(n j) + q) }

M*(i*, j*) chính là cặp điểm giữa tối ưu cần tìm, định lýđược chứng minh. Để ý rằng SS, DD có thể tính được bằng cách áp dụng giải thuật Gotoh cải tiến(xem 3.2.3) cho Ai* và B; RR, CC có thể tính được bằng cách áp dụng giải thuật Gotoh cải tiến cho rev(A)m-i* với rev(B). Như vậy quá trình tìm M*(i*, j*) được chia làm 2 phần:

ƒ Tìm SS(j), DD(j) bằng cách áp dụng giải thuật Gotoh cải tiến cho Ai*

với B.(hướng tới).

ƒ Tìm RR, CC bằng cách áp dụng giải thuật Gotoh cải tiến cho rev(A)m-i* với rev(B)(hướng lui).

Giá trị tối ưu của phép alignment có thể tìm được bằng cách gọi đệ qui để tìm giá trị tối ưu của Ai* với Bj*, đệ qui để tính giá trị tối ưu của T

i

A*với BTj*và kết nối 2 phần

này lại. Bài toán sẽ chia thành các bài toán con nhỏ hơn(chia để trị) như hình trên(đường nối các điểm giữa trên hình biểu diễn toàn bộ con đường tính giá trị tối ưu).

Điều kiện dừng của giải thuật đệ quy là khi i* nhỏ hơn 1 giá trị iM. Khi đó chúng ta sẽ thực hiện giải thuật quy hoạch động với ma trận M gồm iM dòng và jM cột(jM là giá trị tương ứng của j khi i*=iM). Áp dụng kỹ thuật lưu vết trong quy hoạch động kết

hợp với việc sử dụng một cấu trúc dữ liệu lưu trữ kết quả alignment từ các ma trận M, ta sẽ dễ dàng tìm được kết quả alignment của 2 chuỗi A, B.

Giải thuật

shared vectors SS[0..m] , DD[0..m] , RR[0..n] , CC[0..n]

procedure DIFF(A, B, m, n) { diff(A, B, m, n) }

recursive procedure diff(A, B, m, n){

if (n<=iM) {

Áp dụng kỹ thuật quy hoạch động cho A,B.

Tìm vết của giải thuật quy hoạch động. Lưu trữ kết quả. } (adsbygoogle = window.adsbygoogle || []).push({});

else{

i*← [m/ 2]

Tính SS DD theo hướng tới: Linear(Ai*,B,SS,DD).

Tính RR CC theo hướng lui: Linear(rev(A)m-i*,rev(B),RR,CC).

Tìm j*∈[0, n] maximize giá trị max(SS( j) + RR(n− j) , DD( j) + CC(n− j) + q) Gọi đệ quy:

diff(Ai* , Bj* , i*, j*)

diff(AiT* , BTj* , m− i*, n j*) }

}

Ví dụ: Xét 2 chuỗi “AGTAC” và “AAG”, m = 5, n = 3, i* = 2, hàm tính gap:

( )k q r k 2 0.5k

γ = − + ∗ = − − , σ(a,b)= -1 nếu ab, σ(a,a) = 0. Ta sẽ có:

SS: -3.0 -2.5 -1.0 -2.5 DD: -3.0 -2.5 -5.0 -5.5

RR: -3.5 -4.0 -3.5 -2.0 CC: -3.5 -4.0 -3.5 -6.0

Có 8 khả năng cho 2 loại midpoint theo giá trị của j∈[0, n].

j = 0j = 1j = 2j = 3

Kiểu midpoint 1: -5.0 -6.0 -5.0 -6.0

Kiểu midpoint 2:-7.0 -4.0 -7.0 -7.0

Giá trị được chọn là ứng với kiểu 2: j* = 1. Điểm (i*,j*)=(2,1) là điểm kết hợp của giá trị tối ưu của Ai* = “AG” với B1 =”A”, kết thúc bằng 1 gap(I) và giá trị tối ưu của T

i

A*= “TAC” BTj* = “AG”, bắt đầu bằng 1 gap(II).

Kết hợp giá trị của 2 phần (I) và (II) : DD( j) + CC(n− j) + q =DD(1) + CC(2) +2 = (-2.5)+(-3.5)+2= -4.

Bài toán lúc này trở thành tối ưu hóa việc chuyển đổi từ A1= “AG” sang B1=”A”, và tối ưu hóa việc chuyển đổi từ A2T = “TAC” sang B1T = “AG”. Tiếp tục thực hiện giải thuật cho 2 bài toán con này.

Giả sử điều kiện dừng của giải thuật là iM =2. Với lời giải cho A1 và B1 , m= 2, n=1, khi đó áp dụng giải thuật quy hoạch động dễ có :A1, B1

Với bài toán chuyển từ “TAC” sang “AG” thuật giải sẽ tiếp tục chia bài toán thành 2 bài toán con ta tính được i*=2, j*=1 khi đó ta sẽ có 2 kết quả

Kết hợp các kết quả ta được phép alignment tối ưu của A, B:

Chúng ta quan tâm đến độ phức tạp về thời gian và về không gian nhớ khi thực hiện giải thuật.

Giải thuật cần Ο(n) không gian nhớ cho việc lưu trữ các vector SS, DD, RR, CC

và Ο (lgm) cho [lg m]+1 lần gọi đệ quy.

Mỗi khi gặp điều kiện dừng giải thuật cần:

ƒ Ο( *iM jM) không gian nhớ cho việc cấp phát ma trận để thực hiện giải thuật quy hoạch động, ta có Ο(iM * jM)≤ Ο(iM * )m = Ο( )m . ƒ Ο(iM + jM) không gian nhớ để lưu trữ kết quả, ta có (adsbygoogle = window.adsbygoogle || []).push({});

( ) ( ) ( )

Ο iM + jM ≤ Ο iM +m = Ο m

Như vậy giải thuật sử dụng Ο( )n + Ο( )m + Ο( )m + Ο(lg )m = Ο + +(n m lg )m không gian nhớ.

Xét độ phức tạp về thời gian : Cần tối đaC = Ο(i nM ) thao tác cho các trường hợp đặc biệt và (1+1/2+1/4+…)Ο(mn) ≤2Ο(mn) thao tác cho các lần gọi đệ qui, suy ra độ phức tạp về thời gian Ο(i nM )+2Ο(mn). T A − Α C G A G A − A G T A C A − − Α G

Như đã đề cập ở phần trên, khi ma trận đánh giá được lựa chọn không phù hợp, dẫn đến việc sử dụng 1 ma trận đánh giá sẽ làm hạn chế kết quả của phép alignment.

Giải thuật được thiết kế sử dụng cùng lúc 3 ma trận BLOSUM: BLOSUM45, BLOSUM62 và BLOSUM100 phục vụ cho việc tính toán. Việc tính toán S(m, n) (theo giải thuật cải tiến không gian nhớ) được tính toán song song cho cả 3 ma trận BLOSUM. Gọi giá trị tính toán S(m,n) tương ứng với 3 ma trận BLOSUM lần lượt là SP45, SP62 và SP100. Gọi 3 ma trận tính toán tương ứng với 3 ma trận BLOSUM lần lượt là S45, S62 và S100.

Chúng ta sẽ chọn ma trận BLOSUM cho giá trị hàm đánh giá S(m,n) lớn nhất.

45 62 100 45 62 100 { { , , } | ( , ) max( , , )} S = ∈s S S S s m n = SP SP SP 45 62 100 ( , ) max{ ( , ), ( , ), ( , )} S m n = S m n S m n S m n

Giải thuật quy hoạch động thiết kế ở trên sẽ sử dụng ma trận BLOSUM được chọn cho suốt quá trình tính toán.

Hình 4.2 Quá trình xây dựng ma trận của thuật giải cho bài toán PSA

Việc sử dụng đồng thời 3 ma trận BLOSUM trong giải thuật sẽ làm tăng độ chính xác về phương diện thực tế cho bài toán PSA, tuy nhiên điều này cũng đòi hỏi thời gian tính toán của giải thuật phải tăng lên tương ứng 3 lần. Chúng ta chấp nhận điều này nhằm hướng đến một lời giải tốt nhất cho bài toán PSA.

Chọn S(m,n) Ma trận ứng với BLOSUM100 Ma trận ứng với BLOSUM62 Ma trận ứng với BLOSUM45 Ma trận tính toán của giải thuật S62(m,n) S100(m,n) S45(m,n) S (m,n)

Một phần của tài liệu Các kỹ thuật toán học cho bài toán so sánh đa trình tự (Trang 54 - 60)