Bài giảng Cấu trúc dữ liệu và giải thuật gồm các nội dung chính được trình bày như sau: Tổng quan về giải thuật và Cấu trúc dữ liệu, một số cấu trúc dữ liệu cơ bản, cây và Cây tìm kiếm, một số giải thuật sắp xếp và tìm kiếm
8/15/2017 Gi i thi u h c ph n C U TRÚC D S tín ch : M c tiêu: Cung c p LI U VÀ GI I THU T Các ki n th c c b n v c u trúc d li u thu t toán K n ng l a ch n xây d ng c u trúc d li u thu t toán h p lý U M _T TM H D B môn: Tin h c Khoa H th ng Thông tin Kinh t & Th ng m i n t TƠi li u tham kh o Gi i thi u h c ph n N i dung chính: Ch Ch Ch Ch R Sedgevick, Algorithms Addison-Wesley, B n d ch ti ng Vi t: C m nang thu t toán (t p 1, 2) ng 1: T ng quan v gi i thu t CTDL ng 2: M t s c u trúc d li u c b n ng 3: Cây Cây tìm ki m ng 4: M t s gi i thu t s p x p tìm ki m Xuân Lôi, C u trúc d li u gi i thu t Lê Minh Hoàng, Bài gi ng chuyên đ H S àm, C u trúc d li u gi i thu t 1 8/15/2017 Ch ng T ng quan v gi i thu t vƠ CTDL 1.1 C u trúc d li u (Data Structures) 1.1.1 Khái ni m chung 1.1.2 Vai trò c a CTDL 1.1.3 M t s c u trúc d li u c b n 1.1 C u trúc d li u 1.2 Gi i thu t U M _T TM H D 1.1.1 Khái ni m chung Ví d Cơy ph h : M c tiêu c a tin h c? D li u gì? Ki u d li u ? Khái ni m chung: CTDL m t cách th hi n t ch c d li u máy tính cho đ c s d ng m t cách có hi u qu nh t Khái ni m khác: CTDL m t d li u ph c h p, g m nhi u thành ph n d li u, m i thành ph n ho c d li u c s ho c m t CTDL đ c xây d ng Các thành ph n d li u t o nên m t CTDL đ c liên k t v i theo Ơng A l y bà B có hai trai C, D m t gái E Ơng C k t v i F có hai m t trai G m t gái H Ơng D khơng l p gia đình Cơ E l y ơng I có hai gái K,L m t trai M … m t cách 2 8/15/2017 1.1.2 Các v n đ liên quan 1.1.2 Vai trò c a CTDL T m quan tr ng c a vi c l a ch n CTDL Các tiêu chu n l a ch n CTDL T ch c d li u: d li u vào/ra/trung gian Xây d ng gi i thu t Các cách cài đ t khác Th c hi n thao tác thu n l i/khôngthu n l i CTDL thay đ i Thu t toán thay đ i CTDL ph i bi u di n đ c đ y đ thông tin c a toán ( ph n ánh th c t ) Cài đ t đ c máy tính ngơn ng l p trình s d ng U M _T TM H D Phù h p v i thao tác c a thu t toán (đ c bi t thao tác đ c s d ng nhi u) phát tri n thu t toán đ n gi n đ t hi u qu Ti t ki m tài nguyên 1.1.3 M t s c u trúc d li u c b n 10 M ng (Array) M ng (array) B n ghi (record)/c u trúc (struct) T p h p (set) T p (file) Xâu (string) ….(danh sách liên k t, cây, b ng b m, …) 11 12 3 8/15/2017 1.2 Gi i thu t (Algorithm) C u trúc - Struct (structure) 1.2.1 Khái ni m chung 1.2.2 Ngôn ng di n đ t gi i thu t 1.2.3 Thi t k vƠ phơn tích gi i thu t 1.2.4 Gi i thu t đ quy U M _T TM H D 13 14 1.2.1 Khái ni m chung Thu t toán m t dãy h u h n b c đ c s p x p theo m t tr t t xác đ nh, m i b c mơ t xác phép tốn ho c hành đ ng c n th c hi n, đ gi i quy t m t v n đ 15 16 4 8/15/2017 1.2.1 Khái ni m chung 1.2.2 Ngôn ng di n đ t gi i thu t Cách li t kê: li t kê b c c n th c hi n S đ kh i: s d ng hình kh i oval, ch nh t, hình thoi m i tên,… Ngơn ng l p trình: dùng ký hi u quy t c c a ngơn ng l p trình Gi ngôn ng : k t h p gi cú pháp c a ngơn ng l p trình ngơn ng t nhiên Các tính ch t (đ c tr ng) c a thu t tốn: Tính vào (input) Tính (output) Tính đ n đ nh (xác đ nh / đ n ngh a) Tính đ n Tính d ng (tính k t thúc / tính đóng) Tính ph d ng Tính kh thi/hi u qu U M _T TM H D 17 1.2.2 Ngôn ng di n đ t gi i thu t Ví d : 18 1.2.2 Ngơn ng di n đ t gi i thu t - Input: N nguyên d ng, dãy a 1, , an - Output: Tìm Max c a dãy cho Ý t ng: Gi thi t Max = a1 V i m i i, n u > Max thay giá tr Max= 19 Cách li t kê B c Nh p N dãy a1, , an B c t Max = a1, i = 2; B c N u i > N đ n B c 5; B c 4.1 N u > Max Max = 4.2 t i=i+1 r i quay b c 3; B c a Max r i k t thúc 20 5 8/15/2017 1.2.2 Ngôn ng di n đ t gi i thu t 1.2.2 Ngôn ng di n đ t gi i thu t Dùng ngơn ng l p trình ( C): int max(int *x,int n) //hàm tìm max { // n th hi n đ dài m ng x int result; result=x[0]; for (int i=1;iright); } } 109 Ch ng Cây 3.3.1 Duy t cơy 3.3.1 Duy t cơy void inorder (btree t){// t th t gi a if (t==NULL) exit(0); else { inorder(t->left); void endorder(btree t){// t th t sau if (t==NULL) exit(0); else { endorder(t->left); endorder(t->right); printf(“gia tri %d”,t->data); printf(“gia tri %d”,t->data); inorder(t->right); } } } Ch ng Cây 110 } 111 Ch ng Cây 112 28 8/15/2017 3.3.1 Duy t cơy 3.3.2 Tìm ki m ng d ng c a phép t cơy ng Cây U M _T TM H D Ch Tìm ki m cơy nh phơn Áp d ng phép t đ tìm nút th a mã m t u ki n cho tr c Phép tìm ki m có th d ng m t nút th a mãn đ c tìm th y tùy thu c vào u ki n tìm ki m Phép tìm ki m nh phân thơng th ng có đ ph c t p t ng đ ng v i phép t Tính chi u cao c a Tính s nút/s nút c a Tính kích th c c a … 113 Ch ng Cây 3.3.2 M t s phép toán khác 3.4 Cơy tìm ki m M t s phép toán khác cơy nh phơn Thêm m t nút vào nh phân B t m t nút nh phân Sao chép Ghép m t thành nhánh m t khác Ch ng Cây 114 3.4.1 Khái ni m 3.4.2 Cài đ t phép tốn tìm ki m 115 Ch ng Cây 116 29 8/15/2017 3.4.1 Khái ni m 3.4.1 Khái ni m Ch ng Cây 117 3.4.2 CƠi đ t vƠ phép toán cơy tìm ki m Bi u di n gi ng nh bi u di n nh phân nói chung Các phép toán: Ch Ch ng Cây 118 3.4.2 CƠi đ t vƠ phép toán cơy tìm ki m Phép tìm ki m:Có nút ch a giá tr b ng khóa? Gi i thu t: B t đ u t g c, so sánh giá tr nút v i khóa: B ng K t thúc Nh h n th c hi n trái L n h n th c hi n ph i Tìm ki m Phép chèn Phép xóa T o m t nh phân tìm ki m ng Cây Ví d U M _T TM H D Cây nh phân tìm ki m m t nh phân mà m i nút c a đ u đ c gán m t giá tr khóa m i nút ph i th a mãn: Giá tr c a nút c a trái nh h n giá tr c a nút g c; Giá tr c a nút ph i l n h n giá tr c a nút g c; Cây trái ph i c ng tìm ki m nh phân Các giá tr khóa khác 119 Ch ng Cây 120 30 8/15/2017 3.4.2 CƠi đ t vƠ phép tốn cơy tìm ki m Phép chèn thêm m t ph n t có giá tr x Gi i thu t: N u nút x nút ta ch c n “c t b ” x Xin c p b nh cho m t nút m i, Gán giá tr m i vào tr ng Data c a nút m i Gán giá tr Null cho tr ng Left Right c a nút m i g c, đ i sánh v i giá tr m i c n thêm vào: N u b ng k t thúc Ng c l i t theo trái (n u ) 4 2 Ch ng Cây 121 3.4.2 CƠi đ t vƠ phép tốn cơy tìm ki m N u x có m t hai r ng u ch nh l i tr c a nút cha c a x b ng cách tr ng liên k t t ng ng thay tr đ n x bây gi tr t i nút g c c a nh t c a x gi i phóng b nh c p cho x 4 Ch ng Cây 122 3.4.2 CƠi đ t vƠ phép tốn cơy tìm ki m Phép xóa N u nút x có hai (có g c t ng ng x1 x2) m t hai (ch ng h n x1) khơng có ta thay nút x1 làm nút cha c a có g c x2 Ta thay đ i tr ng liên k t nh sau: Tr ng liên k t nút cha c a x thay tr t i x tr t i nút x1 Tr ng liên k t c a nút x1 thay null tr vào nút x2 U M _T TM H D T 3.4.2 CƠi đ t vƠ phép toán cơy tìm ki m Phép xóa 1 3 6 Ch ng Cây 9 123 Ch ng Cây 124 31 8/15/2017 3.4.2 CƠi đ t vƠ phép tốn cơy tìm ki m Tr ng h p t ng quát: Thay giá tr c a x b ng giá tr nút bên ph i c a trái (ho c b ng giá tr nút bên trái c a ph i) C t b nút có giá tr v a gán cho nút x Vì nút đ c l a ch n đ thay th bên ph i/ trái nên khơng th có hai con, vi c c t b s th c hi n theo cách nêu 4 8 U M _T TM H D 7 Ch ng Cây 3.4.2 CƠi đ t vƠ phép tốn cơy tìm ki m Ch 125 3.4.2 CƠi đ t vƠ phép toán cơy tìm ki m Phép xóa ng Cây 126 3.4.2 CƠi đ t vƠ phép toán cơy tìm ki m Phép xóa 4 5 ng Cây 9 Ch 127 Ch ng Cây 128 32 8/15/2017 3.4.2 CƠi đ t vƠ phép tốn cơy tìm ki m Ch ng Cây ng 4.1 BƠi toán s p x p vƠ m t s ph ng pháp s p x p đ n gi n 4.1.1 Khái quát v s p x p 4.1.2 S p x p l a ch n 4.1.3 S p x p chèn 4.1.4 S p x p n i b t 4.1.5 ph c t p c a phép s p x p c b n 4.2 BƠi toán tìm ki m 4.2.1 Tìm ki m tu n t (Sequential Searching) 4.2.2 Tìm ki m nh phân (Binary Searching) 4.2.3 ph c t p U M _T TM H D T t c thao tác Search, Insert, Del đ u có đ ph c t p trung bình O(h), v i h chi u cao c a Trong tr ng h p t t nh t, nh phân tìm ki m đ y đ có n đ nh s có đ cao h = log(n) Chi phí tìm ki m s t ng đ ng tìm ki m nh phân m ng có th t Trong tr ng h p x u nh t, có th b suy bi n thành danh sách liên k t (khi mà m i đ nh đ u ch có tr đ nh lá) Các thao tác có đ ph c t p O(n) Ch 129 4.1 Bài toán s p x p m t s ph pháp s p x p đ n gi n 130 C u trúc d li u gi i thu t ng 4.1.1 Khái quát v s p x p 4.1.1 Khái quát v s p x p 4.1.2 S p x p l a ch n (Selection Sort) 4.1.3 S p x p chèn (Insertion Sort) 4.1.4 S p x p n i b t (Bubble Sort) 4.1.5 ph c t p c a phép s p x p đ n gi n S p x p q trình b trí l i ph n t c a m t t p đ i t ng theo th t nh t đ nh (t ng ho c gi m d n) Ví d : {1,9,7,2,5} {1,2,5,7,9} { “D ng”, “H ng” ,“An”, “Bình” } {“An”, “Bình”, “D ng”, “H ng”} 131 C u trúc d li u gi i thu t C u trúc d li u gi i thu t 132 33 8/15/2017 4.1.1 Khái quát v s p x p 4.1.1 Khái quát v s p x p Vi c s p x p m t toán ph bi n tin h c Do yêu c u tìm ki m thu n l i, s p x p k t xu t cho b ng bi u,… D li u th ng đ c t ch c thành b n ghi M i b n ghi th ng có m t s tr ng d li u khác Tr ng tham gia trình tìm ki m g i khóa Khóa s p x p M t b ph n c a b n ghi bi u di n đ i t ng đ c s p x p Khóa s đ c s d ng đ xác đ nh th t s p x p b n ghi m t t p b n ghi B ng khóa S d ng s p x p mu n h n ch vi c di chuy n d li u M t t p h p b n ghi ch ch a tr ng: ng d li u t ng ng Th t b n ghi b ng khóa cho phép xác đ nh th t b n ghi d li u U M _T TM H D C u trúc d Khóa: Ch a khóa s p x p Link: Con tr ghi đ a ch c a b n ghi đ i t li u gi i thu t 133 C u trúc d 4.1.1 Khái quát v s p x p M t s ph li u gi i thu t 134 4.1.1 Khái quát v s p x p ng pháp s p x p Các đ c tr ng c a thu t toán s p x p: Tính n đ nh c a thu t tốn s p x p • Các ph n t có khóa s gi nguyên th t t đ i c a chúng nh tr c s p x p ng Tính t i ch : Thu t tốn địi h i khơng gian nh ph lƠ h ng s (không ph thu c vƠo s l ng ph n t dƣy c n s p) 135 C u trúc d li u gi i thu t 136 C u trúc d li u gi i thu t 34 8/15/2017 4.1.1 Khái quát v s p x p BƠi toán s p x p đ sau: c đ n gi n hóa d 4.1.2 S p x p l a ch n (Selection Sort) Ý t i d ng nh ng: T im i l u vào: M t dãy s ngun (các khóa) u ra: M t hốn v c a dãy s cho giá tr khóa đ c s p x p theo th t t ng d n ch a đ t, ch n ph n t nh nh t s ph n t c s p a ph n t đ c ch n vào v trí b ng phép đ i ch Sau l t th i (i = n-1), dãy c n s p coi nh đ c chia U M _T TM H D thành ph n: • Ph n s p: t v trí i • Ph n ch a s p: t v trí i +1 n 137 C u trúc d li u gi i thu t 4.1.2 S p x p l a ch n (Selection Sort) Ví d : s p x p dƣy sau theo th t t ng d n: A = { 12, 5, 3, 10, 18, 4, 9, 16} L t1 L t2 L L L t5 L t6 L 5 4 4 4 12 12 5 5 10 10 10 10 9 9 18 18 18 18 18 10 10 10 4 12 12 12 12 12 9 9 10 18 18 16 16 16 16 16 16 16 16 18 li u gi i thu t t4 C u trúc d t3 12 t7 139 138 C u trúc d li u gi i thu t 4.1.2 S p x p l a ch n (Selection Sort) void SELECTION-SORT(int A[], int n) { int i; for (i = ; i & A[j-1] > val) { A[j] := A[j-1]; j := j -1; } // Chèn ph n t A[i] vƠo v trí thích h p A[j] := val; } } Ý t ng: Dãy c n s p đ c chia thành ph n: m t ph n s p, l i ph n ch a s p Thông qua phép đ i ch , t i m i l t ph n t nh nh t ph n ch a đ c s p s đ c “đ y d n” lên tr c cu i nh p vào ph n đ c s p 144 C u trúc d li u gi i thu t 143 C u trúc d li u gi i thu t 36 8/15/2017 4.1.4 S p x p n i b t (Bubble Sort) 4.1.4 S p x p n i b t (Bubble Sort) Ví d : s p x p dƣy sau theo th t t ng d n: void BUBBLE-SORT(int A[], int n) { for ( int i = 1; i< n-1; i++ ) { A = { 12, 5, 3, 10, 18, 4, 9, 16} L t1 L t2 L t3 L t4 L t5 L t6 L // Duy t t cu i dƣy t7 for ( int j = n-1 ; j>i; j ) 12 3 12 4 4 4 12 5 5 /* Ki m tra ph n t k c n nhau, n u ng đ i ch */ 10 12 9 9 if (A[j] < A[j-1]){ 18 10 9 12 10 10 10 18 10 10 10 12 12 12 9 18 16 16 16 16 16 16 16 16 18 18 18 18 18 3 3 li u gi i thu t } } } 145 4.1.5 li u gi i thu t 4.1.5 Th i gian th c hi n thu t tốn: c s p x p • Tr ng h p x u nh t: • Tr ph c t p th i gian trung bình: O(n2) li u gi i thu t c s p x p – phép đ i ch , ch th c hi n n(n-1)/2 phép so sánh ng h p x u nh t: – n(n-1)/2 phép so sánh đ i ch C u trúc d ng h p t t nh t: – Dãy ban đ u đ – n-1 phép đ i ch , n(n-1)/2 phép so sánh ph c t p S p x p chèn t i ch n đ nh ng h p t t nh t: – phép đ i ch , ch th c hi n n(n-1)/2 phép so sánh • Tr 146 S p x p chèn (Insertion Sort) Th i gian th c hi n thu t toán: – Dãy ban đ u đ C u trúc d ph c t p S p x p l a ch n (Selection Sort) • Tr c th t int X:= A[j]; A[j] := A[j-1]; A[j-1] := X; U M _T TM H D C u trúc d 147 C u trúc d ph c t p th i gian trung bình: O(n2) li u gi i thu t 148 37 8/15/2017 4.1.5 ph c t p 4.2 Bài toán tìm ki m 4.2.1 Khái quát v tìm ki m S p x p n i b t (Bubble Sort) 4.2.2 Tìm ki m tu n t (Sequential Searching) Th i gian th c hi n thu t toán: • Tr 4.2.3 Tìm ki m nh phơn (Binary Searching) ng h p t t nh t: – Dãy ban đ u đ 4.2.4 c s p x p ph c t p – phép đ i ch , ch th c hi n n(n-1)/2 phép so sánh • Tr ng h p x u nh t: U M _T TM H D – n(n-1)/2 phép so sánh đ i ch ph c t p th i gian trung bình: O(n2) C u trúc d li u gi i thu t 149 4.2.1 Khái quát v tìm ki m 150 C u trúc d li u gi i thu t 4.2.2 Tìm ki m tu n t (Sequential Searching) Tìm ki m lƠ thu t tốn tìm ph n t có giá tr cho tr c m t t p ph n t Tìm ki m tu n t Các ph n t t p đ u vào không đ ki m c s p x p theo khóa tìm Mơ t Duy t dãy (danh sách, hàng đ i , v…v ) ch a ph n t t p So sánh v i khóa c n tìm t i tìm th y khóa ho c t qua h t m ng mà ch a tìm th y Khóa tìm ki m: M t b ph n c a ph n t t p mƠ giá tr c a đ c s d ng đ so sánh vƠ tìm ki m Tr l i ch s ph n t dãy (n u th y) 151 C u trúc d li u gi i thu t 152 C u trúc d li u gi i thu t 38 8/15/2017 4.3.2 Tìm ki m tu n t 4.2.2 Tìm ki m tu n t Gi i thu t tìm ki m tu n t không ph thu c vào th t c a ph n t m ng, v y đơy ph ng pháp t ng quát nh t đ tìm ki m m t dãy b t k Function SEQUENTIAL(A, n, key) {tìm ph n t có khóa key m ng A g mn ph n t K t qu tr ra: -1 n u không tìm th y ph n t có khóa key, ch s c a ph n t n u tìm th y} M t thu t tốn có th đ c cài đ t theo nhi u cách khác nhau, k thu t cài đ t nh h ng nhi u đ n t c đ th c hi n i:= 1; while (i n) then return -1 { không th y}; li u gi i thu t Tr ng h p t t nh t: O(1) Tr ng h p t i nh t: O(n) Tr ng h p trung bình: O(n) 4.2.3 Tìm ki m nh phơn (Binary Searching) Tìm ki m nh phơn S d ng cho vi c tìm ki m m ng đ s px p Mô t 154 153 C u trúc d li u gi i thu t 4.2.3 Tìm ki m nh phơn Function BINARY-SEARCH(A,l, r, key) c if (l> r) return -1; m = (l+r) /2 ; if (A[m] = key ) then • Ch n ph n t “ gi a” dãy – A[k] đ th c hi n so sánh v i giá tr c n tìm return m ; else if (A[m] > key) then • N u key = A[k] tìm th y, k t thúc return BINARY-SEARCH(A,l,m-1,key); • N u key < A[k] tìm n a đ u c a m ng cho • N u key > A[k] tìm n a sau c a m ng cho else return BINARY-SEARCH(A, m+1, r, key); 155 C u trúc d li u gi i thu t C u trúc d li u gi i thu t 156 39 8/15/2017 4.2.3 Tìm ki m nh phơn 4.2.3 Tìm ki m nh phơn void BINARY-SEARCH(int A[], int l, int r, int key) { if (l> r) return -1; m = floor ((l+r) /2) ; if (A[m] == key ) return m ; else if (A[m] > key) return BINARY-SEARCH(A,l,m-1,key); U M _T TM H D else return BINARY-SEARCH(A, m+1, r, key); } C u trúc d void BINARY-SEARCH(int A[], int n, int key) { int l=0, r = n-1 ; while ( l A[m]) l= m+1 else return m; } return -1; // Không tìm th y } li u gi i thu t 4.2.4 157 C u trúc d li u gi i thu t 158 ph c t p Tìm ki m d a vào quan h giá tr c a ph n t m ng đ đ nh h ng trình tìm ki m, v y ch áp d ng đ c v i dãy đƣ có th t Tìm ki m nh phân tìm ki m nhanh h n tìm ki m tu n t Tuy nhiên áp d ng thu t gi i nh phân c n ph i quan tâm đ n chi phí cho vi c s p x p m ng Vì m ng đ c s p th t r i m i tìm ki m nh phân 159 C u trúc d li u gi i thu t 40 ... th t sau if (t==NULL) exit(0); else { endorder(t->left); endorder(t->right); printf(“gia tri %d”,t->data); printf(“gia tri %d”,t->data); inorder(t->right); } } } Ch ng Cây 110 } 111 Ch ng Cây 112... /* Tìm v trí thích h p đ chèn ph n t A[i] ph n đƣ s p- ch a ph n t t v trí đ n i-1 */ while ( j > & A[j-1] > val) { A[j] := A[j-1]; j := j -1 ; } // Chèn ph n t A[i] vƠo v trí thích h p A[j] :=... phép đ i ch , ch th c hi n n(n-1)/2 phép so sánh ng h p x u nh t: – n(n-1)/2 phép so sánh đ i ch C u trúc d ng h p t t nh t: – Dãy ban đ u đ – n-1 phép đ i ch , n(n-1)/2 phép so sánh ph c t