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

a0011 bai 1 string searchin morebook vn 5336

7 7 0

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

THÔNG TIN TÀI LIỆU

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 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 Giới thiệu (tt) ª“Đối sánh chuỗi” ? Cho chuỗi T chuỗi P, xác định P có xuất T hay không ? Tương tự 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 Giới thiệu (tt) ªĐối sánh chuỗi tốn “tự nhiên” ngành Tin Học ªCơng dụng: Chức search trình soạn thảo văn Web browser Các công cụ search (vd Google) Sinh học phân tử (tìm kiếm mẫu DNA / protein) … Autumn 2008 Data Structures & Algorithms - String Searching - Nguyen Tri Tuan, DH.KHTN Tp.HCM Giới thiệu (tt) ªLịch sử phát triển: Brute Force: Trong trường hợp xấu thời gian thực tỷ lệ với m*n Trong nhiều ứng dụng thực tế thời gian xử lý thực tỉ lệ với m+n Thích hợp với hầu hết hệ máy tính Trong năm 1970, S.A.Cook chứng minh kết lý thuyết giúp suy tồn thuật toán để giải tốn đối sánh mẫu, có thời gian tỷ lệ với M+N trường hợp xấu Autumn 2008 Data Structures & Algorithms - String Searching - Nguyen Tri Tuan, DH.KHTN Tp.HCM Giới thiệu (tt) ªLịch sử phát triển: D.E.Knuth V.R.Pratt kiên trì theo đuổi kiến trúc mà Cook dùng để chứng minh cho cho định lý ông nhận thuật toán tương đối đơn giản Đồng thời J.H.Morris khám phá thuật tốn Knuth, Morris, Pratt khơng giới thiệu thuật toán họ năm 1976, thời gian R.S.Boyer J.S.Moore khám phá thuật toán nhanh nhiều Autumn 2008 Data Structures & Algorithms - String Searching - Nguyen Tri Tuan, DH.KHTN Tp.HCM Giới thiệu (tt) ªLịch sử phát triển: Trong năm 1980, R.M.Karp M.O.Rabin đến thuật toán đơn giản gần thuật toá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 Giới thiệu (tt) ªCác thuật toá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 Các bước xử lý ªCác thuật tốn đối sánh chuỗi thường có bước xử lý sau: Bước tiền xử lý (Preprocessing Phase): Xử lý Pattern Khởi tạo cấu trúc liệu Bước tìm kiếm (Searching Phase) Tìm kiếm Pattern Text Autumn 2008 Data Structures & Algorithms - String Searching - Nguyen Tri Tuan, DH.KHTN Tp.HCM 10 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 ký tự

Ngày đăng: 04/12/2022, 09:47

Xem thêm: