CHƯƠNG 2: ĐỐI SÁNH CHUỖI XẤP XỈ CHO VẤN ĐỀ TỰ ĐỘNG SỬA ĐỔI VÀ GỢI Ý TRUY VẤN
2.1 Các phương pháp đối sánh chuỗi xấp xỉ
Trong chương này sẽ giới thiệu về một số phương pháp liên quan đến đối sánh chuỗi xấp xỉ dựa trên độ đo sai khác về các kí tự. Các phương pháp đều sử dụng một trong các kỹ thuật xử lý khi gặp trường hợp kí tự đối sánh không trùng nhau. Phương pháp Hamminng sử dụng cho hai chuỗi có độ dài phải bằng nhau và chỉ dùng thao tác thay thế (replace). Theo phương pháp Episode Distance chỉ sử dụng một thao tác duy nhất đó là chèn thêm kí tự để chuyển chuỗi T thành chuỗi P. Phương pháp theo Longest Common Sequence chỉ ra chuỗi con dài nhất có thể của chuỗi T nằm trong chuỗi P.
2.1.1 Khoảng các Hamming
Khoảng cách Hamming được tính theo phương pháp đối sánh hai chuỗi T và T‘ với độ dài bằng nhau và trả về số kí tự sai khác giữa hai chuỗi. Với kỹ thuật sánh chuỗi theo thứ tự từng kí tự để chỉ ra sự khác biệt. Thuật toán chỉ áp dụng một thao tác duy nhất là thay thế (replace) kí tự này bằng kí tự khác để chuyển T‘ Thành T [15].
Khoảng cách Hamming chỉ ra số thao tác cần thay thế để chuyển T‘
thành T.
Bảng 2.1: Bảng mô tả khoảng cách Hamming giữa hai chuỗi có độ dài như nhau
Từ Khóa 1 Từ khóa 2 Hamming Distanse
Thương Thuyết 4
Toàn Toản 1
1011101 1001001 2
* Thuật toán Hamming
Hình 2.1: Thuật toán Hamming
Giải thuật thực hiện so sánh kí tự vị trí i của chuỗi T là ch1 = T[i] và kí tự ch2 ở vị trí i của chuỗi T‘ là ch2=T‘[i]. Sau đó kiểm tra nếu ch1 khác với ch2 thì khoảng cách d đƣợc tăng lên 1. Thực hiện từ kí tự đầu đến kí tự cuối thu đƣợc d cuối cùng là giá trị của khoảng cách Hamming. Thuật toán có độ phức tạp tính toán về thời gian là T(n);
Ứng dụng trong mạng máy tính, thuật toán Hamming đƣợc sử dụng trong kiểm tra lỗi và phát hiện lỗi trên đường truyền chuỗi Bit. Ngoài ra, còn cho phép ứng dụng trong bảo mật thông tin, nguyên lý mã hóa, nguyên lý thông tin (Information Theory).
đúng đúng
sai
D=0, Len=length(T), i=0
sai
Kết thúc Bắt đầu Nhập vào T
T,T‘
i<Len
T[i] !=T‘[i]
D=D+1 i=i+1
Xuất D
Thuật toán được thực hiện theo trình tự các bước như sau: Thực hiện duyệt từ phần tử của chuỗi T và từng phần tử của chuỗi P. Mỗi bước duyệt thực hiện đối sánh phần tử T[i] so với phần tử (kí tự) P[i], do T và P có độ dài bằng nhau.
Nếu T[i] != P[i] thì khoảng cách Hamming sẽ tăng lên một đơn vị.
Ngược lại khoảng cách sẽ được giữ nguyên cho bước trước đó, với khởi đầu độ đo là 0. Thực hiện lặp lại cho các kí tự còn lại. Việc thực hiện dừng và trả về kết quả sau khi thực hiện đối sánh với kí tự cuối cùng. Nếu khoảng cách bằng 0 thì hai chuỗi này là trùng nhau, nếu khoảng cách có giá trị bằng độ dài của chuỗi đối sánh thì có thể thấy hai chuỗi là khác nhau.
* Một số nhận xét về khoảng cách Hamming:
- Khoảng cách là một số nguyên dương và luôn nằm trong đoạn [0..n]
với n là chiều dài chuỗi T hoặc P.
- Khoảng cách chỉ ra tổng số kí tự cần thay thế để chuyển T thành P và ngƣợc lại.
- Khoảng cách càng nhỏ thể hiện độ tương đồng giữa hai chuỗi càng lớn. Nhƣng các kí tự tiền tố đƣợc đối sánh trùng nhau sẽ đƣợc ƣu tiên hơn.
Thường các ngôn ngữ Latin ưu tiên thứ tự từ trái qua phải.
2.1.2 Khoảng cách Episode
Giải thuật thực hiện một thao tác duy nhất thêm kí tự để thực hiện đối sánh. Giải thuật sẽ thêm 1 kí tự vào trong P để đối sánh với T. Nhƣ vậy Distance(P,T) = 1. Với giải thuật này chỉ thực hiện khi chuỗi T đƣợc thêm một kí tự vào chuỗi của mình để chuyển T thành P. Độ dài của hai chuỗi chỉ khác nhau một kí tự [3].
2.1.3 Khoảng cách Longest Common Sequence (LSC)
Thực hiện tìm kiếm chuỗi con lớn nhất của P nằm trong T. Với giải thuật thực hiện đúng 1 thao tác là thay thế hoặc thêm mới kí tự [7].
* Thuật toán LSC
function LCSubstr(T[1..m], P[1..n]) // Khởi tạo
L := array(1..m, 1..n) z := 0; ret := {}
for i := 1..m for j := 1..n Begin
if T[i] == P[j]
if( i == 1 or j == 1) L[i,j] := 1 else L[i,j] := L[i-1,j-1] + 1 if L[i,j] > z
z := L[i,j] ret := {T[i-z+1..i]}
else
if L[i,j] == z ret = ret{s[i-z+1..i]
else
L[i,j] := 0 End
return ret
Thuật toán thực hiện với mảng hai chiều L[n,m], n là độ dài của P và m là độ dài của T. Khởi động thuật toán đƣợc gán với các dữ liệu mặc định.
- Mảng L chứa các chỉ số cần thu thập của T và P. Chỉ ra các vị trí có kí tự sao cho độ dài của chuỗi con chung là lớn nhất.
- Z là số được chỉ ra thể hiện kích thước của chuỗi con được tăng lên khi tìm bổ sung đƣợc một kí tự.
- Ret: thể hiện chuỗi con chung lớn nhất đƣợc trả về trong quá trình thực hiện thuật toán.
Thuật toán thực hiện lặp qua n*m bước, n và m lần lượt thể hiện độ dài của chuỗi T và chuỗi P. Tại mỗi bước lặp sẽ xét các trường hợp cụ thể:
- Nếu T[i]= P[j]: thực hiện cập nhật L[i,j]= L[i-1, j-1] + 1; với trường hợp đầu j=1 hoặc i=1 sẽ khởi gán L[i,j] = 1.
- Nếu L[i,j]>z thực hiện cập nhật lại Z = L[i,j] và cập nhật ret := {T[i- z+1..i]}.
- Nếu L[I,j]=z thực hiện: tổng hợp ret = ret{T[i-z+1..i]