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

Bài giảng Chương 4: Các thuật toán tìm kiếm

36 9 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 36
Dung lượng 0,92 MB

Nội dung

Nội dung bài giảng trình bày khái niệm tìm kiếm; bài toán tìm kiếm; các thuật toán tìm kiếm; tìm kiếm trên dãy chưa sắp; tìm kiếm tuần tự; tìm kiếm tuần tự cải tiến; tìm kiếm tuần tự trên dãy đã sắp... Để nắm chắc kiến thức mời các bạn cùng tham khảo bài giảng Chương 4: Các thuật toán tìm kiếm.

CHƯƠNG CÁC THUẬT TỐN TÌM KIẾM I KHÁI NIỆM TÌM KIẾM Đặt vấn đề CHÌA KHĨA CỦA TA ĐÂU? 2/37 I KHÁI NIỆM TÌM KIẾM Khái niệm  Tìm kiếm việc kiểm tra xem có hay khơng đối tượng có số thơng tin cho trước (đối tượng cần tìm) tập đối tượng cho trước (khơng gian tìm kiếm)  Ví dụ: Tìm chùm chìa khóa gian phịng  Ta có hình ảnh chùm chìa khóa  Gian phịng gồm nhiều đồ đạc 3/37 BÀI TỐN TÌM KIẾM - Dãy a, có n đối tượng, đối tượng có Dữ liệu vào: “khóa tìm kiếm” - Khóa đối tượng cần tìm (Key) Dữ liệu ra: - Nếu tìm thấy đối tượng có khóa ‘Key’ dãy a trả lại giá trị 1, ngược lại trả lại giá trị Dữ liệu vào: Ví dụ: a0 a1 a2 a3 a4 Số x=6 Dữ liệu ra: (Tìm thấy x mảng a) 4/37 II CÁC THUẬT TỐN TÌM KIẾM  Tìm kiếm  Tìm kiếm nhị phân  Tìm kiếm nhị phân tìm kiếm 5/37 II CÁC THUẬT TỐN TÌM KIẾM  Tùy theo liệu vào ta phân chia tốn tìm kiếm thành hại loại  Tìm kiếm dãy chưa sắp: dãy tìm kiếm chưa xếp theo thứ tự khóa tìm kiếm  Tìm kiếm dãy sắp: dãy tìm kiếm theo thứ tự tăng dần khóa tìm kiếm 6/37 TÌM KIẾM TRÊN DÃY CHƯA SẮP  Với dãy chưa xếp cách tìm kiếm đơn giản tìm kiếm  Tìm kiếm phương pháp tìm kiếm phổ biến đơn giản ? 7/37 1.1.TÌM KIẾM TUẦN TỰ a Ý tưởng :  So sánh khóa đối tượng cần tìm với khóa đối tượng dãy   Nếu nhau, kết thúc tìm kiếm (thành cơng)  Nếu không bằng, chuyển sang đối tượng Lặp lại công việc gặp đối tượng có khóa với khóa cần tìm (thành cơng) hết đối tượng dãy (không thành cơng) 8/37 1.1TÌM KIẾM TUẦN TỰ b Minh họa Ví dụ 1: Cho dãy số a0 a1 a2 a3 a4 Tìm số x=6 dãy x i=0 i=1 i=2 6 Tìm thấy x 9/37 1.1.TÌM KIẾM TUẦN TỰ Việc tìm kiếm minh họa sau  i=0; a0=5 x=6; i=i+1; Chuyển sang đối tượng  i=1; a1=1 x=6; i=i+1; Chuyển sang đối tượng  i=2; a2=6 = x; Tìm thấy x Tìm kiếm kết thúc thành cơng 10/37 TÌM KIẾM NHỊ PHÂN  Ý tưởng  So sánh khóa cần tìm với khóa đối tượng trung tâm dãy xét m=(l+r)/2  Tìm kiếm kết thúc thành cơng a[m]==x  Nếu a[m] > x, tìm kiếm thực với dãy trái a[l], , a[m-1]  Nếu a[m] < x, tìm kiếm thực với dãy phải a[m+1], , a[r]  Quá trình tìm kiếm tiếp tục gặp đối tượng mong muốn (thành công) dãy khóa xét trở nên rỗng 22/37 TÌM KIẾM NHỊ PHÂN  Ví dụ - Cho dãy số tăng a0 - a1 a2 a4 a4 Tìm số x=4 dãy Quá trình tìm kiếm minh họa sau 23/37 TÌM KIẾM NHỊ PHÂN Dãy xét x x x x < a[m]=5 l=0, r=4, m=2 > a[m]=1 l=0, r=1, m=0 > a[m]=2 l=1, r=1, m=1 l=2, r=1 Trường hợp dãy xét trở nên rỗng tìm kiếm kết thúc khơng thành cơng 24/37 TÌM KIẾM NHỊ PHÂN  Ví dụ - Cho dãy số a tăng dần a0 a1 a2 11 23 25 36 42 48 - Minh a3 a4 a5 a6 a7 họa việc tìm số x1=11 số x2=37 dãy phương pháp tìm kiếm nhị phân 25/37 TÌM KIẾM NHỊ PHÂN begin  Giải thuật l = 0; r = n-1 Yes (rx return m=(l+r)/2 No a[m]==x Yes return end 26/37 TÌM KIẾM NHỊ PHÂN int tknp(int x, int a[], int n) { int l=0, r=n-1, m ; while (l x) r=m-1; else l=m+1 ; } return 0; } Độ phức tạp : O(log2(n)) 27/37 TÌM KIẾM NHỊ PHÂN int tknp2(int x, int a[], int l, int r) { if (rx) return tknp2(x, a, l, m-1) return tknp2(x,a, m+1, r); } 28/37 TÌM KIẾM TRÊN CÂY NHỊ PHÂN TÌM KIẾM • Ý tưởng : • Lưu dãy khóa vào nhị phân tìm kiếm • Nếu t rỗng kết thúc tìm kiếm • So sánh x với khóa gốc tìm kiếm thành cơng • Nếu khóa gốc lớn x lặp lại trình tìm kiếm bên trái • Nếu khóa gốc nhỏ x lặp lại trình tìm kiếm bên phải 29/37 TÌM KIẾM TRÊN CÂY NHỊ PHÂN TÌM KIẾM  Ví dụ - Cho dãy số 33 48 11 36 25 23 42 - Minh họa việc tìm số x1=42 số x2=43 dãy phương pháp tìm kiếm nhị phân tìm kiếm 30/37 TÌM KIẾM TRÊN CÂY NHỊ PHÂN TÌM KIẾM  Cây nhị phân tìm kiếm tương ứng • t Tìm x=42 A • t->keykey>x, tìm C 11 • C->keykey=x, tìm thấy x, kết thúc tìm kiếm 33 25 23 B 48 36 C 42 D 31/37 TÌM KIẾM TRÊN CÂY NHỊ PHÂN TÌM KIẾM int tkcnp(int x, node *t ) { while (t!=NULL) { if (t->key==x) return 1; if (t->key>x) t= t->left ; else t=t->right ; } return 0; } 32/37 TÌM KIẾM TRÊN CÂY NHỊ PHÂN TÌM KIẾM int tkcnp2(int x, node *t ) { if (t=NULL) return 0; if (t->key==x) return 1; if (t->key>x) return tkcnp2(x, t->left) return tkcnp2(x,t->right); } Độ phức tạp : Thuận lợi O(log2(n)) Không thuận lợi O(n) 33/37 BÀI TẬP ÁP DỤNG Bài Viết chương trình thực việc sau  Nhập vào mảng chiều n số nguyên (0keykey=x, tìm

Ngày đăng: 10/05/2021, 13:35

w