Bài giảng Cấu trúc dữliệu và giải thuật: Đối sánh chuỗi - Đậu Ngọc Hà Dương
Số trang: 41
Loại file: pptx
Dung lượng: 410.13 KB
Lượt xem: 16
Lượt tải: 0
Xem trước 5 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Bài giảng Cấu trúc dữliệu và giải thuật: Đối sánh chuỗi - Đậu Ngọc Hà Dương có nội dung trình bày về đối sánh chuỗi, thuật toán Brute-Force, thuật toán Morris-Pratt, cải tiến với Knuth-Morris-Pratt,... Mời các bạn cùng tham khảo!
Nội dung trích xuất từ tài liệu:
Bài giảng Cấu trúc dữliệu và giải thuật: Đối sánh chuỗi - Đậu Ngọc Hà DươngCấutrúcdữliệuvàgiảithuật ĐỐI SÁNH CHUỖI Giảng viên: Đậu Ngọc Hà Dương Nội dung trình bày2 CấutrúcdữliệuvàgiảithuậtHCMUS2010 Giới thiệu3 Đốisánhchuỗi Từ khóa: String matching, String searching, Pattern searching, Text Searching Một trong những thuật toán quan trọng và có ứng dụng rộng rãi. CấutrúcdữliệuvàgiảithuậtHCMUS2010 Giới thiệu4 Ứngdụngcủađốisánhchuỗi: Máy tìm kiếm Trình soạn thảo văn bản Trình duyệt web Sinh học phân tử (Tìm mẫu trong dãy DNA). .. CấutrúcdữliệuvàgiảithuậtHCMUS2010 Giới thiệu5 Mụctiêu: Kiểm tra sự tồn tại của một chuỗi ký tự (mẫu, pattern) trong một chuỗi ký tự có kích thước lớn hơn nhiều (văn bản, text). Nếu tồn tại, trả về một (hoặc nhiều) vị trí xuất hiện. Quyước: Mẫu cần tìm: P (chiều dài m). Văn bản: T (chiều dài n). Cấutrúcd ữliệuvàgiảithuậtHCMUS2010 P và T có cùng tập hữu hạn ký tự ∑. (∑ = {0, 1}; Giới thiệu6 Đốisánhchuỗi: Bằng cách lần lượt dịch chuyển (cửa sổ) P trên T. P tồn tại trên T tại vị trí bắt đầu là i (0 ≤ i ≤ n – m) nếu T[i + j] = P[j] với mọi 0 ≤ j ≤ m - 1. Vídụ: P = abbaba T = ababaabbabaa => C i = 5ữliệuvàgiảithuậtHCMUS2010 ấutrúcd Giới thiệu7 Cácthuậttoántiêubiểu: Brute Force Karp-Rabin Morris-Pratt Knuth-Morris-Pratt Boyer-Moore … CấutrúcdữliệuvàgiảithuậtHCMUS2010 Thuật toán Brute-ForceCấutrúcdữliệuvàgiảithuậtHCMUS2010 Ý tưởng9 LầnlượtkiểmtrađiềukiệnP[0…m1]=T[i… i+m1]tạimọivịtrícóthểcủai. Vídụ Tìm kiếm P = aab trong T = acaabc CấutrúcdữliệuvàgiảithuậtHCMUS2010 Cài đặt10 bruteForceMatcher(T,P) n ← length[T] m ← length[P] for i ← 0 to n - m if P[0..m-1] = T[i…i+m-1] return i CấutrúcdữliệuvàgiảithuậtHCMUS2010 Đánh giá11 Trườnghợptốtnhất–khôngtìmthấy:O(n). Trườnghợpxấunhất–khôngtìmthấy:O(n*m). Trườnghợptrungbình:O(n+m). CấutrúcdữliệuvàgiảithuậtHCMUS2010 Đặc điểm chính12 KhôngcầnthaotáctiềnxửlýtrênP. Luônluôndịchchuyểnmẫu(cửasổ)sangphải mộtvịtrí. Thaotácsosánhcóthểthựchiệntheobấtkỳ chiềunào. Trườữngh ấutrúcd C ợpx liệuvàgi ấậunh ảithu ất:O((nm+1)*m). tHCMUS2010 Thuật toán Morris-PrattCấutrúcdữliệuvàgiảithuậtHCMUS2010 Đặt vấn đề14 ĐiểmhạnchếcủathuậttoánBruteForce: Không ghi nhớ được thông tin đã trùng khớp (trước) khi xảy ra tình trạng không so khớp. Phải so sánh lại từ đầu (trên P) trong tất cả trường hợp CấutrúcdữliệuvàgiảithuậtHCMUS2010 Đặt vấn đề15 Vídụ: T: 10101011101001; P: 10100 Brute Force: s = 0, j = 4, T[s+j] != P[j] => s = 1, j = 0 T : 10101011101001 P: 10100 Cách khác? s = 0, j = 4, T[s+j] != P[j] => s = 2, j = 2 CấutrúcdữliệuvàgiảithuậtHCMUS2010 Đề xuất của thuật toán16 GhinhậnlạinhữngphầncủaTđãtrùngvớiP trướcđó. CốgắngtăngsốbướcdịchchuyểnPtrênT (thayvì01đơnvị). CốgắngbỏquamộtsốbướcsosánhgiữaP vàTtạivịtrímới(thayvìj=0,gánjbằngmộtsố thíchhợp). CấutrúcdữliệuvàgiảithuậtHCMUS2010 Đề xuất của thuật toán17 Giảsử: i là vị trí bắt đầu sự đối sánh (trên T). j là vị trí đang so sánh (trên P). (Ký tự tương ứng trên T tại vị trí i+j). T[i+j] != P[j] => không so khớp CấutrúcdữliệuvàgiảithuậtHCMUS2010 Đề xuất của thuật toán18 Tìm: Vị trí mới i1 (trên T) và j1 (trên P) sao cho i+j = i1+j1 (vị trí đang xem xét) v =T[i1 … i1+j1–1] là đoạn so khớp mới giữa P và T. Khiđó: Đoạn dịch chuyển cửa sổ: j – j1.(do j1 < j) Có thể tìm i1 dựa trên j1. CấutrúcdữliệuvàgiảithuậtHCMUS2010 Đề xuất của thuật toán19 Vấnđề: Tìm giá trị j1 dựa t ...
Nội dung trích xuất từ tài liệu:
Bài giảng Cấu trúc dữliệu và giải thuật: Đối sánh chuỗi - Đậu Ngọc Hà DươngCấutrúcdữliệuvàgiảithuật ĐỐI SÁNH CHUỖI Giảng viên: Đậu Ngọc Hà Dương Nội dung trình bày2 CấutrúcdữliệuvàgiảithuậtHCMUS2010 Giới thiệu3 Đốisánhchuỗi Từ khóa: String matching, String searching, Pattern searching, Text Searching Một trong những thuật toán quan trọng và có ứng dụng rộng rãi. CấutrúcdữliệuvàgiảithuậtHCMUS2010 Giới thiệu4 Ứngdụngcủađốisánhchuỗi: Máy tìm kiếm Trình soạn thảo văn bản Trình duyệt web Sinh học phân tử (Tìm mẫu trong dãy DNA). .. CấutrúcdữliệuvàgiảithuậtHCMUS2010 Giới thiệu5 Mụctiêu: Kiểm tra sự tồn tại của một chuỗi ký tự (mẫu, pattern) trong một chuỗi ký tự có kích thước lớn hơn nhiều (văn bản, text). Nếu tồn tại, trả về một (hoặc nhiều) vị trí xuất hiện. Quyước: Mẫu cần tìm: P (chiều dài m). Văn bản: T (chiều dài n). Cấutrúcd ữliệuvàgiảithuậtHCMUS2010 P và T có cùng tập hữu hạn ký tự ∑. (∑ = {0, 1}; Giới thiệu6 Đốisánhchuỗi: Bằng cách lần lượt dịch chuyển (cửa sổ) P trên T. P tồn tại trên T tại vị trí bắt đầu là i (0 ≤ i ≤ n – m) nếu T[i + j] = P[j] với mọi 0 ≤ j ≤ m - 1. Vídụ: P = abbaba T = ababaabbabaa => C i = 5ữliệuvàgiảithuậtHCMUS2010 ấutrúcd Giới thiệu7 Cácthuậttoántiêubiểu: Brute Force Karp-Rabin Morris-Pratt Knuth-Morris-Pratt Boyer-Moore … CấutrúcdữliệuvàgiảithuậtHCMUS2010 Thuật toán Brute-ForceCấutrúcdữliệuvàgiảithuậtHCMUS2010 Ý tưởng9 LầnlượtkiểmtrađiềukiệnP[0…m1]=T[i… i+m1]tạimọivịtrícóthểcủai. Vídụ Tìm kiếm P = aab trong T = acaabc CấutrúcdữliệuvàgiảithuậtHCMUS2010 Cài đặt10 bruteForceMatcher(T,P) n ← length[T] m ← length[P] for i ← 0 to n - m if P[0..m-1] = T[i…i+m-1] return i CấutrúcdữliệuvàgiảithuậtHCMUS2010 Đánh giá11 Trườnghợptốtnhất–khôngtìmthấy:O(n). Trườnghợpxấunhất–khôngtìmthấy:O(n*m). Trườnghợptrungbình:O(n+m). CấutrúcdữliệuvàgiảithuậtHCMUS2010 Đặc điểm chính12 KhôngcầnthaotáctiềnxửlýtrênP. Luônluôndịchchuyểnmẫu(cửasổ)sangphải mộtvịtrí. Thaotácsosánhcóthểthựchiệntheobấtkỳ chiềunào. Trườữngh ấutrúcd C ợpx liệuvàgi ấậunh ảithu ất:O((nm+1)*m). tHCMUS2010 Thuật toán Morris-PrattCấutrúcdữliệuvàgiảithuậtHCMUS2010 Đặt vấn đề14 ĐiểmhạnchếcủathuậttoánBruteForce: Không ghi nhớ được thông tin đã trùng khớp (trước) khi xảy ra tình trạng không so khớp. Phải so sánh lại từ đầu (trên P) trong tất cả trường hợp CấutrúcdữliệuvàgiảithuậtHCMUS2010 Đặt vấn đề15 Vídụ: T: 10101011101001; P: 10100 Brute Force: s = 0, j = 4, T[s+j] != P[j] => s = 1, j = 0 T : 10101011101001 P: 10100 Cách khác? s = 0, j = 4, T[s+j] != P[j] => s = 2, j = 2 CấutrúcdữliệuvàgiảithuậtHCMUS2010 Đề xuất của thuật toán16 GhinhậnlạinhữngphầncủaTđãtrùngvớiP trướcđó. CốgắngtăngsốbướcdịchchuyểnPtrênT (thayvì01đơnvị). CốgắngbỏquamộtsốbướcsosánhgiữaP vàTtạivịtrímới(thayvìj=0,gánjbằngmộtsố thíchhợp). CấutrúcdữliệuvàgiảithuậtHCMUS2010 Đề xuất của thuật toán17 Giảsử: i là vị trí bắt đầu sự đối sánh (trên T). j là vị trí đang so sánh (trên P). (Ký tự tương ứng trên T tại vị trí i+j). T[i+j] != P[j] => không so khớp CấutrúcdữliệuvàgiảithuậtHCMUS2010 Đề xuất của thuật toán18 Tìm: Vị trí mới i1 (trên T) và j1 (trên P) sao cho i+j = i1+j1 (vị trí đang xem xét) v =T[i1 … i1+j1–1] là đoạn so khớp mới giữa P và T. Khiđó: Đoạn dịch chuyển cửa sổ: j – j1.(do j1 < j) Có thể tìm i1 dựa trên j1. CấutrúcdữliệuvàgiảithuậtHCMUS2010 Đề xuất của thuật toán19 Vấnđề: Tìm giá trị j1 dựa t ...
Tìm kiếm theo từ khóa liên quan:
Bài giảng Cấu trúc dữliệu và giải thuật Cấu trúc dữliệu và giải thuật Đối sánh chuỗi Thuật toán Brute-Force Thuật toán Morris-Pratt String matchingGợi ý tài liệu liên quan:
-
Hệ thống cảnh báo tấn công thay đổi giao diện Website
21 trang 19 0 0 -
Bài giảng Cấu trúc dữ liệu và giải thuật: Đối sánh chuỗi
41 trang 19 0 0 -
Bài giảng Cấu trúc dữliệu và giải thuật: Ôn tập - Đậu Ngọc Hà Dương
44 trang 17 0 0 -
Bài giảng Cấu trúc dữliệu và giải thuật: Các thuật toán sắp xếp - Đậu Ngọc Hà Dương
46 trang 16 0 0 -
Bài giảng Cấu trúc dữliệu và giải thuật: Ôn tập kiến thức - Đậu Ngọc Hà Dương
19 trang 14 0 0 -
Bài giảng Cấu trúc dữ liệu & giải thuật: Đối sách chuỗi
26 trang 13 0 0 -
Bài giảng Tích hợp dữ liệu và XML - Chương 10: Đối sánh chuỗi
5 trang 13 0 0 -
Bài giảng Cấu trúc dữliệu và giải thuật: Giới thiệu - Đậu Ngọc Hà Dương
29 trang 11 0 0 -
Bài giảng Cấu trúc dữliệu và giải thuật: Các cấu trúc dữ liệu cơ bản - Đậu Ngọc Hà Dương
76 trang 10 0 0 -
Bài giảng Cấu trúc dữliệu và giải thuật: Nén dữ liệu - Đậu Ngọc Hà Dương
88 trang 10 0 0