Năm 1970, Needleman và Wunsch đƣa ra thuật toán Needleman – Wunsch[17], giải thuật này thực hiện gióng cặp chuỗi trình tự toàn cục dựa trên quy hoạch động để tính điểm cho quá trình gióng hàng chuỗi trình tự.
Để tính điểm cho các cặp ký tự khi gióng chuỗi trình tự theo giải thuật Needleman – Wunsch có sử dụng ma trận thay thế.
Phƣơng pháp quy hoạch động đảm bảo về mặt toán học sẽ tìm ra phƣơng án gióng cặp chuỗi trình tự tối ƣu với một cơ chế tính điểm cụ thể. Tuy nhiên phƣơng pháp này có số bƣớc tính toán lớn, bằng khoảng bình phƣơng chiều dài chuỗi.
Giải thuật tổng quát của thuật toán gióng cặp chuỗi Needleman - Wunsch gồm 3 bƣớc:
+ B1: Khởi tạo ma trận đánh giá từ 2 chuỗi đầu vào + B2: Tính toán điền giá trị cho ma trận đánh giá + B3: Sử dụng kỹ thuật quay lui để tìm ra kết quả
Giả sử có 2 trình tự A và B. Để việc sắp gióng cột cặp trình tự AB có điểm cao nhất (tức cho kết quả tƣơng đồng cao nhất), một ma trận F hai chiều đƣợc tạo ra. Mỗi vị trí trong ma trận đƣợc ký hiệu là Fij. Điểm cho sắp gióng cột đƣợc đặc trƣng bằng ma trận tƣơng đồng. Trong đó:
+ S(i,j) là điểm tƣơng đồng giữa 2 kí tự i và j + d là một điểm phạt tuyến tính cho các gap
Trong ma trận trục hoành là các ký tự của trình tự A (có chiều dài là x), các ký tự của trình tự B (có chiều dài là y) đƣợc biểu diễn trên trục tung.
Các bƣớc:
Bƣớc 1: Khởi tạo ma trận từ 2 chuỗi trình tự Ta khởi tạo ma trận F nhƣ sau:
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
F(0,0) = 0 F(0,j) = 0 F(i,0) = 0
Bƣớc 2: Lấp đầy ma trận
Ta tiến hành lấp đầy ma trận F từ đỉnh bên trái tới đáy bên phải. Giá trị tại vị trí F(i,j) sẽ đƣợc tính dựa trên điểm tại F(i-1,j-1); F(i-1,j); F(i,j-1) theo công thức:
Match = F(i-1,j-1) + S(i, j) Delete = F(i-1, j) + d Insert = F(i, j-1) + d
F(i,j) = max(Match, Insert, Delete)
for i=0 to length(A) F(i,0) ← d*i
for j=0 to length(B) F(0,j) ← d*j
for i=1 to length(A) for j=1 to length(B) {
Match ← F(i-1,j-1) + S(i, j) Delete ← F(i-1, j) + d
Insert ← F(i, j-1) + d
F(i,j) ← max(Match, Insert, Delete) }
Bƣớc 3: Traceback
Dựa vào kỹ thuật lƣu vết để tìm đƣờng đi ngƣợc lại + Khởi tạo: Xuất phát từ ô (m,n)
+ Các bƣớc lặp: từ ô (i,j) ta xét các ô (i-1,j-1), (i-1,j), (i,j-1)
Nếu F(i,j) = F(i,j-1) + d thì ta có đƣờng đi từ ô (i,j-1) đến ô (i,j) Nếu F(i,j) = F(i-1,j) + d thì ta có đƣờng đi từ ô (i-1,j) đến ô (i,j)
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
Nếu F(i,j) = F(i-1,j-1) + S(i,j) với điều kiện A[j] giống B[i] thì ta có đƣờng đi từ ô (i,j) đến ô (i-1,j-1)
Nếu F(i,j) = F(i-1,j-1) thì cũng có đƣờng đi từ ô (i,j) đến (i-1,j-1) Mỗi bƣớc có thể chọn nhiều đƣờng đi
Tìm ra các aligenment
+ Nếu đƣờng đi theo hƣớng đƣờng chéo từ ô (i-1,j-1) đến ô(i,j) Nếu A[j] giống B[i] thì A[j] và B[i] đƣợc nối với nhau
Nếu A[j] khác B[i] thì A[j] đƣợc gióng với B[i] nhƣng không đƣợc nối(đƣợc gọi là sự thay thế _ substitution)
+ Nếu đƣờng đi theo hƣớng từ ô (i,j-1) đến ô(i,j) thì chèm thêm một gap ở B gióng với A[j]
+ Nếu đƣờng đi theo hƣớng từ ô (i-1,j)đến ô (i,j) thì chèm thêm một gap ở A gióng với B[i]
AlignmentA ← "" AlignmentB ← "" i ← chiều dài (A) j ← dài (B)
while (i> 0 hoặc k> 0)
{ if (i> 0 và j> 0 và F (i, j) == F (i-1, j-1) + S (A i , B j )) {
AlignmentA ← A i + AlignmentA AlignmentB ← B j + AlignmentB i ← i - 1
j ← j - 1
} else if (i> 0 và F (i, j) == F (i-1, j) + d) {
AlignmentA ← A i + AlignmentA AlignmentB ← "-" + AlignmentB i ← i - 1
} else (j> 0 và F (i, j ) == F (i, j-1) + d) { AlignmentA ← "-" + AlignmentA AlignmentB ← B j + AlignmentB j ← j - 1 } }
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
VD: Cho 2 trình tự A và b nhƣ sau:
Trình tự A: GAATTCAGTTA (N=11) Trình tự B: GGATCGA (M=7) Trong đó N là độ dài của trình tự A, M là độ dài của trình tự B
Cách tính điểm nhƣ sau:
Sij = 0 nếu 2 ký tự không trùng nhau Sij = 1 nếu 2 ký tự trùng nhau
d = 0 nếu gặp khoảng cách (gap)
•Bƣớc 1: Khởi tạoTạo một ma trận F có N+1 cột và M+1 hàng Giả sử ban đầu các hàng và cột của ma trận đều bằng 0
G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 G 0 G 0 A 0 T 0 C 0 G 0 A 0
Bƣớc 2: Lấp đầy ma trận đối với mỗi vị trí của Fij đƣợc định nghĩa để đƣợc điểm tối đa tại vị tríi,j
F(i,j) = Max[F(i-1,j-1) + S(i,j) , F(i,j-1) + d, F(i-1,j) + d] Ta lần lƣợt điền các giá trị Fij cho đến khi lấp đầy các ma trận.
Ta có S1,1=1, d=0, F0,0=0, F0,1=0, F1,0=0 F(1,1)=Max[F(0,0) + S(1,1) , F(1,0)+d ,F(0,1) +d]= Max[1,0,0] =1 G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 1 1 1 1 1 2 2 2 2 A 0 1 2 2 2 2 2 2 2 2 2 3
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
T 0 1 2 2 3 3 3 3 3 3 3 3 C 0 1 2 2 3 3 4 4 4 4 4 4 G 0 1 2 2 3 3 4 4 5 5 5 5 A 0 1 2 3 3 3 4 5 5 5 5 6
Bƣớc 3: Traceback (Xác định con đƣờng đi đến giá trị cuối cùng này) Bắt đầu từ giá trị cuối cùng của ma trận
G A A T T C A G T T A 0 0 0 0 0 0 0 0 0 0 0 0 G 0 1 1 1 1 1 1 1 1 1 1 1 G 0 1 1 1 1 1 1 1 2 2 2 2 A 0 1 2 2 2 2 2 2 2 2 2 3 T 0 1 2 2 3 3 3 3 3 3 3 3 C 0 1 2 2 3 3 4 4 4 4 4 4 G 0 1 2 2 3 3 4 4 5 5 5 5 A 0 1 2 3 3 3 4 5 5 5 5 6 Kết quả: Đƣa ra một trình tự: G A A T T C A G T T A | | | | | | G G A _ T C _ G _ _ A