Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 5: Các chiến lược tìm kiếm
Số trang: 54
Loại file: pdf
Dung lượng: 2.17 MB
Lượt xem: 12
Lượt tải: 0
Xem trước 6 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Bài giảng "Cấu trúc dữ liệu và giải thuật - Chương 5: Các chiến lược tìm kiếm" cung cấp cho người học các kiến thức: Giới thiệu các thao tác tìm kiếm phổ biến trong cuộc sống hàng ngày, các thuật toán tìm kiếm, tìm kiếm trình tự, thuật toán lính canh, tìm kiếm nhị phân và các thuật toán tìm kiếm nhị phân. Mời các bạn cùng tham khảo nội dung chi tiết.
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 - Chương 5: Các chiến lược tìm kiếmGiảng viên:Văn Chí Nam – Nguyễn Thị Hồng Nhung – Đặng Nguyễn Đức Tiến2 Giới thiệu Tìm kiếm tuần tự Tìm kiếm nhị phân Tổng kết Cấu trúc dữ liệu và giải thuật – HCMUS 20133 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 20134 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 20135 Sequential Search Linear Search Cấu trúc dữ liệu và giải thuật – HCMUS 20136 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 20137 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ừng Cấu trúc dữ liệu và giải thuật – HCMUS 20138 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 20139 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 201310 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 201311 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 201312 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 201313 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 201314 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 201315 Thực nghiệm cho thấy trong trường hợp n lớn, thời gia ...
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 - Chương 5: Các chiến lược tìm kiếmGiảng viên:Văn Chí Nam – Nguyễn Thị Hồng Nhung – Đặng Nguyễn Đức Tiến2 Giới thiệu Tìm kiếm tuần tự Tìm kiếm nhị phân Tổng kết Cấu trúc dữ liệu và giải thuật – HCMUS 20133 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 20134 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 20135 Sequential Search Linear Search Cấu trúc dữ liệu và giải thuật – HCMUS 20136 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 20137 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ừng Cấu trúc dữ liệu và giải thuật – HCMUS 20138 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 20139 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 201310 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 201311 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 201312 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 201313 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 201314 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 201315 Thực nghiệm cho thấy trong trường hợp n lớn, thời gia ...
Tìm kiếm theo từ khóa liên quan:
Cấu trúc dữ liệu Bài toán giải thuật Chiến lược tìm kiếm Thuật toán tìm kiếm Tìm kiếm trình tự Tìm kiếm nhị phânTài liệu có liên quan:
-
Đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (Data structures and algorithms)
10 trang 360 0 0 -
Giáo trình Toán rời rạc: Phần 1 - Nguyễn Gia Định
67 trang 244 0 0 -
Giáo trình Lập trình cơ bản với C++ - Phan 2
69 trang 218 0 0 -
Giải thuật và cấu trúc dữ liệu
305 trang 187 0 0 -
Bài giảng Phân tích thiết kế phần mềm: Chương 1 - Trường ĐH Ngoại ngữ - Tin học TP.HCM
64 trang 175 0 0 -
Tài liệu tham khảo: Cấu trúc dữ liệu và giải thuật
229 trang 149 0 0 -
Tập bài giảng Thực hành kỹ thuật lập trình
303 trang 146 0 0 -
Giáo trình Cấu trúc dữ liệu và thuật toán (Tái bản): Phần 1
152 trang 144 0 0 -
Lập trình C - Cấu trúc dữ Liệu
307 trang 110 0 0 -
Ứng dụng và cài đặt cấu trúc dữ liệu bằng C: Phần 1
338 trang 104 0 0