Bài giảng cấu trúc dữ liệu thuật toán chương 6 nguyễn đức nghĩa

85 261 0
Bài giảng cấu trúc dữ liệu thuật toán  chương 6   nguyễn đức nghĩa

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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],

Ngày đăng: 04/12/2015, 17:49

Tài liệu cùng người dùng

Tài liệu liên quan