Bài giảng Cấu trúc dữ liệu và thuật toán - Chương 3: Tìm kiếm
Số trang: 33
Loại file: pdf
Dung lượng: 246.25 KB
Lượt xem: 16
Lượt tải: 0
Xem trước 4 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Nội dung chính của chương 3 Tìm kiếm nằm trong bài giảng cấu trúc dữ liệu và thuật toán nhằm trình bày về các nội dung chính như sau: khái quát về tìm kiếm, tìm tuyến tính (Linear Search), tìm nhị phân (Binary Search)...Cùng tìm hiểu bài giảng để hiểu sâu hơn về thuật tìm kiếm.
Nội dung trích xuất từ tài liệu:
Bài giảng Cấu trúc dữ liệu và thuật toán - Chương 3: Tìm kiếm Chương 4: TÌM KIẾM (SEARCHING) Nội dung 2 1. Khái quát về tìm kiếm 2. Tìm tuyến tính (Linear Search) 3. Tìm nhị phân (Binary Search) Chương 3: Tìm kiếm Khái quát về tìm kiếm 3 Tìm kiếm là một yêu cầu rất thường xuyên trong đời sống hàng ngày cũng như trong tin học Ví dụ: Tìm kiếm một sinh viên trong lớp Tìm kiếm một tập tin, thư mục trong máy Để đơn giản ta xét bài toán tìm kiếm như sau: Cho một dãy số gồm các phần tử a1, a2, ..., an. Cho biết trong dãy này có phần tử nào có giá trị bằng X (cho trước) hay không? Chương 3: Tìm kiếm Khái quát về tìm kiếm 4 Xét hai cách tìm kiếm: Tìm kiếm tuyến tính (Linear Search) hay còn gọi là tìm kiếm tuần tự (Sequential Search) Tìm kiếm nhị phân (Binary Search) Chương 3: Tìm kiếm Nội dung 5 1. Khái quát về tìm kiếm 2. Tìm tuyến tính (Linear Search) 3. Tìm nhị phân (Binary Search) Chương 3: Tìm kiếm 2. Tìm tuyến tính (Linear Seach) 6 Ý tưởng: Bắt đầu từ phần tử đầu tiên của danh sách, so sánh lần lượt từng phần tử của danh sách với giá trị X cần tìm Nếu có phần tử bằng X, thuật toán dừng lại (thành công) Nếu đến cuối danh sách mà không có phần tử nào bằng X, thuật toán dừng lại (không thành công) If we find a match, the search terminates successfully by returning the index of the element If the end of the list is encountered without a match, the search terminates unsuccessfully Chương 3: Tìm kiếm 2. Tìm tuyến tính (Linear Seach) 7 Thuật toán: B1: i = 0 ; // bắt đầu từ phần tử đầu tiên B2: so sánh A[i] với X, có 2 khả năng : A[i] = X : Tìm thấy. Dừng A[i] ≠ X : Sang B3 B3: i=i+1 // Xét phần tử tiếp theo trong mảng Nếu i=n : Hết mảng, không tìm thấy. Dừng Ngược lại: lặp lại B2 Chương 3: Tìm kiếm 2. Tìm tuyến tính (Linear Seach) 8 Ví dụ: 12 2 8 5 1 X=8 X=8 i=0 12 2 8 5 1 X=8 i=1 12 2 8 5 1 X=8 i=2 12 2 8 5 1 Dừng Chương 3: Tìm kiếm 2. Tìm tuyến tính (Linear Seach) 9 5 Vị trí = 2 Khóa tìm 0 1 2 3 4 5 6 7 7 13 5 21 6 2 8 15 Tìm thành công Số lần so sánh: 3 Chương 3: Tìm kiếm 2. Tìm tuyến tính (Linear Seach) 10 9 Khóa tìm 0 1 2 3 4 5 6 7 7 13 5 21 6 2 8 15 Không tìm thấy Số lần so sánh: 8 Chương 3: Tìm kiếm 2. Tìm tuyến tính (Linear Seach) 11 void lsearch (int list[], int n, int key) { int flag = 0; // giả sử lúc đầu chưa tìm thấy for(int i=0; i 2. Tìm tuyến tính (Linear Seach) 12 int lsearch(int list[], int n, int key) { int find= -1; for(int i=0; i13 Phân tích, đánh giá thuật toán Trường hợp Số lần so sánh Giải thích Tốt nhất 1 Phần tử đầu tiên có giá trị x Xấu nhất n+1 Phần tử cuối cùng có giá trị x Giả sử xác suất các phần tử trong mảng Trung bình (n+1)/2 nhận giá trị x là như nhau. Vậy giải thuật tìm tuyến tính có độ phức tạp tính toán cấp n: T(n) = O(n) Chương 3: Tìm kiếm Tìm tuyến tính (Linear Seach) 14 Phân tích, đánh giá thuật toán: Trường hợp Số lần so sánh Giải thích Tốt nhất 1 Phần tử đầu tiên có giá trị x Xấu nhất n+1 Phần tử cuối cùng có giá trị x Giả sử xác suất các phần tử trong mảng Trung bình (n+1)/2 nhận giá trị x là như nhau. Chương 3: Tìm kiếm Nội dung 15 1. Khái quát về tìm kiếm 2. Tìm tuyến tính (Linear Search) 3. Tìm nhị phân (Binary Search) Chương 3: Tìm kiếm 3. Tìm nhị phân (Binary Seach) 16 Điều kiện: Danh sách phải được sắp xếp trước Ý tưởng: So sánh giá trị muốn tìm X với phần tử nằm ở vị trí giữa của danh sách: Nếu bằng, tìm kiếm dừng lại (thành công) Nếu X lớn hơn thì tiếp tục tìm kiếm ở phần danh sách bên phải phần tử giữa Nếu X nhỏ hơn thì tiếp tục tìm kiếm ở phần danh sách bên trái phần tử giữa We compare the element with the element placed approximately in the middle of the list If a match is found, the search terminates successfully Otherwise, we continue the search for the key ...
Nội dung trích xuất từ tài liệu:
Bài giảng Cấu trúc dữ liệu và thuật toán - Chương 3: Tìm kiếm Chương 4: TÌM KIẾM (SEARCHING) Nội dung 2 1. Khái quát về tìm kiếm 2. Tìm tuyến tính (Linear Search) 3. Tìm nhị phân (Binary Search) Chương 3: Tìm kiếm Khái quát về tìm kiếm 3 Tìm kiếm là một yêu cầu rất thường xuyên trong đời sống hàng ngày cũng như trong tin học Ví dụ: Tìm kiếm một sinh viên trong lớp Tìm kiếm một tập tin, thư mục trong máy Để đơn giản ta xét bài toán tìm kiếm như sau: Cho một dãy số gồm các phần tử a1, a2, ..., an. Cho biết trong dãy này có phần tử nào có giá trị bằng X (cho trước) hay không? Chương 3: Tìm kiếm Khái quát về tìm kiếm 4 Xét hai cách tìm kiếm: Tìm kiếm tuyến tính (Linear Search) hay còn gọi là tìm kiếm tuần tự (Sequential Search) Tìm kiếm nhị phân (Binary Search) Chương 3: Tìm kiếm Nội dung 5 1. Khái quát về tìm kiếm 2. Tìm tuyến tính (Linear Search) 3. Tìm nhị phân (Binary Search) Chương 3: Tìm kiếm 2. Tìm tuyến tính (Linear Seach) 6 Ý tưởng: Bắt đầu từ phần tử đầu tiên của danh sách, so sánh lần lượt từng phần tử của danh sách với giá trị X cần tìm Nếu có phần tử bằng X, thuật toán dừng lại (thành công) Nếu đến cuối danh sách mà không có phần tử nào bằng X, thuật toán dừng lại (không thành công) If we find a match, the search terminates successfully by returning the index of the element If the end of the list is encountered without a match, the search terminates unsuccessfully Chương 3: Tìm kiếm 2. Tìm tuyến tính (Linear Seach) 7 Thuật toán: B1: i = 0 ; // bắt đầu từ phần tử đầu tiên B2: so sánh A[i] với X, có 2 khả năng : A[i] = X : Tìm thấy. Dừng A[i] ≠ X : Sang B3 B3: i=i+1 // Xét phần tử tiếp theo trong mảng Nếu i=n : Hết mảng, không tìm thấy. Dừng Ngược lại: lặp lại B2 Chương 3: Tìm kiếm 2. Tìm tuyến tính (Linear Seach) 8 Ví dụ: 12 2 8 5 1 X=8 X=8 i=0 12 2 8 5 1 X=8 i=1 12 2 8 5 1 X=8 i=2 12 2 8 5 1 Dừng Chương 3: Tìm kiếm 2. Tìm tuyến tính (Linear Seach) 9 5 Vị trí = 2 Khóa tìm 0 1 2 3 4 5 6 7 7 13 5 21 6 2 8 15 Tìm thành công Số lần so sánh: 3 Chương 3: Tìm kiếm 2. Tìm tuyến tính (Linear Seach) 10 9 Khóa tìm 0 1 2 3 4 5 6 7 7 13 5 21 6 2 8 15 Không tìm thấy Số lần so sánh: 8 Chương 3: Tìm kiếm 2. Tìm tuyến tính (Linear Seach) 11 void lsearch (int list[], int n, int key) { int flag = 0; // giả sử lúc đầu chưa tìm thấy for(int i=0; i 2. Tìm tuyến tính (Linear Seach) 12 int lsearch(int list[], int n, int key) { int find= -1; for(int i=0; i13 Phân tích, đánh giá thuật toán Trường hợp Số lần so sánh Giải thích Tốt nhất 1 Phần tử đầu tiên có giá trị x Xấu nhất n+1 Phần tử cuối cùng có giá trị x Giả sử xác suất các phần tử trong mảng Trung bình (n+1)/2 nhận giá trị x là như nhau. Vậy giải thuật tìm tuyến tính có độ phức tạp tính toán cấp n: T(n) = O(n) Chương 3: Tìm kiếm Tìm tuyến tính (Linear Seach) 14 Phân tích, đánh giá thuật toán: Trường hợp Số lần so sánh Giải thích Tốt nhất 1 Phần tử đầu tiên có giá trị x Xấu nhất n+1 Phần tử cuối cùng có giá trị x Giả sử xác suất các phần tử trong mảng Trung bình (n+1)/2 nhận giá trị x là như nhau. Chương 3: Tìm kiếm Nội dung 15 1. Khái quát về tìm kiếm 2. Tìm tuyến tính (Linear Search) 3. Tìm nhị phân (Binary Search) Chương 3: Tìm kiếm 3. Tìm nhị phân (Binary Seach) 16 Điều kiện: Danh sách phải được sắp xếp trước Ý tưởng: So sánh giá trị muốn tìm X với phần tử nằm ở vị trí giữa của danh sách: Nếu bằng, tìm kiếm dừng lại (thành công) Nếu X lớn hơn thì tiếp tục tìm kiếm ở phần danh sách bên phải phần tử giữa Nếu X nhỏ hơn thì tiếp tục tìm kiếm ở phần danh sách bên trái phần tử giữa We compare the element with the element placed approximately in the middle of the list If a match is found, the search terminates successfully Otherwise, we continue the search for the key ...
Tìm kiếm theo từ khóa liên quan:
Tìm tuyến tính Tìm nhị phân Khái quát tìm kiếm Cấu trúc dữ liệu Cấu trúc giải thuật Thành phần dữ liệuGợi ý tài liệu 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 318 0 0 -
Giải thuật và cấu trúc dữ liệu
305 trang 162 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 150 0 0 -
Tập bài giảng Thực hành kỹ thuật lập trình
303 trang 143 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 139 0 0 -
Tài liệu tham khảo: Cấu trúc dữ liệu và giải thuật
229 trang 124 0 0 -
Thiết kế hệ thống thông tin - Tổng quan hệ thống thông tin
86 trang 104 0 0 -
Lập trình C - Cấu trúc dữ Liệu
307 trang 74 0 0 -
Ứng dụng và cài đặt cấu trúc dữ liệu bằng C: Phần 1
338 trang 73 0 0 -
49 trang 71 0 0