Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 3 - Bùi Tiến Lên

50 66 0
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 3 - Bùi Tiến Lên

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 3: Các thuật toán tìm kiếm trên mảng và chuỗi cung cấp cho người học các kiến thức về các bài toán tìm kiếm. Đây là một tài liệu hữu ích dành cho các bạn sinh viên và những ai quan tâm dùng làm tài liệu học tập và nghiên cứu.

CÁC THUẬT TỐN TÌM KIẾM TRÊN MẢNG VÀ CHUỖI CuuDuongThanCong.com Bùi Tiến Lên 01/01/2017 https://fb.com/tailieudientucntt Bài tốn tìm kiếm Tìm kiếm (search) công việc hàng ngày sống Tìm kiếm tốn quan trọng ứng dụng tin học Một số thuật tốn tìm kiếm phổ biến cấu trúc liệu mảng Tìm kiếm Tìm kiếm nhị phân Tìm kiếm chuỗi xem tốn tìm kiếm mảng CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm CuuDuongThanCong.com TÌM KIẾM TRÊN MẢNG https://fb.com/tailieudientucntt Bài tốn Định nghĩa Cho dãy a có n phần tử Hãy tìm xem phần tử x có dãy a hay khơng? Bài tốn u cầu thêm thơng tin: Tìm vị trí phần tử x mảng, có bao nhiều phần tử x mảng CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm Tìm kiếm Ý tưởng Duyệt phần tử mảng a so sánh với phần tử x CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm Tìm kiếm (cont.) int LinearSearch (int a[], int n, int x) { for (int i = 0; i < n; i++) if (a[i] == x) return i; return -1; } CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm Đánh giá độ phức tạp Đánh giá chi phí thực dựa tham số n (số phần tử) CuuDuongThanCong.com Spring 2017 Trường hợp tốt trung bình xấu Hàm ước lượng O(g(n)) https://fb.com/tailieudientucntt Data structure & Algorithm Tìm kiếm nhị phân Ý tưởng Nếu phần tử dãy có quan hệ thứ tự; nghĩa so sánh bằng, lớn hơn, nhỏ giứa chúng Ta tổ chức lại dãy a để tìm kiếm hiệu Sắp xếp lại dãy a theo thứ tự tăng dần Xét dãy {a0 , a1 , , an−2 , an−1 }, so sánh phần tử amid với x 2.1 Nếu amid = x tìm thấy 2.2 Nếu amid < x tiếp tục tìm dãy {amid+1 , , an−1 } 2.3 Nếu amid > x tiếp tục tìm dãy {a0 , , amid−1 } CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm Tìm kiếm nhị phân (cont.) Chương trình 1: Hàm cài đặt tìm nhị phân với giả thiết dãy a thứ tự tăng dần 10 11 12 13 14 15 int BinarySearch (int a[], int n, int x) { int left = 0, right = n - 1, mid; { mid = (left + right) / 2; if (x == a[mid ]) return mid; else if (x < a[mid ]) right = mid - 1; else left = mid + 1; } while (left i giữ nguyên j thay đổi theo công thức bảng Next T x x x x x A x x x x P x x x x x B x https://fb.com/tailieudientucntt Data structure & Algorithm x 29 Minh họa thuật toán Xét chuỗi T = ”AATAAAATA” mẫu P = ”AAATA” Bảng Next mẫu P -1 CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 30 Tiếp tục Bảng Next mẫu P -1 Bắt đầu i = 0, j = A A T A A A A A T A A A T Trường hợp → i = 1, j = A A T A A A A A T A A A T Trường hợp → i = 2, j = A A T A A A A A T A CuuDuongThanCong.com Spring 2017 A A T A A A https://fb.com/tailieudientucntt Data structure & Algorithm 31 Tiếp tục Bảng Next mẫu P -1 Trường hợp 2.2 → i = 2, j = A A T A A A x A A A T A A T A Trường hợp 2.2 → i = 2, j = A A T A A A A x x A A A T A T A Trường hợp 2.1 → i = 3, j = A A T A A A A T x x x A A A T A CuuDuongThanCong.com Spring 2017 A https://fb.com/tailieudientucntt Data structure & Algorithm 32 Tiếp tục Bảng Next mẫu P -1 Trường hợp → i = 4, j = A A T A A A A T x x x A A A T A Trường hợp → i = 5, j = A A T A A A A T x x x A A A T A Trường hợp → i = 6, j = A A T A A A A T x x x A A A T A CuuDuongThanCong.com Spring 2017 A A A https://fb.com/tailieudientucntt Data structure & Algorithm 33 Tiếp tục Bảng Next mẫu P -1 Trường hợp 2.2 → i = 6, j = A A T A A A A T A x x x x A A A T A Trường hợp → i = 7, j = A A T A A A A T A x x x x A A A T A Trường hợp → i = 8, j = A A T A A A A T A x x x x A A A T A CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 34 Thuật toán Knuth-Morris-Pratt (KMP) Điểm yếu bảng Next MP T x x x x x x A x x P x x x x x x B x x P x x x x x x B x x x x x x x x Thuật toán Knuth-Morris-Pratt cải tiến Thuật toán Morris-Pratt Cải tiến thực việc tính bảng Next CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 35 Cài đặt Cài đặt cải tiến cách tính bảng Next 10 11 12 13 14 15 16 void KMP_CreateNext (char *P, int N[]) { int m, i, j; m = strlen (P); N[0] = -1; i = 0; j = -1; while (i < m -1) { if ((j == -1) || (P[i] == P[j])) { i++; j++; if(P[i] != P[j]) N[i] = j; else N[i] = N[j]; } else j = N[j]; } } CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 36 Đánh giá độ phức tạp Đánh giá chi phí thực dựa hai tham số n m CuuDuongThanCong.com Spring 2017 Trường hợp tốt trung bình xấu Hàm ước lượng O(g(n, m)) https://fb.com/tailieudientucntt Data structure & Algorithm 37 Thuật toán Rabin-Karp (RK) Nguyên lý Sử dụng kỹ thuật so sánh chuỗi T với mẫu P thuật toán Brute-force Sử dụng hàm băm để so sánh chuỗi Hai chuỗi giống phải có giá trị hàm băm giống nhau, hai chuỗi khác phải có giá trị hàm băm khác CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 38 Hàm băm Công thức Công thức hàm băm phổ biến cho chuỗi ký tự S có m ký tự f (S, m) = S0 d m−1 + S1 d m−2 + + Sm−1 (2) Với Si mã ASCII ký tự số i chuỗi d thừa số hàm băm thường số nguyên tố Ví dụ Tính giá trị hàm băm chuỗi ”hi” với d = 101 Mã ASCII ’h’ ’i’ 104 105 Áp dụng công thức f ("hi", 2) = 104 ∗ 101 + 105 Giá trị hàm băm chuỗi ”hi” 10609 CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 39 Một cách tính hàm băm hiệu Dựa cơng thức ta có cách tính hàm băm Cho chuỗi m phần tử T bắt đầu i f (T (i) , m) = Ti d m−1 + Ti+1 d m−2 + + Ti+m−1 Cho chuỗi m phần tử T bắt đầu i + f (T (i + 1) , m) = Ti+1 d m−1 + Ti+2 d m−2 + + Ti+m Vậy ta có cơng thức CuuDuongThanCong.com Spring 2017 f (T (i + 1) , m) = f (T (i) , m) d − Ti d m + Ti+m https://fb.com/tailieudientucntt Data structure & Algorithm (3) 40 Đánh giá độ phức tạp Đánh giá chi phí thực dựa hai tham số n m CuuDuongThanCong.com Spring 2017 Trường hợp tốt trung bình xấu Hàm ước lượng O(g(n, m)) https://fb.com/tailieudientucntt Data structure & Algorithm 41 Tài liệu tham khảo Boyer, R S and Moore, J S (1977) A fast string searching algorithm Communications of the ACM, 20(10):762–772 Cook, S A (1971) The complexity of theorem-proving procedures In Proceedings of the third annual ACM symposium on Theory of computing, pages 151–158 ACM Karp, R M and Rabin, M O (1987) Efficient randomized pattern-matching algorithms IBM Journal of Research and Development, 31(2):249–260 Knuth, D E., Morris, Jr, J H., and Pratt, V R (1977) Fast pattern matching in strings SIAM journal on computing, 6(2):323–350 CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt Data structure & Algorithm 42 ... chuỗi (cont.) Các thuật tốn tiêu biểu Brute Force Rabin-Karp Knuth-Morris-Pratt Boyer-Moore Boyer-Moore-Horspool Apostolico-Giancarlo Aho-Corasick CuuDuongThanCong.com Spring 2017 https://fb.com/tailieudientucntt.. .Bài tốn tìm kiếm Tìm kiếm (search) cơng việc hàng ngày sống Tìm kiếm toán quan trọng ứng dụng tin học Một số thuật tốn tìm kiếm phổ biến cấu trúc liệu mảng Tìm kiếm Tìm... Morris-Pratt (MP) Vấn đề Brute-force Trong thuật tốn Brute-force: xảy khơng so khớp vị trí đó, ta xóa bỏ tất thơng tin có phép so sánh trước bắt đầu lại việc so sánh vị trí chuỗi P Hướng giải

Ngày đăng: 11/01/2020, 16:46

Từ khóa liên quan

Mục lục

  • TÄM KIẾM TRÃ−N MẢNG

  • TÄM KIẾM TRÃ−N CHUỌI

Tài liệu cùng người dùng

Tài liệu liên quan