Trang 3
NỘI DUNG 6.1. Tìm kiếm tuần tự và tìm kiếm nhị phân 6.2. Cây nhị phân tìm kiếm 6.3. Bảng băm KHMT ĐHBKHN 3
NỘI DUNG 6.1. Tìm kiếm tuần tự và tìm kiếm nhị phân 6.2. Cây nhị phân tìm kiếm 6.3. Bảng băm KHMT ĐHBKHN 3
6.1. Tìm kiếm tuần tự và tìm kiếm nhị phân 6.1.1. Tìm kiếm tuần tự (Linear Search or Sequential Search) 6.1.2. Tìm kiếm nhị phân KHMT ĐHBKHN 4
Bài toán tìm kiếm Cho danh sách a gồm n phần tử a1, a2, ..., an và một số x. Hỏi x có mặt trong danh sách đã cho hay không? Nếu câu trả lời là khẳng định, hãy đưa ra vị trí xuất hiện của x trong dãy đã cho, nghĩa là đưa ra chỉ số i sao cho ai = x. KHMT ĐHBKHN 5
6.1.1. Tìm kiếm tuần tự current -7 9 -5 2 8 3 -4 0 1 2 3 4 5 6 • Bắt đầu từ phần tử đầu tiên, duyệt qua từng phần tử cho đến khi tìm được đích hoặc kết luận không tìm được. • Các số không cần sắp thứ tự • Làm việc được với cả danh sách móc nối (Linked Lists) Độ phức tạp: O(n) KHMT ĐHBKHN 6
Linear Search int linearSearch(float a[], int size, int target) { int i; for (i = 0; i < size; i++) { if (a[i] == target) { return i; } } return -1; } KHMT ĐHBKHN 7
Phân tích thời gian tính Cần đánh giá thời gian tính tốt nhất, tồi nhất, trung bình của thuật toán với độ dài đầu vào là n. Rõ ràng thời gian tính của thuật toán có thể đánh giá bởi số lần thực hiện phép so sánh (*) (a[i] == target) trong vòng lặp for. Nếu a[1] = target thì phép so sánh (*) phải thực hiện 1 lần. Do đó thời gian tính tốt nhất của thuật toán là (1). Nếu target không có mặt trong dãy đã cho, thì phép so sánh (*) phải thực hiện n lần. Vì thế thời gian tính tồi nhất của thuật toán là (n). KHMT ĐHBKHN 8
Phân tích thời gian tính Cuối cùng, ta tính thời gian tính trung bình của thuật toán. Nếu target tìm thấy ở vị trí thứ i của dãy (target = a[i]) thì phép so sánh (*) phải thực hiện i lần (i = 1, 2, ..., n), còn nếu target không có mặt trong dãy đã cho thì phép so sánh (*) phải thực hiện n lần. Từ đó suy ra số lần trung bình phải thực hiện phép so sánh (*) là [(1 + 2 + . . . + n) + n] /(n+1) = [n+ n(n+1)/2]/(n+1) = (n2 + 3n)/[2(n+1)] . Ta có: n/4 (n2+3n)/[2(n+1)] n Vì vậy, thời gian tính trung bình của thuật toán là (n). KHMT ĐHBKHN 9
6.1.2. Tìm kiếm nhị phân- Binary Search mid • Điều kiện: – Danh sách phải được sắp thứ tự. – Phải cho phép trực truy. Độ phức tạp: O(log n) KHMT ĐHBKHN 10
Tình huống 1: target < list[mid] target list: lower New mid upper upper Tình huống 2: list[mid] < target target list: lower mid New upper KHMT ĐHBKHN lower 11
Cài đặt trên C int binarySearch(float array[], int size, int target) { int lower = 0, upper = size - 1, mid; while (lower <= upper) { mid = (upper + lower)/2; if (array[mid] > target) { upper = mid - 1; } else if (array[mid] < target) { lower = mid + 1; } else { return mid; } Đoạn cần khảo sát } có độ dài giảm đi một nửa return -1; sau mỗi lần lặp } Độ phức tạp: O(log n) KHMT ĐHBKHN 12
NỘI DUNG 6.1. Tìm kiếm tuần tự và tìm kiếm nhị phân 6.2. Cây nhị phân tìm kiếm 6.3. Bảng băm KHMT ĐHBKHN 13
6.2. Cây nhị phân tìm kiếm Binary Search Tree 6.2.1. Định nghĩa 6.2.2. Biểu diễn cây nhị phân tìm kiếm 6.2.3. Các phép toán KHMT ĐHBKHN 14
6.2.1. Định nghĩa cây nhị phân tìm kiếm Binary Search Trees Cây nhị phân tìm kiếm (sẽ viết tắt là BST) là cây nhị phân có các tính chất sau: – Mỗi nút x (ngoài thông tin đi kèm) có các trường: • left : con trỏ đến con trái • right: con trỏ đến con phải, • parent: con trỏ đến cha (trường này là tuỳ chọn), và • key: khoá (thường giả thiết là khoá của các nút là khác nhau từng đôi, trái lại nếu có khoá trùng nhau thì cần chỉ rõ thứ tự của hai khoá trùng nhau). left key right parent KHMT ĐHBKHN 15
Tính chất BST – Tính chất BST (Binary-search-tree property): Giả sử x là gốc của một cây con: • y thuộc cây con trái của x: key(y) < key(x). • y thuộc cây con phải của x: key(y) > key(x). (Tất cả các khoá của các nút trong cây con trái (phải) của x đều nhỏ hơn (lớn hơn) khoá của x.) x Mọi nút y trong cây con trái Mọi nút y trong cây con phải đều có key(y) < key(x) đều có key(y) > key(x) KHMT ĐHBKHN 16
Các phép toán Tìm kiếm (Search) Tìm cực tiểu, cực đại (Minimum, Maximum) Kế cận sau, Kế cận trước (Predecessor, Successor) Chèn (Insert) Xoá (Delete) KHMT ĐHBKHN 18
6.2. Cây nhị phân tìm kiếm Binary Search Tree 6.2.1. Định nghĩa 6.2.2. Biểu diễn cây nhị phân tìm kiếm 6.2.3. Các phép toán Nguyễn Đức Nghĩa - Bộ môn KHMT ĐHBKHN 19
6.2.2. Biểu diễn BST key Sử dụng cấu trúc cây nhị phân (Binary Tree Structure) left 2 right NIL 2 left 1 right p left 5 right p 1 5 NULL left 3 right p left 6 right p 3 6 left 4 right p 4 KHMT ĐHBKHN 20
Hiển thị 20 trang đầu. Tải tài liệu để xem đầy đủ.
Chưa có bình luận nào. Hãy là người đầu tiên!
Bình luận (0)
Chưa có bình luận nào. Hãy là người đầu tiên!