Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 85 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
85
Dung lượng
1,46 MB
Nội dung
Ch ng TÌM KI M N I DUNG 6.1 Tìm ki m tu n t tìm ki m nh phân 6.2 Cây nh phân tìm ki m 6.3 Cây AVL 6.4 Tìm ki m xâu m u 6.5 B ng b m Nguy n c Ngh a - B mơn KHMT HBKHN 6.1 Tìm ki m tu n t 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 Nguy n c Ngh a - B mơn KHMT HBKHN Bài tốn tìm ki m Cho danh sách a g m n ph n t a1, a2, , an m t s x H i x có m t danh sách cho hay không? N u câu tr l i kh ng đ nh, đ a v trí xu t hi n c a x dãy cho, ngh a đ a ch s i cho = x Nguy n c Ngh a - B mơn KHMT HBKHN 6.1.1 Tìm ki m tu n t current -7 -5 -4 • B t đ u t ph n t đ u tiên, t qua t ng ph n t cho đ n 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) Nguy n c Ngh a - B môn KHMT HBKHN 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; } Nguy n c Ngh a - B mơn KHMT HBKHN 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 n Rõ ràng th i gian tính c a thu t tốn có th đánh giá b i s l n th c hi n phép so sánh (*) (a[i] == target) vòng l p for N u a[1] = target phép so sánh (*) ph i th c hi n l n Do th i gian tính t t nh t c a thu t toán (1) N u target khơng có m t dãy cho, 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 (n) Nguy n c Ngh a - B môn KHMT HBKHN 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 tốn N u target tìm th y v trí th i c a dãy (target = a[i]) phép so sánh (*) ph i th c hi n i l n (i = 1, 2, , n), n u target khơng có m t dãy cho phép so sánh (*) ph i th c hi n n l n T suy s l n trung bình ph i th c hi n phép so sánh (*) [(1 + + + 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 tốn (n) Nguy n c Ngh a - B môn KHMT HBKHN 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) Nguy n c Ngh a - B môn KHMT HBKHN Tình hu ng 1: target < list[mid] target list: lower New upper mid upper Tình hu ng 2: list[mid] < target target list: lower Nguy n c Ngh a - B môn KHMT mid HBKHN New lower upper 10 Cài đ t C int binarySearch(float array[], int size, int target) { int lower = 0, upper = size - 1, mid; } while (lower target) { upper = mid - 1; } else if (array[mid] < target) { lower = mid + 1; } else o n c n kh o sát { return mid; } } có đ dài gi m m return -1; sau m i l n l p tn a ph c t p: O(log n) Nguy n c Ngh a - B mơn KHMT Ví d minh ho • • • • Nguy n 11 HBKHN ng d ng BS Dãy c p ba B g m ba s nguyên (a1, a2, a3) đ c g i m t c p s c ng t ng n u nh : a2 – a1 = a3 – a2 a2 – a1 > B ba (a1, a2, a3) đ c g i tr c b ba (b1, b2, b3) th t t n n u nh m t ba u ki n sau đ c th c hi n: 1) a1 < b1; 2) a1 = b1 a2 < b2; 3) a1 = b1 , a2 = b2 a3 < b3 Dãy s nguyên c1, c2, …, cn ( | ci | < 231, i = 1, 2, …, n) đ c g i dãy c p ba n u nh có th tìm đ c ba s h ng c a đ l p thành m t b ba c p s c ng t ng Ví d : Dãy 3, 1, 5, 2, -7, 0, -1 m t dãy c p ba, ch a b ba c p s c ng t ng, ch ng h n (1, 3, 5) hay (-7, -1, 5) B ba (-7, -1, 5) b ba c p s c ng t ng đ u tiên theo th t t n s b ba c p s c ng t ng c a dãy cho Yêu c u: Hãy ki m tra xem dãy s nguyên cho tr c có ph i dãy c p ba hay không N u câu tr l i kh ng đ nh đ a b ba c p s c ng t ng đ u tiên th t t n c Ngh a - B môn KHMT HBKHN 12 Thu t tốn tr c ti p • S p x p dãy a[1 n] theo th t khơng gi m • Duy t t t c b ba a[i], a[j], a[k],