1. Trang chủ
  2. » Công Nghệ Thông Tin

Cấu trúc dữ liệu - Phần 3

37 6 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 37
Dung lượng 734,72 KB

Nội dung

Tài liệu tham khảo bài giảng môn Cấu trúc dữ liệu - Phần 3 Tìm kiếm và sắp xếp

12/6/2010 Tìm ki m s p x p GVGD: Tr ng Ph cH i LOGO N i dung Bài tốn tìm ki m s p x p M t s ph ng pháp tìm ki m M t s ph ng pháp s p x p Bài tốn tìm ki m s p x p  Tìm ki m s p x p toán r t kinh n tin h c  Tìm ki m thao tác đ h th ng l u tr   Tra t c th c hi n nhi u nh t qu n lý d li u n, tìm ki m sinh viên, tìm ki m khách hàng, … Thao tác tìm ki m s th c hi n hi u qu d ch c theo m t tr t t li u đ ct  S p x p d li u c ng yêu c u c n ph i có h th ng thơng tin qu n lý, … 12/6/2010 Bài tốn tìm ki m s p x p  Bài tốn tìm ki m  Cho m t t p g m N ph n t d li u Cho bi t s t n t i ho c ch v trí xu t hi n c a m t ph n t v i thơng tin xác đ nh đ c cho tr c  Bài toán s p x p  Cho m t t p g m N ph n t d li u S p x p ph n t d li u có th t (t ng ho c gi m d n) theo m t tiêu chí cho tr c Bài tốn tìm ki m s p x p  Tính hi u qu c a ph ng pháp tìm ki m s p x p ph thu c vào tính ch t c a CTDL  Các ph ng pháp tìm ki m s p x p c ng ph thu c vào d li u l u tr b nh hay b nh  Các gi i thu t đ c trình bày dành cho d tr b nh li u l u N i dung Bài tốn tìm ki m s p x p M t s ph ng pháp tìm ki m M t s ph ng pháp s p x p 12/6/2010 Bài tốn tìm ki m  Bài tốn Cho m ng chi u A g m N ph n t nguyên Cho bi t s nguyên x có t n t i A hay khơng? N u có cho bi t v trí xu t hi n c a x A   Input: M ng A g m N ph n t  Ouput:   nguyên, s nguyên x p ≥ v trí xu t hi n c a x A p < n u x không t n t i A Tìm ki m tu n t Ýt   ng Xét l n l t t ng ph n t tồn b khơng gian tìm ki m đ tìm ph n t th a tiêu chí ho c khơng tìm th y ph n t th a tiêu chí Thao tác d ng l i tìm th y ph n t tiêu chí ho c xét h t t t c ph n t đ u tiên th a Tìm ki m tu n t  Gi i thu t B tđ u N, A[0], A[1], , A[N-1], x i=0 F T i i, A[j] ≥ A[i]) Xét t t c c p ph n t c a dãy, n u ph n t h n ph n t đ ng sau hốn v chúng  đ ng tr cl n i < j, n u A[i] > A[j] đ i ch A[i] A[j] 28 Ph ng pháp đ i ch tr c ti p  Gi i thu t  B c 1: đ t i =  B c 2: Xét t t c v trí j > i   B N u A[i] > A[j] đ i ch A[i] A[j] c 3: đ t i = i +  N u i < N – quay v b  Ng c2 c l i k t thúc 29 12/6/2010 Ph ng pháp đ i ch tr c ti p  Minh h a i=0 10 19 10 19 10 19 3 31 Ph ng pháp đ i ch tr c ti p  Minh h a i=1 10 19 10 19 10 19 10 19 3 32 Ph ng pháp đ i ch tr c ti p  Minh h a i=2 10 19 10 19 10 19 3 10 19 4 33 10 12/6/2010 Ph  ng pháp Shell Sort ánh giá  M t s dãy đ    c đ ngh Knuth đ ngh k = log3N – hi = 3.hi-1 + 1, ch ng h n 1, 4, 13, 40, 127, … Marcin Ciura đ 1750, … Sedgewick đ 16577, … ngh 1, 4, 10, 23, 57, 132, 301, 701, ngh 1, 8, 23, 77, 281, 1073, 4193, 75 Ph ng pháp Heap Sort Ýt   ng T n d ng thơng tin có đ c trình s p x p b tr c cho thao tác th c hi n b c ti p theo c Tìm c u trúc d li u cho phép tích l y thơng tin v vi c so sánh ph n t q trình s p x p  B trí ph n t phân theo quan h so sánh d ng nh 76 Ph ng pháp Heap Sort  Minh h a  Xem dãy có d ng nh phân 10 19 78 23 12/6/2010 Ph ng pháp Heap Sort nh ngh a Heap   M t dãy ph n t A[l], A[l + 1], …, A[r] (l < r) t o thành m t heap n u th a u ki n  i  [l, r], A[i] ≥ A[2*i + 1] A[i] ≥ A[2*i + 2] i  2*i + 2*i + Các c p ph n t (A[i], A[2*i + 1]) (A[i], A[2*i + 2]) đ c g i c p ph n t liên đ i 79 Ph ng pháp Heap Sort  Các tính ch t c a Heap    N u A[l], A[l + 1], …, A[r] t o thành m t heap lo i b m t s ph n t đ u dãy v n cịn th a heap N u A[l], A[l + 1], …, A[r] t o thành m t heap A[l] (ph n t đ u heap) ph n t l n nh t M i dãy A[l], A[l+1], …, A[r] v i r < 2*l + m t heap 80 Ph ng pháp Heap Sort  Gi i thu t  Giai đo n 1: T o heap t  Giai đo n 2:    B dãy ban đ u c 1: Hoán v ph n t B c 2: Lo i ph n t l i thành heap đ u cu i heap cu i kh i heap Hi u ch nh dãy B c 3: N u heap ph n t Ng c l i d ng gi i thu t quay v b c 81 24 12/6/2010 Ph ng pháp Heap Sort  Minh h a Giai đo n 1: Hi u ch nh dãy đ t o thành heap  10 19 0 10 19 6 3 7 97 Ph ng pháp Heap Sort  Minh h a Giai đo n 2:  B c 1: Hoán v ph n t  đ u cu i heap 19 0 10 10 6 6 19 7 98 Ph ng pháp Heap Sort  Minh h a Giai đo n 2:  B c 2: Lo i ph n t cu i kh i heap hi u ch nh dãy l i thành heap  10 0 10 6 3 6 19 19 7 99 25 12/6/2010 Ph ng pháp Heap Sort  Minh h a Giai đo n 2:  B c 1: Hoán v ph n t  đ u cu i heap 10 0 7 4 10 6 19 19 7 100 Ph ng pháp Heap Sort  Minh h a Giai đo n 2:  B c 2: Lo i ph n t cu i kh i heap hi u ch nh dãy l i thành heap  0 6 10 10 6 19 19 7 101 Ph ng pháp Heap Sort  Minh h a Giai đo n 2:  B c 1: Hoán v ph n t  đ u cu i heap 0 6 10 10 6 19 19 7 102 26 12/6/2010 Ph ng pháp Heap Sort  Minh h a Giai đo n 2:  B c 2: Lo i ph n t cu i kh i heap hi u ch nh dãy l i thành heap  0 1 10 10 6 19 19 7 103 Ph ng pháp Heap Sort  Minh h a Giai đo n 2:  B c 1: Hoán v ph n t  đ u cu i heap 0 4 1 10 10 6 19 19 7 104 Ph ng pháp Heap Sort  Minh h a Giai đo n 2:  B c 2: Lo i ph n t cu i kh i heap hi u ch nh dãy l i thành heap  0 1 10 10 6 19 19 7 105 27 12/6/2010 Ph ng pháp Heap Sort  Minh h a Giai đo n 2:  B c 1: Hoán v ph n t  đ u cu i heap 0 3 1 2 10 10 6 19 19 7 106 Ph ng pháp Heap Sort  Minh h a Giai đo n 2:  B c 2: Lo i ph n t cu i kh i heap hi u ch nh dãy l i thành heap  0 2 1 10 10 6 19 19 7 107 Ph ng pháp Heap Sort  Minh h a Giai đo n 2:  B c 1: Hoán v ph n t  đ u cu i heap 0 2 10 10 6 19 19 7 108 28 12/6/2010 Ph ng pháp Heap Sort  Minh h a Giai đo n 2:  B c 2: Lo i ph n t cu i kh i heap hi u ch nh dãy l i thành heap  0 1 10 10 6 19 19 7 109 Ph ng pháp Heap Sort  Minh h a Giai đo n 2:  B c 1: Hoán v ph n t  đ u cu i heap 0 2 10 10 6 19 19 7 110 Ph ng pháp Heap Sort  Minh h a  Giai đo n 2:  B c 2: Lo i ph n t cu i kh i heap Heap ch ph n t nên gi i thu t d ng 10 19  Dãy đ c s p th t 111 29 12/6/2010 Ph ng pháp Heap Sort  Cài đ t hàm Heap Sort void HeapSort(int A[], int N) { int l = 0, r = N – 1; CreateHeap(A, N); while (l < r) { HoanVi(A[l], A[r]); r ; Shift(A, l, r); } } 112 Ph ng pháp Heap Sort  Cài đ t hàm hi u ch nh heap void Shift(int A[], int l, int r) { int i = l, j = 2*i + 1, x = A[i]; while (j = A[j]) return; A[i] = A[j]; i = j; j = 2*i + 1; } A[i] = x; } 113 Ph ng pháp Heap Sort  Cài đ t hàm t o heap void CreateHeap(int A[], int N) { int l = N/2; int r = N – 1; while (l >= 0) { Shift(A, l, r); l ; } } 114 30 12/6/2010 Ph  ng pháp Heap Sort ánh giá  ánh giá gi i thu t Heap Sort ph c t p nh ng ch ng minh đ c tr ng h p x u nh t có đ ph c t p O(N.logN) 115 Ph ng pháp Quick Sort Ýt  ng Ch n giá tr c a m t ph n t thu c dãy làm ch t Phân ho ch dãy c n s p thành dãy   Dãy bên trái g m ph n t b ng giá tr c a ch t Dãy bên ph i g m ph n t c a ch t … … … kL ki … … … có giá tr nh h n ho c có giá tr l n h n giá tr kj … … … kR ≥ ch t ≤ ch t 116 Ph ng pháp Quick Sort  Dãy sau đ    c phân ho ch S p x p dãy bên trái dãy bên ph i dãy ban đ u s có th t Dãy ch g m ph n t đ c xem có th t ho c nhi u ph n t có giá tr Dãy bên trái dãy bên ph i c ng đ theo t t ng c s p th t 117 31 12/6/2010 Ph ng pháp Quick Sort  Ch n ph n t  Giá tr ph n t    ch t ch t quy t đ nh tính hi u qu c a gi i thu t Ch t có giá tr l n nh t ho c bé nh t s ph n t c a dãy chênh l ch l n (m t dãy g m n – ph n t , dãy l i ch g m ph n t ) Ch t có giá tr trung v d n đ n s bên trái bên ph i có s l ng t Ch n giá tr c a ph n t  ph n t c a dãy ng đ ng v trí gi a dãy làm giá tr ch t v trí gi a dãy = (v trí đ u dãy + v trí cu i dãy)/2 118 Ph ng pháp Quick Sort  Dãy c n phân ho ch A[l] … A[r]  Gi i thu t phân ho ch  B  B c 1: đ t i = l, j = r, x = A[(i + j)/2] //x ch t    B    c 2: N u i < j L p t ng i thêm A[i] < x L p gi m j A[j] > x c 3: N u i ≤ j Hoán v A[i] A[j] T ng i, gi m j Quay v b c 119 Ph ng pháp Quick Sort  Cài đ t void Partition(int A[], int N) { int i = l, j = r, x = A[(l + r)/2]; while (i < j) { while (A[i] < x) i++; while (A[j] > x) j++; if (i

Ngày đăng: 09/05/2021, 18:25