Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 18 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
18
Dung lượng
150,5 KB
Nội dung
1 BÀI6:TÌMKIẾMBÀI6:TÌMKIẾM 6.1. Tìmkiếm tuần tự 6.2. Tìmkiếm nhị phân Tìmkiếm nhị phân 6.3. Câu hỏi ôn tập 2 6.1. Tìmkiếm tuần tự 6.1.1. Bài toán tìmkiếm 6.1.2. Nguyên tắc tìmkiếm 6.1.3. Giải thuật 6 6.1.4. Phân tích đánh giá 3 6.1.1. Bài toán tìmkiếm • TìmkiếmTìmkiếm là đòi hỏi rất thường xuyên trong xử lý tin học. là đòi hỏi rất thường xuyên trong xử lý tin học. • Bài toán tìm kiếm: Bài toán tìm kiếm: “ “ Cho 1 bảng chính gồm Cho 1 bảng chính gồm n n bản ghi bản ghi R R 1 1 , , R R 2 2 , …, , …, R R n n . Mỗi bản . Mỗi bản ghi ghi R R i i (1 ≤ i ≤ n) tương ứng với 1 khoá (1 ≤ i ≤ n) tương ứng với 1 khoá K K i i . Hãy tìm bản . Hãy tìm bản ghi có giá trị khoá tương ứng bằng ghi có giá trị khoá tương ứng bằng X X cho trước.” cho trước.” – X được gọi là khoá tìmkiếm hay đối trị tìm kiếm. – Công việc tìmkiếm sẽ hoàn thành khi xảy ra 1 trong 2 tình huống sau: 1. Tìm được bản ghi có giá trị khoá = X (thành công) 2. Không tìm được bản ghi có giá trị khoá = X (không thành công) • Chú ý: Khoá được coi như đại diện của bản ghi, vì vậy Chú ý: Khoá được coi như đại diện của bản ghi, vì vậy trong các GT và ví dụ, ta chỉ nói tới khoá. trong các GT và ví dụ, ta chỉ nói tới khoá. 4 • Bài toán tìmkiếm bản ghi có giá trị khoá bằng X trong Bài toán tìmkiếm bản ghi có giá trị khoá bằng X trong bảng chính chứa các bản ghi R bảng chính chứa các bản ghi R 1 1 , R , R 2 2 , …, R , …, R n n coi như được coi như được đặt ra 1 cách đơn giản với bảng khoá chứa các khoá K đặt ra 1 cách đơn giản với bảng khoá chứa các khoá K 1 1 , , K K 2 2 , …, K , …, K n n và K và K i i ≠ K ≠ K j j nếu i ≠ j. nếu i ≠ j. Tìmkiếm khoá X trong 1 bảng các khoá K Tìmkiếm khoá X trong 1 bảng các khoá K 1 1 , K , K 2 2 , …, K , …, K n n (K (K i i ≠ K ≠ K j j nếu i ≠ j) nếu i ≠ j) • Sau 1 phép tìmkiếm không thành công, có thể xuất hiện Sau 1 phép tìmkiếm không thành công, có thể xuất hiện yêu cầu bổ sung thêm bản ghi mới, GT như vậy được gọi yêu cầu bổ sung thêm bản ghi mới, GT như vậy được gọi là là GT tìmkiếm có bổ sung GT tìmkiếm có bổ sung . . • Giá trị của khoá có thể là số, ký tự, xâu ký tự,… nhưng Giá trị của khoá có thể là số, ký tự, xâu ký tự,… nhưng để cho tiện ta coi khoá là các để cho tiện ta coi khoá là các số nguyên số nguyên . . Bài toán tìmkiếm 5 6.1.2. Nguyên tắc tìmkiếm • Tìmkiếm tuần tự (sequential searching) là kỹ thuật tìmTìmkiếm tuần tự (sequential searching) là kỹ thuật tìmkiếm rất đơn giản và cổ điển. kiếm rất đơn giản và cổ điển. • Nội dung có thể tóm tắt như sau: Nội dung có thể tóm tắt như sau: • Nguyên tắc tìmkiếm Nguyên tắc tìmkiếm : : – Lần lượt so sánh X (khoá tìm kiếm) với các khoá K 1 , K 2 , …, K n trong bảng cho tới khi tìm thấy X (X = K m ) hoặc hết bảng khoá mà chưa tìm thấy X. – Kết quả: 1. Tìm được vị trí m của khoá (đầu tiên) có giá trị bằng X. 2. Không tìm được khoá có giá trị bằng X. 6 6.1.3. Giải thuật • Cho bảng khoá Cho bảng khoá k k gồm gồm n n phần tử (0 phần tử (0 ≤ n ≤ 250) ≤ n ≤ 250) , các khoá , các khoá và và X X là các số nguyên Integer được nhập từ bàn phím là các số nguyên Integer được nhập từ bàn phím hoặc sinh ngẫu nhiên (bằng hoặc sinh ngẫu nhiên (bằng random random ). ). • Giải thuật tìmkiếm tuần tự sẽ thực hiện tìmkiếm trong Giải thuật tìmkiếm tuần tự sẽ thực hiện tìmkiếm trong bảng xem có khoá nào bằng bảng xem có khoá nào bằng X X không. không. 1. 1. Nếu có sẽ đưa ra chỉ số của khoá ấy Nếu có sẽ đưa ra chỉ số của khoá ấy 2. 2. Nếu không nó sẽ đưa ra giá trị Nếu không nó sẽ đưa ra giá trị 0 0 . . 3. 3. Trong giải thuật này có sử dụng 1 khoá phụ Trong giải thuật này có sử dụng 1 khoá phụ k k n+1 n+1 mà giá mà giá trị của nó chính là trị của nó chính là X X . . 7 GT tìmkiếm tuần tự GT tìmkiếm tuần tự Function Tuantu(X: Shortint) : Byte; Var i: Byte; Begin i := 1; k[n + 1] := X; {Tìm kiếm tuần tự} While k[i] <> X do i := i + 1; {Không tìm thấy} If i = n + 1 Then Tuantu := 0 {Tìm thấy} Else Tuantu := i; End; 8 • Tìmkiếm tuần tự (Tuantu): B1: Xác định phép toán tích cực – Là phép so sánh: k[i] <> X B2: Xác định số lần thực hiện của phép toán tích cực – Số lượng phép so sánh phụ thuộc vào tình trạng của bảng khoá (so với giá trị X). – T/h tốt nhất (min) xảy ra khi k[1] = X, số lần thực hiện phép toán tích cực là: – T/h xấu nhất (max) xảy ra khi k[n + 1] = X, nghĩa là không tìm thấy X, số lần thực hiện phép toán tích cực là: 1C min = 6 6.1.4. Phân tích đánh giá 1nC max += 9 – T/h trung bình (tb) xảy ra khi việc tìm thấy X ở mọi vị trí là đồng khả năng. Số lần thực hiện phép toán tích cực trong t/h trung bình có thể coi là: B3: Kết luận độ phức tạp của GT tìmkiếm tuần tự – T/h tốt nhất: – T/h xấu nhất và trung bình: 2 1n C tb + = )()()( nnn OT tbmax ==T Phân tích đánh giá )()( 1O min =nT 10 6.2. Tìmkiếm nhị phân 6.2. Tìmkiếm nhị phân 6.2.1. Nguyên tắc tìmkiếm 6.2.2. Giải thuật 6.2.3. Phân tích đánh giá [...]...6.2.1 Nguyên tắc tìmkiếm • • 11 Phép tìmkiếm nhị phân luôn chọn khoá “ở giữa” bảng khoá đang xét để thực hiện so sánh với khoá tìmkiếm X Nguyên tắc tìmkiếm nhị phân: – Giả sử bảng khoá đang xét là kL, …, kR thì khoá ở giữa bảng sẽ là ki với: i = L + R 2 – Tìmkiếm sẽ kết thúc nếu X = ki – Nếu X < ki tìmkiếm được thực hiện tiếp với kL, …, ki-1 – – – Nếu X > ki tìmkiếm được thực hiện... độ phức tạp của GT tìmkiếm tuần tự – T/h tốt nhất: min – T/h xấu nhất và trung bình: T (n) = O(1) Tmax (n) = Ttb (n) = O(lg n) Phân tích đánh giá 16 • Số lượng phép so sánh phụ thuộc vào X • So với tìmkiếm tuần tự, chi phí tìmkiếm nhị phân ít hơn khá nhiều Sau này ta sẽ thấy: Không có 1 phương pháp tìmkiếm nào dựa trên so sánh giá trị khoá lại có thể đạt được kết quả tốt hơn tìmkiếm nhị phân • Tuy... giản nhất 2 Trình bày nguyên tắc của phương pháp tìmkiếm tuần tự Độ phức tạp của GT tương ứng? 3 Trình bày nguyên tắc của phương pháp tìmkiếm nhị phân Độ phức tạp của GT tương ứng? • Thực hành – Cho bảng khoá cần tìm kiếm: 42 23 74 11 65 58 94 36 99 87 4 Minh hoạ quá trình tìmkiếm tuần tự với X1 = 50 và X2 = 23 5 Viết chương trình sử dụng giải thuật tìmkiếm tuần tự với 1 bảng khoá sinh ngẫu nhiên và... Tuy nhiên, trước khi sử dụng tìmkiếm nhị phân bảng khoá đã phải được sắp xếp, nghĩa là thời gian chi phí cho sắp xếp cũng phải kể đến • Nhược điểm: Nếu bảng khoá luôn biến động (bổ sung hay loại bỏ) thì chi phí cho sắp xếp lại rất nhiều Đây chính là nhược điểm của phương pháp tìmkiếm nhị phân 6.3 Câu hỏi ôn tập • 17 Lý thuyết 1 Trình bày bài toán tìmkiếm và phát biểu bài toán dạng đơn giản nhất... thuật tương tự Quá trình tìmkiếm bắt đầu với L = 1 và R = n đến khi tìm thấy X hoặc bảng khoá đang xét rỗng (không tìm thấy) 6.2.2 Giải thuật • 12 Cho bảng khoá k gồm n phần tử (0 ≤ n ≤ 250) đã được sắp xếp theo thứ tự tăng dần, các khoá và X là các số nguyên Integer được nhập từ bàn phím hoặc sinh ngẫu nhiên (bằng random) • Giải thuật tìmkiếm nhị phân sẽ thực hiện tìmkiếm trong bảng xem có khoá... • Có thể thể hiện tìmkiếm nhị phân bằng: 1 Giải thuật lặp 2 Giải thuật đệ quy GT lặp tìmkiếm nhị phân Function Nhiphan(X : Integer): Byte; Var L, R, m, vitri: Byte; Begin L := 1; R := n; vitri := 0; While L k[m] then L := m + 1; Else begin vitri := m; break; end; End; Nhiphan := vitri; End; 13 GT đệ quy tìmkiếm nhị phân Function... sử dụng giải thuật tìmkiếm tuần tự với 1 bảng khoá sinh ngẫu nhiên và X nhập từ bàn phím Câu hỏi ôn tập – 18 Cho bảng khoá cần tìm kiếm: 11 23 36 42 58 65 74 87 94 99 6 Minh hoạ quá trình tìmkiếm nhị phân với X1 = 50 và X2 = 23 7 Viết chương trình sử dụng giải thuật tìmkiếm nhị phân với 1 bảng khoá sinh ngẫu nhiên và X nhập từ bàn phím, bằng: – Giải thuật lặp – Giải thuật đệ quy - ... m := (L + R) div 2; If X < k[m] then vitri := Nhiphan(L, m – 1, X) Else If X > k[m] then vitri := Nhiphan(m + 1, R, X); Else vitri := m; End; Nhiphan := vitri; End; 14 6.2.3 Phân tích đánh giá • 15 Tìmkiếm nhị phân (Nhiphan): B1: Xác định phép toán tích cực – Là phép so sánh: L . 1 BÀI 6: TÌM KIẾM BÀI 6: TÌM KIẾM 6.1. Tìm kiếm tuần tự 6.2. Tìm kiếm nhị phân Tìm kiếm nhị phân 6.3. Câu hỏi ôn tập 2 6.1. Tìm kiếm tuần tự 6.1.1. Bài toán tìm kiếm 6.1.2 nguyên số nguyên . . Bài toán tìm kiếm 5 6.1.2. Nguyên tắc tìm kiếm • Tìm kiếm tuần tự (sequential searching) là kỹ thuật tìm Tìm kiếm tuần tự (sequential searching) là kỹ thuật tìm kiếm rất đơn. X X . . • So với tìm kiếm tuần tự, chi phí tìm kiếm nhị phân ít hơn So với tìm kiếm tuần tự, chi phí tìm kiếm nhị phân ít hơn khá nhiều. khá nhiều. Sau này ta sẽ thấy: Không có 1 phương pháp tìm kiếm nào