Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 32 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
32
Dung lượng
411,53 KB
Nội dung
ĐẠI HỌC QUỐC GIA TPHCM TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN CẤUTRÚCDỮLIỆU VÀ GIẢI THUẬT CHƯƠNG II TÌM KIẾM VÀ SẮP XẾP Nguyễn Trọng Chỉnh chinhnt@uit.edu.vn TÌM KIẾM VÀ SẮP XẾP NHU CẦU TÌM KIẾM VÀ SẮP XẾP GIẢI THUẬT TÌM KIẾM GIẢI THUẬT SẮP XẾP TÌM KIẾM VÀ SẮP XẾP NHU CẦU TÌM KIẾM VÀ SẮP XẾP - Tìm kiếm để tra cứu thông tin Ví dụ: tra từ điển, xem thông tin hàng hóa, tìm kiếm tài liệu, - Tìm kiếm để giải vấn đề Ví dụ: suy diễn tự động - Việc tìm kiếm có hiệu tập hợp có thứ tự GIẢI THUẬT TÌM KIẾM KHÁI NIỆM TÌM KIẾM TUYẾN TÍNH TÌM KIẾM NHỊ PHÂN PHẦN TỬ CẦM CANH GIẢI THUẬT TÌM KIẾM KHÁI NIỆM Tìm kiếm thao tác duyệt toàn tập hợp để xác định phần tử tập hợp thỏa tính chất b Ví dụ: a 1 b b GIẢI THUẬT TÌM KIẾM KHÁI NIỆM Khóa trường cấutrúc sử dụng để tính toán trình tìm kiếm xếp Ví dụ 1: giả sử có cấutrúc struct MayTinh { int maso; char tenmay[20]; int dongia; }; Trường dongia gọi khóa dùng để tính toán tìm kiếm xếp GIẢI THUẬT TÌM KIẾM TÌM KIẾM TUYẾN TÍNH (Linear Search) Tìm kiếm tuyến tính tìm kiếm giá trị khóa x tập hợp chưa có thứ tự cách duyệt phần tử tập hợp để xác định phần tử có giá trị khóa x • Ví dụ 2: tìm phần tử có giá trị tập hợp {1, 2, 9, 4, 3, 5, 7} GIẢI THUẬT TÌM KIẾM TÌM KIẾM TUYẾN TÍNH • Giải thuật: Giả sử n phần tử tập hợp A đánh số thứ tự từ đến n-1, tìm phần tử có giá trị khóa x - Bước 1: i - Bước 2: Nếu i < n qua bước 3, ngược lại qua bước - Bước 3: Nếu A[i] == x qua bước - Bước 4: i i + qua bước - Bước 5: Nếu i < n tìm thấy, ngược lại không tìm thấy - Bước 6: Kết thúc GIẢI THUẬT TÌM KIẾM TÌM KIẾM TUYẾN TÍNH Lưu đồ: Bắt đầu i0 i x rm-1 lm+1 20 GIẢI THUẬT TÌM KIẾM TÌM KIẾM NHỊ PHÂN l=0 m=3 r=6 x=3 l=0 m=1 r=2 l=2 m=2 r=2 5 x=3 4 A[m] = = x x=3 21 GIẢI THUẬT TÌM KIẾM TÌM KIẾM NHỊ PHÂN • Cài đặt int BinarySearch(int *A, int n, int x) { int l = 0, r = n-1, m; { m = (l + r) / 2; if (x == A[m]) return m; // Tìm thấy else if (x < A[m]) r = m - 1; else l = m + 1; }while (l