Tải bản đầy đủ (.pdf) (7 trang)

a0011 bai 1 string searchin morebook vn 5336

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (121.74 KB, 7 trang )

Data Structures & Algorithms

Các thuật toán đối sánh chuỗi
(String Searching)
Nguyễn Tri Tuấn
Khoa CNTT – ĐH.KHTN.Tp.HCM
Email: nttuan@ fit.hcmuns.edu.vn

String Searching
Giới thiệu
Các bước xử lý
Các cách tiếp cận
Brute-Force
Knuth-Morris-Pratt

Autumn 2008

Data Structures & Algorithms - String Searching - Nguyen Tri Tuan, DH.KHTN Tp.HCM

2

1


Giới thiệu
ªCác thuật ngữ thường dùng:
String searching
Pattern matching
String matching
Text searching


Autumn 2008

Data Structures & Algorithms - String Searching - Nguyen Tri Tuan, DH.KHTN Tp.HCM

3

Giới thiệu (tt)
ª“Đối sánh chuỗi” là gì ?
Cho một chuỗi T và một chuỗi P, hãy xác định P có
xuất hiện trong T hay khơng ?
Tương tự như lệnh:
strstr(T, P)

[trong C++]

Pos(P, T)

[trong Pascal]

m
Pattern (P)

n
Text (T)
Autumn 2008

Data Structures & Algorithms - String Searching - Nguyen Tri Tuan, DH.KHTN Tp.HCM

4


2


Giới thiệu (tt)
ªĐối sánh chuỗi là một trong những bài tốn cơ
bản và “tự nhiên” nhất của ngành Tin Học
ªCơng dụng:
Chức năng search trong các trình soạn thảo văn bản
và Web browser
Các công cụ search (vd. Google)
Sinh học phân tử (tìm kiếm các mẫu trong DNA /
protein)


Autumn 2008

Data Structures & Algorithms - String Searching - Nguyen Tri Tuan, DH.KHTN Tp.HCM

5

Giới thiệu (tt)
ªLịch sử phát triển:
Brute Force:
Trong trường hợp xấu nhất thời gian thực hiện tỷ lệ với m*n
Trong nhiều ứng dụng thực tế thời gian xử lý thực sự tỉ lệ với
m+n
Thích hợp với hầu hết các hệ máy tính

Trong năm 1970, S.A.Cook đã chứng minh một kết
quả lý thuyết giúp suy ra sự tồn tại của một thuật toán

để giải bài tốn đối sánh mẫu, có thời gian tỷ lệ với
M+N trong trường hợp xấu nhất

Autumn 2008

Data Structures & Algorithms - String Searching - Nguyen Tri Tuan, DH.KHTN Tp.HCM

6

3


Giới thiệu (tt)
ªLịch sử phát triển:
D.E.Knuth và V.R.Pratt đã kiên trì theo đuổi kiến trúc
mà Cook đã dùng để chứng minh cho cho định lý của
ông và nhận được một thuật toán tương đối đơn giản.
Đồng thời J.H.Morris cũng khám phá ra thuật tốn
này
Knuth, Morris, Pratt đã khơng giới thiệu thuật toán
của họ cho đến năm 1976, và trong thời gian này
R.S.Boyer và J.S.Moore đã khám phá ra một thuật
toán nhanh hơn nhiều

Autumn 2008

Data Structures & Algorithms - String Searching - Nguyen Tri Tuan, DH.KHTN Tp.HCM

7


Giới thiệu (tt)
ªLịch sử phát triển:
Trong năm 1980, R.M.Karp và M.O.Rabin đã đi đến
thuật toán đơn giản gần như thuật tốn Brute Force,
có thời gian thi hành thường tỉ lệ với m+n

Autumn 2008

Data Structures & Algorithms - String Searching - Nguyen Tri Tuan, DH.KHTN Tp.HCM

8

4


Giới thiệu (tt)
ªCác thuật tốn tiêu biểu:
Brute Force
Karp-Rabin
Morris-Pratt
Knuth-Morris-Pratt
Boyer-Moore
Boyer-Moore-Horspool
Apostolico-Giancarlo
Aho-Corasick

Autumn 2008

Data Structures & Algorithms - String Searching - Nguyen Tri Tuan, DH.KHTN Tp.HCM


9

Các bước xử lý
ªCác thuật tốn đối sánh chuỗi thường có 2 bước
xử lý sau:
Bước tiền xử lý (Preprocessing Phase):
Xử lý Pattern
Khởi tạo cấu trúc dữ liệu

Bước tìm kiếm (Searching Phase)
Tìm kiếm Pattern trong Text

Autumn 2008

Data Structures & Algorithms - String Searching - Nguyen Tri Tuan, DH.KHTN Tp.HCM

10

5


Knuth-Morris-Pratt (tt)
// Hàm tạo lập bảng NEXT (KMP)
void initNEXT_KMP(char *p, int NEXT[]) {
int i, j;
int m = strlen(p);
i = 0;
j = NEXT[0] = -1;
while (i < m) {
if (j == -1 || p[i] == p[j]) {

i++; j++;
if (p[i] != p[j]) NEXT[i] = j;
else NEXT[i] = NEXT[j];
}
else j = NEXT[j];
}
}
Autumn 2008

Data Structures & Algorithms - String Searching - Nguyen Tri Tuan, DH.KHTN Tp.HCM

37

Knuth-Morris-Pratt (tt)
ªĐộ phức tạp:
Giai đoạn tiền xử lý: O(m) (tính NEXT)
Giai đoạn tìm kiếm: O(n)
Tổng: O(n+m)
Số phép so sánh lớn nhất của một ký tự <= logam
với a =

Autumn 2008

1+√5
2

Data Structures & Algorithms - String Searching - Nguyen Tri Tuan, DH.KHTN Tp.HCM

38


19


Thank you
for your attention

Autumn 2008

Data Structures & Algorithms - String Searching - Nguyen Tri Tuan, DH.KHTN Tp.HCM

39

Q&A

Autumn 2008

Data Structures & Algorithms - String Searching - Nguyen Tri Tuan, DH.KHTN Tp.HCM

40

20



×