1. Trang chủ
  2. » Công Nghệ Thông Tin

Cấu trúc dữ liệu và giải thuật (phần 12) pdf

10 302 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 174,72 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

String matchingBài toán: - Tìm vị trí xuất hiện đầu tiên của chuỗi con trong 1 đoạn text - Tìm vị trí xuất hiện tiếp theo bằng cách thay đổi giá trị đầu của đoạn text - Thuật toán thông

Trang 1

Please purchase a personal license.

Trang 2

THUT TOÁN

KNUTT-MORRIS-PRATT

Trang 3

String matching

Bài toán:

- Tìm vị trí xuất hiện đầu tiên của chuỗi con trong 1

đoạn text

- Tìm vị trí xuất hiện tiếp theo bằng cách thay đổi giá trị đầu của đoạn text

- Thuật toán thông thường:

- So sánh kí tự đầu của đoạn text và kí tự đầu của chuỗi con

- Quá trình tiếp diễn cho đến khi hết chuỗi con

Trang 4

String matching

Thuật toán:

isub= 0; itext = 0; //ví trị hiện tại của chuỗi và đoạn text

while (itext <= strlen(text) && isub<=strlen(sub)

else

}

if (isub > strlen(sub)

Trang 5

String matching

Đánh giá thuật toán:

- m – strlength của substring

- n - strlength của đoạn text

Số lần so sánh trong trường hợp xấu nhất: m*(t-m+1)

Ví dụ: substring (AA….AAB), text(AA…AAA)



 Substring có m-1 A, text có n A  Dẫn đến trường hợp xấu nhất

Trang 6

Ý tưởng:

– Để dễ mô tả,ta coi các xâu đánh số từ 1

– Xâu W gọi là tiền tố(prefix) của xâu X nếu X có dạng WY (Y là 1 xâu nào đó)

– Xâu W gọi là hậu tố(suffix) của xâu X nếu X có dạng YW (Y là 1 xâu nào đó)

– Nếu có thêm W# X thì W gọi là prefix(hay suffic) thực sự của X

Trang 7

Ý tưởng:

– Hàm int Prefix(int q): trả độ dài của prefix dài nhất của P[1 m] đồng thời là suffix thực sự của

P[1 q]

Trang 8

Ví dụ:

Trang 9

 Thuật toán tính Prefix:

PI [1]= 0 ; k=0;

for (q=2;q<=m;q++)

{ while (k>0 && P[k+1] <>P[q])

k=PI[k];

if(P[k+1]==P[q])

k++;

PI[q]=k;

}

Trang 10

 Thuật toán tính KMP:

– Xác định độ dài q của xâu vừa là prefix của P,vừa là suffix của T[1 i] với i = 1->n

– Nếu q=m thì vị trí khớp chính là i-m+1

Cách tính q gần như cách tính Prefix

q=0

for (i=1;i<=n;i++)

q=PI[q];

if (P[q+1]==T[i]) q++;

}

Ngày đăng: 09/07/2014, 21:20

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w