Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 29 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
29
Dung lượng
244,63 KB
Nội dung
Please purchase a personal license MỤC TIÊU Khái niệm tìm kiếm Phát biểu toán tìm kiếm Các phương pháp tìm kiếm Phương pháp tìm kiếm Phương pháp tìm kiếm nhị phân KHÁI NIỆM TÌM KIẾM Đặt vấn đề DÉP CỦA TA ĐÂU? KHÁI NIỆM TÌM KIẾM (TT) 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 BÀI TOÁN TÌM KIẾM - Dãy X, có n đối tượng, đối tượng có Đầu vào: “khóa tìm kiếm” - Khóa đối tượng cần tìm (Key) Đầu ra: - Vị trí đối tượng có khóa ‘Key’ dãy X tìm kiếm thành công, ngược lại trả -1 Đầu vào: Ví dụ: X0 X1 X2 X3 X4 Số k=6 Đầu ra: v=2 (vị trí số k dãy X) CÁC THUẬT TOÁN TÌM KIẾM Tùy theo liệu vào ta phân chia toán tìm kiếm thành hAi 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ự khóa tìm kiếm 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 tìm kiếm Tìm kiếm phương pháp tìm kiếm phổ biến đơn giản ? TÌM KIẾM TUẦN TỰ Tìm kiếm 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) TÌM KIẾM TUẦN TỰ Ví dụ: Cho dãy số X0 X1 X2 X3 X4 Tìm số k=6 dãy k v i=0 i=1 i=2 TÌM KIẾM TUẦN TỰ Việc tìm kiếm minh họa sau i=0; X0=5 k=6; i=i+1; chuyển sang đối tượng i=1; X1=1 k=6; i=i+1; i=2; X2=6 = k=6; v=i=2 tìm kiếm kết thúc thành công TÌM KIẾM TUẦN TỰ CẢI TIẾN Giải thuật START i=0; X[n].key=Key ; Key != X[i].key Yes i=i+1 No (i[...]... Việc tìm kiếm về cơ bản giống như tìm kiếm trên dãy ch a sắp Quá trình tìm kiếm kết thúc khi gặp một trong 3 điều kiện Gặp đối tượng có kh a bằng với kh a c a đối tượng cần tìm (tìm kiếm thành công) Gặp đối tượng có kh a “lớn hơn” kh a c a đối tượng cần tìm (tìm kiếm không thành) Đã duyệt hết dãy (tìm kiếm không thành) TKTT TRÊN DÃY ĐÃ SẮP Ví dụ: Cho dãy số được sắp tăng X0 X1 X2 X3 X4 1 2 5 6 8 Tìm. .. học sinh có họ tên v a nhập có trong danh sách trên hay không, nếu có hãy in thông tin đầy đủ c a học sinh này ra màn hình Yêu cầu: Mỗi công việc được viết bằng một thủ tục TÌM KIẾM TRÊN DÃY ĐÃ SẮP Với một dãy đã sắp xếp theo thứ tự c a kh a tìm kiếm, thì việc tìm kiếm, về cơ bản sẽ nhanh hơn Việc tìm kiếm có thể thực hiện bằng một trong hai phương pháp Tìm kiếm tuần tự hoặc Tìm kiếm nhị phân TKTT TRÊN... 25 36 42 48 - Minh h a việc tìm số k1=11 và số k2=37 trong dãy bằng phương pháp tìm kiếm nhị phân TÌM KIẾM NHỊ PHÂN B_Search(X,l,r,Key) Thuật toán (rKey return B_Search(X,l,m-1,Key); X[m].key=Key No Yes return m; return B_Search(X,m+1,r,Key); TÌM KIẾM NHỊ PHÂN Thủ tục tìm kiếm int B_Search (int X[], int l, int r, int Key) { if (r Key, tìm kiếm được thực hiện với dãy trái Xl, , Xm-1 Nếu X[m].key < Key, tìm kiếm được thực hiện với dãy phải Xm+1, , Xr Với dãy kh a kế tiếp, một kỹ thuật tương tự lại được sử dụng Quá trình tìm kiếm tiếp tục cho đến khi gặp đối tượng mong muốn (thành công) hoặc dãy kh a đang xét trở THÀNH rỗng TÌM KIẾM NHỊ PHÂN Ví dụ - Cho dãy... ở vị trí thứ bao nhiêu Yêu cầu: Mỗi công việc được viết bằng một thủ tục TÌM KIẾM TRÊN DÃY CH A SẮP Bài tập: Viết chương trình thực hiện các việc sau Nhập vào một danh sách học sinh (0