
Bài giảng Cấu trúc dữliệu và giải thuật: Các chiến lược tìm kiếm - Đậu Ngọc Hà Dương
Thông tin tài liệu:
Nội dung trích xuất từ tài liệu:
Bài giảng Cấu trúc dữliệu và giải thuật: Các chiến lược tìm kiếm - Đậu Ngọc Hà DươngGiảng viên:Đậu Ngọc Hà Dương2 Giới thiệu Tìm kiếm tuần tự Tìm kiếm nhị phân Tìm kiếm theo bảng băm Tổng kết Cấu trúc dữ liệu và giải thuật – HCMUS 20113 Thao tác tìm kiếm rất phổ biến trong cuộc sống hàng ngày. Tìm kiếm hồ sơ, tập tin. Tìm kiếm tên người trong danh sách. … Cấu trúc dữ liệu và giải thuật – HCMUS 20114 Có nhiều loại: Tìm kiếm tuần tự (Sequential/ Linear Search) Tìm kiếm nhị phân (Binary Search) … Mục tiêu: Tìm hiểu về 2 thuật toán tìm kiếm cơ bản. Phân tích thuật toán để lựa chọn thuật toán phù hợp khi áp dụng vào thực tế. Cấu trúc dữ liệu và giải thuật – HCMUS 20115 Sequential Search Linear Search Cấu trúc dữ liệu và giải thuật – HCMUS 20116 Input: Dãy A, n phần tử Giá trị x cần tìm Output: Nếu x xuất hiện trong A: trả về vị trí xuất hiện đầu tiên của x Nếu không: trả về n hoặc -1 Thuật toán: Vétcạn (exhaustive) Dùng lính canh (sentinel) Cấu trúc dữ liệu và giải thuật – HCMUS 20117 Thuật toán: Lần lượt so sánh x với các phần tử của mảng A cho đến khi gặp được phần tử cần tìm, hoặc hết mảng. Ví dụ: A = {1, 25, 6, 5, 2, 37, 40}, x = 6 x = 6 1 25 6 5 2 37 40 x = 6 1 25 6 5 2 37 40 x = 6 1 25 6 5 2 37 40 Dừng8 Thuật toán: LinearExhaustive • Bước 1. Khởi tạo biến chỉ số: i = 0 • Bước 2. Kiểm tra xem có thực hiện hết mảng hay chưa: So sánh i và n • Nếu chưa hết mảng (i < n), sang bước 3. • Nếu đã hết mảng (i >= n), thông báo không tìm thấy giá trị x cần tìm. • Bước 3. So sánh giá trị a[i] với giá trị x cần tìm • Nếu a[i] bằng x: Kết thúc chương trình và thông báo đã tìm thấy x. • Nếu a[i] khác x, tăng i thêm 1 và quay lại bước 2. Cấu trúc dữ liệu và giải thuật – HCMUS 20119 Nhận xét: Phép so sánh là phép toán sơ cấp được dùng trong thuật toán. Suy ra, số lượng các phép so sánh sẽ là thước đo độ phức tạp của thuật toán. Mỗi vòng lặp có 2 điều kiện cần kiểm tra: Kiểm tra cuối mảng (bước 2) Kiểm tra phần tử hiện tại có bằng x? (bước 3) Cấu trúc dữ liệu và giải thuật – HCMUS 201110 Trường hợp x nằm ở 2 biên của mảng A: rất hiếm khi xuất hiện. Ước lượng số vòng lặp trung bình sẽ hữu ích hơn. Số phép so sánh trung bình: 2(1+2+ … + n)/n = n+1 => Số phép so sánh tăng/giảm tuyến tính theo số phần tử Cấu trúc dữ liệu và giải thuật – HCMUS 201111 Vậy độ phức tạp của thuật toán là: Tốtnhất: O(1). Trung bình: O(n). Xấu nhất: O(n). Cấu trúc dữ liệu và giải thuật – HCMUS 201112 Trong thuật toán vét cạn, có 2 điều kiện được kiểm tra. Có thể bỏ việc kiểm tra điều kiện cuối mảng bằng cách dùng “lính canh”. Lính canh là phần tử có giá trị bằng với phần tử cần tìm và đặt ở cuối mảng. Cấu trúc dữ liệu và giải thuật – HCMUS 201113 Ví dụ: A = {1, 25, 5, 2, 37}, x = 6 x = 6 x = 6 (a) 1 25 5 2 37 6 (d) 1 25 5 2 37 6 x = 6 x = 6 (b) 1 25 5 2 37 6 (e) 1 25 5 2 37 6 x = 6 x = 6 (c) 1 25 5 2 37 6 (f) 1 25 5 2 37 6 return 5; Cấu trúc dữ liệu và giải thuật – HCMUS 201114 Thuật toán: LinearSentinel • Bước 1. Khởi tạo biến chỉ số: i = 0 • Bước 2. So sánh giá trị a[i] với giá trị x cần tìm • Nếu a[i] bằng x: • Nếu i < n: Kết thúc chương trình và thông báo đã tìm thấy x. • Nếu i >= n: Thông báo không tìm thấy x trong mảng. • Nếu a[i] khác x, tăng i thêm 1 và quay lại bước 2. Cấu trúc dữ liệu và giải thuật – HCMUS 201115 Thực nghiệm cho thấy trong trường hợp n lớn, thời gian tìm kiếm giảm khi dùng phương pháp lính canh. Vớin =15 ...
Tìm kiếm theo từ khóa liên quan:
Bài giảng Cấu trúc dữliệu và giải thuật Cấu trúc dữliệu và giải thuật Các chiến lược tìm kiếm Tìm kiếm tuần tự Tìm kiếm nhị phân Tìm kiếm theo bảng nămTài liệu có liên quan:
-
Giáo trình Lập trình cơ bản với C++ - Phan 2
69 trang 218 0 0 -
Tài liệu tham khảo: Cấu trúc dữ liệu và giải thuật
229 trang 148 0 0 -
Bài giảng Thuật toán ứng dụng: Chia để trị
31 trang 52 0 0 -
16 trang 37 0 0
-
Giáo trình Kỹ thuật lập trình: Phần 2
240 trang 27 0 0 -
Bài giảng Thuật toán ứng dụng: Chia để trị
57 trang 27 0 0 -
Cây đỏ đen – Lý thuyết và mô phỏng
35 trang 27 0 0 -
13 trang 26 0 0
-
Bài giảng Cấu trúc dữliệu và giải thuật: Các thuật toán sắp xếp - Đậu Ngọc Hà Dương
46 trang 26 0 0 -
Bài giảng Cấu trúc dữliệu và giải thuật: Ôn tập - Đậu Ngọc Hà Dương
44 trang 25 0 0 -
Giáo trình Cấu trúc dữ liệu và thuật toán: Phần 2 (In năm 2013)
179 trang 25 0 0 -
Bài giảng Cấu trúc dữ liệu và giải thuật (2013): Phần 2
94 trang 24 0 0 -
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Trường ĐH Văn Lang
26 trang 24 0 0 -
Bài giảng Cấu trúc dữliệu và giải thuật: Ôn tập kiến thức - Đậu Ngọc Hà Dương
19 trang 24 0 0 -
Bài giảng Cấu trúc dữ liệu và giải thuật (Data structures and Algorithms): Chương 3 - Ngô Công Thắng
19 trang 23 0 0 -
Giáo trình giải thuật - tìm kiếm và sắp xếp
0 trang 23 0 0 -
Bài giảng Cấu trúc dữliệu và giải thuật: Đối sánh chuỗi - Đậu Ngọc Hà Dương
41 trang 22 0 0 -
Thuật toán và cấu trúc dữ liệu: Phần 2
179 trang 22 0 0 -
Giáo trình Cấu trúc dữ liệu và giải thuật - CĐ Nghề Cơ điện Hà Nội
94 trang 21 0 0 -
Bài giảng Lập trình C cơ bản: Tuần 7
15 trang 21 0 0