12/6/2010 1 LOGO GVGD: Trng Phc Hi Tìm kim và sp xp 2 Ni dung 1. Bài toán tìm kim và sp xp 2. Mt s phng pháp tìm kim 3. Mt s phng pháp sp xp 3 Bài toán tìm kim và sp xp Tìm kim và sp xp là 2 bài toán rt kinh đin trong tin hc Tìm kim là thao tác đc thc hin nhiu nht trong các h thng lu tr và qun lý d liu Tra t đin, tìm kim sinh viên, tìm kim khách hàng, … Thao tác tìm kim s thc hin hiu qu khi d liu đc t chc theo mt trt t nào đó Sp xp d liu cng là yêu cu cn phi có trong các h thng thông tin qun lý, … 12/6/2010 2 4 Bài toán tìm kim và sp xp Bài toán tìm kim Cho mt tp gm N phn t d liu. Cho bit s tn ti hoc ch ra v trí xut hin ca mt phn t nào đó vi thông tin xác đnh đc cho trc Bài toán sp xp Cho mt tp gm N phn t d liu. Sp xp các phn t d liu có th t (tng hoc gim dn) theo mt tiêu chí cho trc 5 Bài toán tìm kim và sp xp Tính hiu qu ca các phng pháp tìm kim và sp xp ph thuc vào tính cht ca CTDL Các phng pháp tìm kim và sp xp cng ph thuc vào d liu lu tr b nh trong hay b nh ngoài Các gii thut đc trình bày dành cho d liu lu tr b nh trong 6 Ni dung 1. Bài toán tìm kim và sp xp 2. Mt s phng pháp tìm kim 3. Mt s phng pháp sp xp 12/6/2010 3 7 Bài toán tìm kim Bài toán Cho mng 1 chiu A gm N phn t nguyên. Cho bit s nguyên x có tn ti trong A hay không? Nu có thì cho bit 1 v trí xut hin ca x trong A Input: Mng A gm N phn t nguyên, s nguyên x Ouput: p ≥ 0 là v trí xut hin ca x trong A p < 0 nu x không tn ti trong A 8 Tìm kim tun t Ý tng Xét ln lt tng phn t trong toàn b không gian tìm kim đ tìm ra 1 phn t tha tiêu chí hoc không tìm thy phn t nào tha tiêu chí Thao tác dng li ngay khi tìm thy phn t đu tiên tha tiêu chí hoc xét ht tt c phn t 9 Tìm kim tun t Gii thut Bt đu N, A[0], A[1], , A[N-1], x i < N F A[i] = x Kt thúc T i = 0 T F i = i + 1 -1 i 12/6/2010 4 10 Tìm kim tun t Cài đt int LinearSearch(int A[], int N, int x) { for (int i = 0; i < N; i++) { if (A[i] == x) return i; } return -1; } 11 Tìm kim tun t ánh giá Da trên s phép so so sánh ca gii thut phc tp tính toán cp N: T(N) = O(N) Trng hp S phép so sánh Din gii Tt nht 1 x nm đu mng Xu nht N x không thuc mng 12 Tìm kim nh phân Ý tng iu kin thc thi gii thut: không gian tìm kim phi đc sp th t (tng dn hoc gim dn) theo tiêu chí tìm kim Da vào tiêu chí có th t đ thu hp mt na không gian tìm kim sau mi bc thc hin 12/6/2010 5 13 Tìm kim nh phân Gii thut Bc 1: đt L = 0, R = N – 1 (L: đu dãy; R: cui dãy) Bc 2: Nu L < R đúng thì đn bc 3 Ngc li đn bc 4 Bc 3: t M = (L + R)/2 (M: v trí gia dãy) Trng hp x = A[M] thì tìm thành công. n bc 4 Trng hp x < A[M] thì đt R = M – 1 Trng hp A[M] < x thì đt L = M + 1 Quay v bc 2 Bc 4: kt thúc 15 Tìm kim nh phân Minh ha 15 12 9 5 4 2 1 6 5 4 3 2 1 0 x = 9 15 12 9 5 4 2 1 x = 9 15 12 9 5 4 2 1 x = 9 16 Tìm kim nh phân Cài đt int BinSearch(int A[], int N, int x) { int L = 0, R = N – 1; while (L < R) { int M = (L + R)/2; if (A[M] == x) return M; if (x < A[M]) R = M – 1; else L = M + 1; } return -1; } 12/6/2010 6 17 Tìm kim nh phân ánh giá T(N) = O(log 2 N) Trng hp S phép so sánh Din gii Tt nht 1 x nm gia mng Xu nht log 2 N x không thuc mng 18 Ni dung 1. Bài toán tìm kim và sp xp 2. Mt s phng pháp tìm kim 3. Mt s phng pháp sp xp 19 Bài toán sp xp Bài toán Cho mng 1 chiu A gm N phn t nguyên. Hãy sp xp mng A sao cho các phn t ca A có th t không gim (A[0] ≤ A[1] ≤ … ≤ A[N - 1]) Input: Mng A gm N phn t nguyên Ouput: Mng A gm N phn t nguyên vi th t không gim 12/6/2010 7 20 Bài toán sp xp Mt s phng pháp thc hin Chn trc tip (selection sort) i ch trc tip (interchange sort) Ni bt (bubble sort) Shaker sort Chèn trc tip (insertion sort) Shell Sort Heap sort Quick sort Merge sort 21 Phng pháp chn trc tip Ý tng Chn đúng phn t ln th i và đa v v trí i trong dãy Thc hin đa ln lt N – 1 phn t v đúng v trí ca nó đ có đc dãy có th t 22 Phng pháp chn trc tip Gii thut Bc 1: đt i = 0 Bc 2: đt min = v trí ca phn t nh nht trong dãy t i đn N – 1 (cui mng) Bc 3: Hoán v A[i] và A[min] t i = i + 1 Bc 4: Nu i < N – 1 đúng quay v bc 2 Ngc li kt thúc 12/6/2010 8 24 Phng pháp chn trc tip Minh ha 6 19 10 7 4 3 2 1 7 6 5 4 3 2 1 0 3 19 1 7 4 6 2 10 i = 0 3 19 10 7 4 6 2 1 i = 1 3 19 10 7 4 6 2 1 i = 2 i = 3 25 Phng pháp chn trc tip Minh ha 19 10 7 6 4 3 2 1 7 6 5 4 3 2 1 0 6 19 10 7 4 3 2 1 i = 4 7 19 10 6 4 3 2 1 i = 5 10 19 7 6 4 3 2 1 i = 6 i = 7 26 Phng pháp chn trc tip Cài đt void SelectionSort(int A[], int N) { for (int i = 0; i < N - 1; i++) { int min = i; for (int j = i + 1; j < N; j++) if (A[j] < A[min]) min = j; HoanVi(A[i], A[min]); } } 12/6/2010 9 27 Phng pháp chn trc tip ánh giá Thao tác chính nh hng đn tính hiu qu ca gii thut là thao tác so sánh và thao tác gán phc tp ca gii thut đc đánh giá thông qua s phép so sánh và s phép gán Trng hp S phép so sánh S phép gán Tt nht 0 Xu nht 28 Phng pháp đi ch trc tip Ý tng Dãy tng dn là dãy mà mi phn t đng sau đu ln hn hoc bng phn t đng trc (j > i, A[j] ≥ A[i]) Xét tt c cp phn t ca dãy, nu phn t đng trc ln hn phn t đng sau thì hoán v chúng i < j, nu A[i] > A[j] thì đi ch A[i] và A[j] 29 Phng pháp đi ch trc tip Gii thut Bc 1: đt i = 1 Bc 2: Xét tt c v trí j > i Nu A[i] > A[j] thì đi ch A[i] và A[j] Bc 3: đt i = i + 1 Nu i < N – 1 thì quay v bc 2 Ngc li kt thúc 12/6/2010 10 31 Phng pháp đi ch trc tip Minh ha 3 19 1 7 4 6 2 10 7 6 5 4 3 2 1 i = 0 3 19 1 7 4 6 10 2 3 19 2 7 4 6 10 1 0 32 Phng pháp đi ch trc tip Minh ha 3 19 2 7 4 6 10 1 7 6 5 4 3 2 1 i = 1 3 19 2 7 4 10 6 1 3 19 2 7 6 10 4 1 3 19 4 7 6 10 2 1 0 33 Phng pháp đi ch trc tip Minh ha 3 19 4 7 6 10 2 1 7 6 5 4 3 2 1 i = 2 3 19 4 7 10 6 2 1 3 19 6 7 10 4 2 1 4 19 6 7 10 3 2 1 0 [...]...12/6/2010 i =3 1 2 3 10 7 6 19 4 1 2 3 7 10 6 19 4 1 2 3 6 10 7 19 4 1 2 3 4 10 7 19 6 0 1 2 3 4 5 6 7 34 i=4 1 2 3 4 10 7 19 6 1 2 3 4 7 10 19 6 1 2 3 4 6 10 19 7 0 1 2 3 4 5 6 7 35 i=5 1 2 3 4 6 10 19 7 1 2 3 4 6 7 19 10 0 1 2 3 4 5 6 7 36 11 12/6/2010 i=6 2 3 4 6 7 19 10 1 2 3 4 6 7 10 19 1 2 3 4 6 7 10 19 0 i=7 1 1 2 3 4 5 6 7 37 void InterchangeSort(int A[], int N) { for (int i = 0; i < N - 1; i++)... thì toàn 3: A[N- 1] 1 trên A trong khi dãy kia lên A 1 và 2 cho khi dãy A[0], A[1], , còn 1 125 A 10 2 6 4 7 B 10 4 7 3 15 C 2 6 1 19 1 19 3 15 132 34 12/6/2010 B 10 4 7 3 C 2 6 1 19 A 2 6 10 1 15 4 7 19 3 15 7 19 3 15 3 15 133 A 2 6 10 1 4 B 2 6 10 3 15 C 1 4 7 19 134 A B 2 6 10 3 C 1 4 7 19 A 1 2 4 6 15 7 10 19 135 35 12/6/2010 A 1 2 4 6 7 10 19 B 1 2 4 6 7 10 19 C 3 15 3 15 15 19 136 B 1 2 C 3 15 A... } 38 phép so sánh 39 12 12/6/2010 Xét lên và cho nhau, lên trên (có giá Sau lên trên 40 1 0 2 1 1 j=j 1] 1 3: i = i + 1 1 2 41 i=0 10 2 6 4 7 1 19 3 10 2 6 4 7 1 3 19 1 10 2 6 4 7 3 19 1 2 3 4 5 6 7 43 13 12/6/2010 i=1 1 10 2 6 4 7 3 19 1 10 2 3 6 4 7 19 1 2 10 3 6 4 7 19 0 1 2 3 4 5 6 7 44 i=2 1 2 10 3 6 4 7 19 1 2 10 3 4 6 7 19 1 2 3 10 4 6 7 19 0 1 2 3 4 5 6 7 10 4 6 7 19 45 i =3 1 2 3 1 i=4 2 3. .. 1 6 3 4 5 6 3 4 5 6 3 3 7 7 97 19 3 0 0 7 10 7 1 2 1 10 2 4 2 1 6 4 2 1 6 3 4 5 6 3 4 5 6 3 19 7 7 98 Giai 2: 2: dãy còn ra heap và thành heap 3 10 0 0 7 10 7 1 2 1 6 2 4 2 1 6 4 2 1 3 3 4 5 6 3 4 5 6 19 19 7 7 99 25 12/6/2010 Giai 2: 1: Hoán và heap 10 3 0 0 7 6 7 1 2 1 6 2 4 2 1 3 4 2 1 10 3 4 5 6 3 4 5 6 19 19 7 7 100 2: dãy còn ra heap và thành heap 3 7 0 0 7 6 4 1 2 1 6 2 4 2 1 10 3 2 1 10 3 4... 3 4 5 6 và heap 19 19 7 7 101 2: 1: Hoán 7 1 0 0 4 6 4 1 2 1 6 2 3 2 1 10 3 2 7 10 3 4 5 6 3 4 5 6 19 19 7 7 102 26 12/6/2010 2: dãy còn ra heap và thành heap 1 6 0 0 4 6 4 1 2 1 1 2 3 2 7 10 3 2 7 10 3 4 5 6 3 4 5 6 và heap 19 19 7 7 1 03 2: 1: Hoán 6 2 0 0 4 1 4 1 2 1 1 2 3 2 7 10 3 6 7 10 3 4 5 6 3 4 5 6 19 19 7 7 104 2: 2: dãy còn ra heap và thành heap 2 4 0 0 4 1 3 1 2 1 1 2 3 6 7 10 2 6 7 10 3. .. pos - len; } A[pos + len] = x; } } } 73 Shell Sort giá là minh còn vào và giá các Sedgewick có minh dãy 1, 8, 23, 77, O(N4 /3) , 4j + 1 +3* 2j + 1 74 22 12/6/2010 Shell Sort dãy Knuth k = log3N 1, 4, 13, 40, 127, Marcin Ciura 1750, 1 và hi = 3. hi-1 + 1, 1, 4, 10, 23, 57, 132 , 30 1, 701, Sedgewick 16577, 1, 8, 23, 77, 281, 10 73, 41 93, 75 trí các phân theo quan so sánh cây 76 10 0 2 6 1 2 4 7 1 19 3 4 5 6 3. .. 4 5 6 3 4 5 6 19 19 7 7 105 27 12/6/2010 2: 1: Hoán và heap 4 2 0 0 3 1 3 1 2 1 1 2 2 6 7 10 4 6 7 10 3 4 5 6 3 4 5 6 19 19 7 7 106 2: 2: dãy còn ra heap và thành heap 2 3 0 0 3 1 2 1 2 1 1 2 4 6 7 10 4 6 7 10 3 4 5 6 3 4 5 6 và heap 19 19 7 7 107 1: Hoán 3 1 0 0 2 1 2 1 2 1 3 2 4 6 7 10 4 6 7 10 3 4 5 6 3 4 5 6 19 19 7 7 108 28 12/6/2010 2: 2: dãy còn ra heap và thành heap 1 2 0 0 2 3 1 1 2 1 3 2 4... i < N thì quay 2 thúc 1 55 17 12/6/2010 i=1 10 2 6 4 7 1 19 3 i=2 2 10 6 4 7 1 19 3 i =3 2 6 10 4 7 1 19 3 i=4 2 4 6 10 7 1 19 3 0 1 2 3 4 5 6 7 57 i=5 2 4 6 7 10 1 19 3 i=6 1 2 4 6 7 10 19 3 i=7 1 2 4 6 7 10 19 3 i=8 1 2 3 4 6 7 10 19 0 1 2 3 4 5 6 7 58 void InsertionSort(int A[], int N) { for (int i = 1; i < N; i++) { int x = A[i], pos = i - 1; while (pos >= 0 && A[pos] > x) { A[pos + 1] = A[pos];... ell Sort h =3 10 4 19 2 7 6 0 1 2 3 1 3 4 5 15 6 7 8 68 20 12/6/2010 ell Sort h =3 4 10 19 2 3 1 0 1 2 7 6 3 4 5 15 6 7 8 69 ell Sort h=2 4 1 2 0 1 3 10 2 19 6 3 4 5 15 7 6 7 8 70 ell Sort h=2 1 3 2 0 1 4 6 2 15 7 3 4 5 19 10 6 7 8 71 21 12/6/2010 ell Sort h=1 1 2 3 6 4 7 15 10 19 1 2 3 4 6 7 15 10 19 1 2 3 4 6 7 10 15 19 0 1 2 3 4 5 6 7 8 72 ell Sort void ShellSort(int A[], int N, int h[], int k) { for... 2 3 4 5 6 7 10 4 6 7 19 45 i =3 1 2 3 1 i=4 2 3 4 10 6 7 19 0 1 2 3 4 5 6 7 1 2 3 4 10 6 7 19 1 2 3 4 6 10 7 19 0 1 2 3 4 5 6 7 46 14 12/6/2010 i=5 1 2 3 4 6 10 7 19 1 2 3 4 6 7 10 19 0 1 2 3 4 5 6 7 47 void BubbleSort(int A[], int N) { for (int i = 0; i < N - 1; i++) for (int j = N - 1; j > i; j ) if (A[j] < A[j - 1]) HoanVi(A[j], A[j - 1]); } 48 phép so sánh 49 15 12/6/2010 Là pháp pháp lên nhanh chìm . 4 6 10 2 3 19 2 7 4 6 10 1 0 32 Phng pháp đi ch trc tip Minh ha 3 19 2 7 4 6 10 1 7 6 5 4 3 2 1 i = 1 3 19 2 7 4 10 6 1 3 19 2 7 6 10 4 1 3 19 4 7 6 10 2 1 0 33 Phng. i = 3 4 19 6 10 7 3 2 1 4 19 7 10 6 3 2 1 6 19 7 10 4 3 2 1 0 35 Phng pháp đi ch trc tip Minh ha 6 19 7 10 4 3 2 1 7 6 5 4 3 2 1 i = 4 6 19 10 7 4 3 2 1 7 19 10 6 4 3 2 1. 5 4 3 2 1 0 19 7 6 4 3 10 2 1 19 7 4 6 3 10 2 1 19 7 6 4 10 3 2 1 i = 2 46 Phng pháp ni bt Minh ha 7 6 5 4 3 2 1 0 19 7 6 4 10 3 2 1 19 7 10 6 4 3 2 1 i = 3 7 6 5 4 3 2 1