Professional Documents
Culture Documents
Gii thieu mot so thuat toan tm kiem va sap xep noi. Phan tch, anh gia o phc tap cua cac giai thuat tm kiem, sap xep. Nhu cau tm kiem va sap xep d lieu trong mot he thong thong tin. Cac giai thuat tm kiem noi. Cac giai thuat sap xep noi.
2
Noi dung:
Nhu cau tm kiem va sap xep d lieu trong 1 he thong thong tinhet cac he lu tr, quan ly Trong hau
d lieu, thao tac tm kiem thng c thc hien nhat e khai thac thong tin. Do cac he thong thong tin thng phai lu tr mot khoi lng d lieu ang ke, nen viec xay dng cac giai thuat cho phep tm kiem nhanh se co y ngha rat ln. Neu d lieu trong he thong a c to chc theo mot trat t nao o, th viec tm kiem se tien hanh nhanh chong va hieu qua hn
3
xep Mc o hieu qua cua tng giai thuat phu thuoc vao tnh chat cua cau truc d lieu cu the ma no tac ong en. D lieu c lu tr chu yeu trong bo nh chnh va tren bo nh phu, do ac iem khac nhau cua thiet b lu tr, cac thuat toan tm kiem va sap xep c xay dng cho cac cau truc lu tr tren bo nh chnh hoac phu cung co nhng ac thu khac nhau. Chng nay se trnh bay cac thuat toan Cau truc D lieu - Tm kiem vakiem d lieu c lu sap xep va tm Sap xep
Nhu cau tm kiem va sap xep d lieu trong 1 he thong Co nhieu thong tingiai thuat tm kiem va sap
can tm la x
x;
int
Tm kiem tuan t
Tm kiem tuan t
Bc 1: i = V tr au; Bc 2: Neu a[i] = x : Tm thay. Dng, v tr xuat hien: i Bc 3 : i = V tr ke(i);// xet tiep phan t ke trong mang Bc 4: Neu i >V tr cuoi: //Het mang Khong tm thay. Dng. Ngc lai: Lap lai Bc 2.
Tm kiem tuan t
15
Tm kiem tuan t
i=2
i=3
10
Tm kiem tuan t
int LinearSearch(int a[], int N, int x) { for (int i=0; (i<N)&&(a[i]!=x ); i++); if (i<N) return i; // a[i] la phan t co khoa x return -1; // tm het mang nhng khong co x }
11
Tm kiem tuan t
Cai tien cai at: dung phng phap lnh canh at them mot phan t co gia tr x vao cuoi mang Bao am luon tm thay x trong mang Sau o da vao v tr tm thay e ket luan.
12
Tm kiem tuan t
int LinearSearch(int a[], int N, int x) { // mang gom N phan t t a[0]..a[N-1] a[N] = x; // them lnh canh vao cuoi day for (int i=0; (a[i]!=x); i++); if (i<N) return i; // a[i] la phan t co khoa x return -1; // tm het mang nhng khong co x
13
Tm kiem tuan t
Vay giai thuat tm tuan t co o phc tap tnh toan cap n: T(n) = O(n)
14
Tm kiem tuan t
Nhan xet:
Giai
thuat tm tuyen tnh khong phu thuoc vao th t cua cac phan t trong danh sach, do vay ay la phng phap tong quat nhat e tm kiem tren mot danh sach bat ky. Mot thuat toan co the c cai at theo nhieu cach khac nhau, ky thuat cai at anh hng en toc o thc hien cua thuat toan.
Cau truc D lieu - Tm kiem va Sap xep 15
Tm kiem nh phan
Tm kiem nh phan
oi vi nhng day a co th t (gia s th t tang ), cac phan t trong day co quan he ai -1 ai ai+1 Neu x > ai th x ch co the xuat hien trong oan [ai+1 ,aN] cua day Neu x < ai th x ch co the xuat hien trong oan [a1 ,ai-1] cua day .
17
Tm kiem nh phan
Y tng cua giai thuat la tai moi bc tien hanh so sanh x vi phan t nam v tr gia cua day tm kiem hien hanh, da vao ket qua so sanh nay e quyet nh gii han day tm kiem bc ke tiep la na tren hay na di cua day tm kiem hien hanh
18
Tm kiem nh phan
Bc 1: left = VT; right = VTC; Bc 2: Trong khi left right lap: //oan tm kiem cha rong Bc 21: mid = (left+right)/2; // lay moc so sanh Bc 22: Neu a[mid] = x: //Tm thay. Dng, v tr xuat hien: mid Bc 23: Neu a[mid] > x: //tm x trong day con aleft .. amid -1 right = mid - 1; Ngc lai //tm x trong day con amid +1 .. aright left = mid + 1; //Het lap Cau truc D lieu - Tm khong tm thay. Bc 3: Dng, kiem va Sap xep
19
Tm kiem nh phan
20
Tm kiem nh phan
21
Tm kiem nh phan
22
Tm kiem nh phan
int BinarySearch(int a[],int N,int x ) { int left =0, right = N-1, midle; while (left <= right) { mid = (left + right)/2; if (x == a[midle]) return midle;//Tm thay x tai mid if (x<a[midle])right = midle -1; else left = midle +1; } return -1; // trong day khong co x }
23
Tm kiem nh phan
Giai thuat tm nh phan co o phc tap tnh toan cap logn: T(n) = O(log 2 n)
24
Tm kiem nh phan
Nhan xet:
Giai
thuat tm nh phan da vao quan he gia tr cua cac phan t mang e nh hng trong qua trnh tm kiem, do vay ch ap dung c cho nhng day a co th t. Giai thuat tm nh phan tiet kiem thi gian hn rat nhieu so vi giai thuat tm tuan t do Tnh phan (n) = O(log 2 n) < Ttuan t (n) = O(n).
Cau truc D lieu - Tm kiem va Sap xep 25
Tm kiem nh phan
Nhan xet:
Khi
muon ap dung giai thuat tm nh phan can phai xet en thi gian sap xep day so e thoa ieu kien day so co th t. Thi gian nay khong nho, va khi day so bien ong can phai tien hanh sap xep lai => khuyet iem chnh cho giai thuat tm nh phan. Can can nhac nhu cau thc te e chon mot trong hai giai thuat tm kiem tren sao cho co li nhat.
Cau truc D lieu - Tm kiem va Sap xep 26
Sap xep la qua trnh x ly mot danh sach cac phan t (hoac cac mau tin) e at chung theo mot th t thoa man mot tieu chuan nao o da tren noi dung thong tin lu gi tai moi phan t.
28
Khai niem nghch the: Xet mot mang cac so a0, a1, an. co i<j va ai > aj, th ta goi o la mot nghch the. Mang cha sap xep se co nghch the. Mang a co th t se khong cha nghch the. a0 a1 an
Neu
29
Cac phng phap sap Phc tap xep thong dung Hieu quahn cao
Selection sort Insertion sort Interchange sort Bubble sort Shaker sort Binary Insertion sort
n gian, Chi ph cao
Shell sort Heap sort Quick sort Merge sort Radix sort
Lp thuat toan khac
30
Y tng: mo phong mot trong nhng cach sap xep t nhien nhat trong thc te: Chon phan t nho nhat trong N phan t ban au, a phan t nay ve v tr ung la au day hien hanh Xem day hien hanh ch con N-1 phan t cua day ban au, bat au t v tr th 2; lap lai qua trnh tren cho day hien hanh... en khi day hien hanh Cau truc D lieu - Tm1 phan Sap xep ch con kiem va t.
32
//input: day (a, N) //output: day (a, N) a c sap xep Bc 1 : i = V tr au; Bc 2 : Tm phan t a[min] nho nhat trong day hien hanh t a[i] en a[N]
Bc 3 : Neu min i: Hoan v a[min] va a[i] Bc 4 : Neu i cha la V tr cuoi i = V tr ke(i); Lap lai Bc 2 Ngc lai: Dng. //N phan t a nam ung v tr.
33
Selection sort V du
min 1 1 2 i Find MinPos(1, 8) 2 2 3 8 4 5 Swap(ai, amin) 5 1 6 6 7 4 8 1 5
34
Selection sort V du
1 1 i Find MinPos(2, 8) min 2 3 4 2 8 5 Swap(ai, amin) 5 1 2 6 6 7 4 8 1 5
35
Selection sort V du
1 1 Find MinPos(3, 8) min 2 3 4 2 i 8 5 Swap(ai, amin) 5 12 6 6 7 4 8 15
36
Selection sort V du
1 1 Find MinPos(4, 8) min 2 3 4 2 4 i 5 Swap(ai, amin) 5 12 6 6 7 8 8 15
37
Selection sort V du
Find MinPos(5, 8) 1 1 2 2 3 4 4 5 i Swap(ai, amin) min 5 12 6 6 7 8 8 15
38
Selection sort V du
Find MinPos(6, 8) 1 1 2 2 3 4 4 5 Swap(ai, amin) 5 6 i min 6 12 7 8 8 15
39
Selection sort V du
Find MinPos(7, 8) 1 1 2 2 3 4 4 5 Swap(ai, amin) 5 6 6 8 i min 7 1 2 8 1 15 5
40
Selection sort
void SelectionSort(int a[],int N ) { int min; // ch so phan t nho nhat trong day hien hanh for (int i=0; i<N-1 ; i++) { min = i; for(int j = i+1; j < N ; j++) if (a[j] < a[min]) min = j; // ghi nhan v tr phan t nho nhat if (min != i) Swap(a[min], a[i]); } }
Cau truc D lieu - Tm kiem va Sap xep 41
lt th i, can (N-i) lan so sanh e xac nh phan t nho nhat hien hanh. So lng phep so sanh khong phu thuoc vao tnh trang cua day so ban au. Trong moi trng hp, so lan so sanh la:
n(n 1) (n i) = 2 i =1
n1
42
So lan hoan v (mot hoan v bang 3 phep gan) phu thuoc vao tnh trang ban au cua day so
43
//input: day (a, N) //output: day (a, N) a c sap xep Bc 1: i = 2; // gia s co oan a[1] a c sap Bc 2: x = a[i]; Tm v tr pos thch hp trong oan a[1] en a[i] e chen x vao Bc 3: Di cho cac phan t t a[pos] en a[i-1] sang phai 1 v tr e danh cho cho x Bc 4: a[pos] = x; // co oan a[1]..a[i] a c sap Bc 5: i = i+1; Cau truc D lieuNeu i va Sap xep Bc 2. - Tm kiem n : Lap lai
46
Insertion Sort V du
1 1 2 2 2 3 8 4 5 5 1 6 6 7 4 8 1 5
47
Insertion Sort V du
1 1 2 2 Insert a2 into (1, 2) pos 2 3 4 2 i 8 5 5 1 6 6 7 4 8 1 5
x
Cau truc D lieu - Tm kiem va Sap xep 48
Insertion Sort V du
1 2 Insert a3 into (1, 3) pos 2 3 4 1 8 2 i 8 5 5 1 6 6 7 4 8 1 5
x
Cau truc D lieu - Tm kiem va Sap xep 49
Insertion Sort V du
1 2 Insert a4 into (1, 4) pos 2 3 4 8 5 1 2 i 5 5 1 6 6 7 4 8 1 5
x
Cau truc D lieu - Tm kiem va Sap xep 50
Insertion Sort V du
Insert a5 into (1, 5) 1 2 1 2 5 3 8 4 1 2 i pos 5 1 6 6 7 4 8 1 5
x
Cau truc D lieu - Tm kiem va Sap xep 51
Insertion Sort V du
Insert a6 into (1, 6) 1 1 2 2 3 5 4 8 6 5 1 2 i pos 6 6 7 4 8 1 5
x
Cau truc D lieu - Tm kiem va Sap xep 52
Insertion Sort V du
Insert a7 into (1, 7) 1 1 2 2 3 5 4 4 6 5 8 6 1 2 i pos 7 4 8 1 5
x
Cau truc D lieu - Tm kiem va Sap xep 53
Insertion Sort V du
Insert a8 into (1, 8) 1 1 2 2 3 4 4 5 5 6 6 8 7 1 2 i pos 8 1 5
x
Cau truc D lieu - Tm kiem va Sap xep 54
Insertion Sort V du
1 1 2 2 3 4 4 5 pos 5 6 6 8 7 1 2 8 1 5
55
for(int i=1 ; i<N ; i++) //oan a[0] a sap { x = a[i]; for(pos=i;(pos>0)&&(a[pos-1]>x);pos--) a[pos] = a[pos-1]; a[pos] = x;// chen x vao day } Cau truc D lieu - Tm kiem va Sap xep
56
Khi tm v tr thch hp e chen a[i] vao oan a[0] en a[i-1], do oan a c sap co the s dung giai thuat tm nh phan e thc hien viec tm v tr pos giai thuat sap xep chen nh phan Binary Insertion Sort Lu y: Chen nh phan ch lam giam so lan so sanh, khong lam giam so lan di cho. Ngoai ra, co the cai tien giai thuat chen trc tiep vi phan t cam canh e giam ieu kien kiem tra khi xac nh v tr pos.
57
58
Cac phep so sanh xay ra trong moi vong lap tm v tr thch hp pos. Moi lan xac nh v tr pos ang xet khong thch hp di cho phan t a[pos-1] en v tr pos. Giai thuat thc hien tat ca N-1 vong lap tm pos, do so lng phep so sanh va di cho nay phu thuoc vao tnh trang cua day so ban au, nen ch co the c lc trong tng trng hp nh sau:
59
//input: day (a, N) //output: day (a, N) a c sap xep Bc 1 : i = 1; // bat au t au day Bc 2 : j = i+1; //tm cac cap phan t a[j] < a[i], j>i Bc 3 : Trong khi j N thc hien Neu a[j]<a[i]: a[i]a[j]; j = j+1; Bc 4 : i = i+1; Neu i < n: Lap lai Bc 2. Ngc lai: Dng.
62
Interchange Sort V du
1 1 2 i j 2 2 3 8 4 5 5 1 6 6 7 4 8 1 5
63
Interchange Sort V du
1 1 i 2 1 2 2 j 3 8 4 5 5 2 6 6 7 4 8 1 5
64
Interchange Sort V du
1 1 2 2 i 3 1 4 2 j 4 8 5 5 6 6 7 4 8 1 5
65
Interchange Sort V du
1 1 2 2 3 4 i 4 1 5 2 j 5 8 6 6 7 5 8 1 5
66
Interchange Sort V du
1 1 2 2 3 4 4 5 5 6 6 8 7 1 2 8 1 5
67
68
So lng cac phep so sanh xay ra khong phu thuoc vao tnh trang cua day so ban au So lng phep hoan v thc hien tuy thuoc vao ket qua so sanh
69
Y tng chnh: Xuat phat t cuoi (au) day, oi cho cac cap phan t ke can e a phan t nho (ln) hn trong cap phan t o ve v tr ung au (cuoi) day hien hanh, sau o se khong xet en no bc tiep theo, lan x ly th i co v tr au day la i Lap lai x ly tren cho en khi khong con cap phan t nao e xet.
71
72
Bubble Sort V du
1 1 2 i 2 2 3 8 4 5 5 1 6 6 7 4 j 8 1 5
73
Bubble Sort V du
1 1 i 2 1 2 2 3 2 4 8 5 5 6 4 7 6 j 8 1 5
74
Bubble Sort V du
1 1 2 2 i 3 1 4 2 4 4 5 8 6 5 7 6 j 8 1 5
75
Bubble Sort V du
1 1 2 2 3 4 i 4 5 1 2 5 8 6 5 7 6 j 8 1 5
76
Bubble Sort V du
1 1 2 2 3 4 4 5 i 5 1 6 2 6 8 7 6 j 8 1 5
77
Bubble Sort V du
1 1 2 2 3 4 4 5 5 6 i 6 1 8 2 7 8 j 8 1 5
78
Bubble Sort V du
1 1 2 2 3 4 4 5 5 6 6 8 i 7 1 2 j 8 1 5
79
80
So lng cac phep so sanh xay ra khong phu thuoc vao tnh trang cua day so ban au So lng phep hoan v thc hien tuy thuoc vao ket qua so sanh
81
Khuyet iem: Khong nhan dien c tnh trang day a co th t hay co th t tng phan. Cac phan t nho c a ve v tr ung rat nhanh, trong khi cac phan t ln lai c a ve v tr ung rat cham.
82
Giai thuat ShakerSort: Da tren nguyen tac oi cho trc tiep Tm cach khac phuc cac nhc iem cua BubleSort Trong moi lan sap xep, duyet mang theo 2 lt t 2 pha khac nhau : Lt i: ay phan t nho ve au mang Lt ve: ay phan t ln ve cuoi mang
83
84
Bc 2 : Bc 2b : j = l ; // ay phan t ln ve cuoi mang Trong khi (j < r) : Neu a[j]>a[j+1]: a[j] a[j+1]; k = j;//lu lai ni xay ra hoan v j = j+1; r = k; //loai bt cac phan t a co th t cuoi day Bc 3 : Neu l < r: Lap lai Bc 2.
85
Khi tm phan t nho nhat bc i, phng phap sap xep chon trc tiep khong tan dung c cac thong tin a co c do cac phep so sanh bc i-1. Giai thuat Heap Sort khac phuc nhc iem nay bang cach chon ra c mot cau truc d lieu cho phep tch luy cac thong tin ve s so sanh gia tr cac phan t trong qua trnh sap xep.
87
Xet day so : 5 2 6 4 8 1 Gia s cac phan t cua day c bo tr theo quan he so sanh va tao thanh s o dang cay:
88
89
Loai bo 8 ra khoi cay va the vao cac cho trong gia tr - e tien viec cap nhat lai cay :
90
91
Tien hanh nhieu lan viec loai bo phan t goc cua cay cho en khi tat ca cac phan t cua cay eu la - , khi o xep cac phan t theo th t loai bo tren cay se co day a sap xep. e cai at thuat toan hieu qua, can phai to chc mot cau truc lu tr d lieu co kha nang the hien c quan he cua cac phan t trong cay vi n o nh thay v 2n-1 nh trong v du. Khai niem heap va phng phap sap xep Heapsort do J.Williams e xuat a giai quyet c cac kho khan tren.
92
nh ngha heap: Heap la mot day cac phan t aleft+1,... , aright thoa cac quan he:
aleft,
ai a2i ai a2i+1
vi i [left, right] Khi o (ai , a2i), (ai ,a2i+1) c goi la cac cap phan t lien i. Heap c nh ngha nh tren c dung trong trng hp sap xep tang dan, khi sap xep giam dan phai oi chieu Tm kiem va Sap Cau truc D lieu - cac quan he. xep
93
V du day la heap:
1 2 3 4 5 6 7 8
1 5
1 2
94
a2
a3
a4 a8
a5
a6
a7
95
Mot so tnh chat cua Heap: Tnh chat 1: Neu aleft, aleft+1, , aright la mot heap th khi cat bo mot so phan t hai au cua heap, day con con lai van la mot heap. Tnh chat 2: Neu a1, a2, , an la mot heap th phan t a1 (au heap) luon la phan t ln nhat trong heap. Tnh chat 3: Moi day con aleft, aleft+1, ..., aright thoa: 2left > right eu la heap.
96
97
Sap xep day tang dan qua 2 giai oan: Giai oan 1: Da vao tnh chat 3 cua heap e hieu chnh day ban au thanh heap Giai oan 2: Da vao cac tnh chat 1 va 2 cua heap e sap xep heap co c sau giai oan 1 thanh day tang dan
98
Van e: oi cho mot so phan t tren day a1, , aN e day tr thanh heap. Y tng: theo tnh chat 3, day con an/2+1 , an/2+2 ... an ng nhien la heap. Lan lt them vao pha trc day cac phan t an/2, an/2-1, , a1; moi bc them vao can hieu chnh v tr cac phan t theo moi quan he lien i ta se nhan c heap mong muon.
99
Bc 2: Trong khi left > 0 //Lu y: oan aleft+1, , aN a la heap Bc 21: Hieu chnh oan aleft, , aN thanh heap Bc 22: left = left - 1; //Het lap
100
101
102
103
104
105
Van e: Sap xep heap a1, , aN thanh day tang dan //at: right = N day a1, , aright la heap. Y tng: Theo tnh chat 2: a1 se la phan t ln nhat, v vay v tr ung cua a1 phai la right - cuoi day. oi cho (a , a 1 right) c them mot phan t ung v tr Theo tnh chat 3: day con a2, , aright-1 van la heap Giam right, them a vao day va hieu 1
106
107
108
109
110
111
112
113
Y tng: do aleft+1, aleft+2, , aright la heap nen tat ca cac phan t nay eu a thoa ieu kien lien i van e tr thanh: kiem tra quan he lien i cua aleft va oi cho aleft vi lien i thch hp cua no neu quan he lien i b vi pham; sau khi hieu chnh s vi pham ieu kien lien i co the lan truyen en cac v tr mi hieu chnh.
114
115
Heap sort Hieu chnh heap Nhan xet: Qua trnh hieu chnh co nhieu
bc oi cho trung gian khong can thiet. Trong v du: oi cho (2, 15), sau o oi cho tiep (2, 5): v tr cuoi cung cua 2 la 8, 2 v tr 4 ch la tam thi, khong can thiet. Co the thc hien viec di cho hang loat, sau o a gia tr can hieu chnh vao ung cho
116
//output: day con aleft, aleft+1, , aright la heap Bc 1: curr = left; x = a curr; //Bat au kiem tra t v tr left joint = 2*curr; //Lien i th nhat cua curr Bc 2: Trong khi (joint right) //Con lien i e xet Bc 21: Neu (joint < right) && (a joint+1 > ajoint) joint = joint + 1; //joint: v tr lien i ln nhat Cau truc D lieu - Tm kiem va Sap xep x Bc 22: Neu a //Thoa ieu117
118
e cai at giai thuat dng cac thu tuc: Thu tuc hieu chnh aright thanh heap:
Thu
Thu
dan:
Cau truc D lieu - Tm kiem va Sap xep
120
121
123
ShellSort la mot phng phap cai tien cua phng phap sap xep chen trc tiep. Y tng cua phng phap sap xep nay la xem xet day ban au nh nhng day con gom cac phan t cach nhau len v tr; tien hanh sap xep tren tng day con; giam dan bc len en khi len = 1 sap xep xong: Day ban au : a1, a2, ..., aN c xem nh s xen ke cua cac day con sau : Day con th nhat : a1 alen+1 a2len+1 ... Day con th hai : a2 alen+2 a2len+2 ...
....
125
127
Shell sort V du
len = 5; joint
1 1 2
h = (5, 3, 1); k =3
3 8 4 5 5 1 curr 6 6 7 4 8 1 5
2 2
128
Shell sort V du
len = 5;
1 6 2 2 3 8 4 5
h = (5, 3, 1); k =3
5 1 6 1 2 7 4 8 1 5
129
Shell sort V du
len = 3 joint
1 6 2 2 3 1 5 curr 4 5
h = (5, 3, 1); k =3
5 1 6 1 2 7 4 8 8
130
Shell sort V du
len = 3 joint
1 5 2 1 3 1 2 joint 4 6
h = (5, 3, 1); k =3
5 2 6 1 5 curr 7 4 8 8
131
Shell sort V du
len = 3
1 4 2 1 3 1 2 4 5
h = (5, 3, 1); k =3
5 2 6 1 5 7 6 8 8
132
Shell sort V du
len = 1 curr joint joint
1 2 4 1 joint 3 1 2
h = (5, 3, 1); k =3
4 5 5 2 6 1 5 7 6 8 8
133
Shell sort V du
len = 1 joint joint
1 1 2 4 joint 3 5 joint 4 1 2 curr joint 5 2
h = (5, 3, 1); k =3
joint 6 1 5 joint 7 6 8 8
134
Shell sort V du
1 1 2 2 3 4 4 5 5 6 6 8 7 1 2 8 1 5
135
Yeu to quyet nh tnh hieu qua cua thuat toan: Cach chon khoang cach h trong tng bc sap xep So bc sap xep. Gia s quyet nh sap xep k bc, cac khoang cach chon phai thoa ieu kien : hi > hi+1 va hk = 1
137
Cha co tieu chuan ro rang trong viec la chon day gia tr khoang cach tot nhat. Mot gi y: day c chon khong nen co cac so la boi so cua nhau. Mot so day c Knuth e ngh : hi = (hi-1 - 1)/3 va hk = 1, k = log3n-1 v du: 121, 40, 13, 4, 1 hay hi = (hi-1 - 1)/2 va hk = 1, k = log2n-1 v du: 15, 7, 3, 1
138
Viec anh gia giai thuat Shellsort dan en nhng van e toan hoc rat phc tap, tham ch mot so cha c chng minh. Hieu qua cua thuat toan con phu thuoc vao day cac o dai c chon. Trong trng hp chon day o dai theo cong thc hi = (hi-1 - 1)/2 va hk = 1, k = log2N-1 th giai thuat co o phc tap n1,2 << n2
139
Giai thuat QuickSort sap xep day a1, a2 ..., aN da tren viec phan hoach day ban au thanh 3 phan : Phan 1: Gom cac phan t co gia tr khong ln hn x Phan 2: Gom cac phan t co gia tr bang x Phan 3: Gom cac phan t co gia tr khong be hn x vi x la gia tr cua mot phan t tuy y trong day ban au. Sau khi thc hien phan hoach, day ban au c phan thanh 3 oan:
142
143
Quick sort V du
X i 1 1 2 left 2 2 5 3 8 4 5 5 1
STOP
STOP
Quick sort V du
X 1 4 left i 2 2 5 3 8 4 5 5 1
STOP
STOP
Quick sort V du
1 4 left 2 2 j 3 1 4 5 i 5 8 6 6 7 1 2 8 1 5 right
148
Quick sort V du
1 1 2 2 3 4 4 5 i 5 8 left
STOP
STOP
Quick sort V du
1 1 2 2 3 4 4 5 j 5 6 left i 6 8 7 1 2 8 1 5 right
150
Shell sort V du
1 1 2 2 3 4 4 5 5 6 6 8 7 1 2 8 1 5
151
Ve nguyen tac, co the chon gia tr moc x la mot phan t tuy y trong day, nhng e n gian, phan t co v tr gia thng c chon, khi o p = (l +r)/ 2. Gia tr moc x c chon se co tac ong en hieu qua thc hien thuat toan v no quyet nh so lan phan hoach. So lan phan hoach se t nhat neu ta chon c x la phan t trung v (median), nhieu nhat neu x la cc tr cua day. Tuy nhien do chi ph xac nh phan t median qua cao nen trong thc te ngi
153
155
Sap xep theo phng phap tron trc tiep Merge Sort
Giai thuat Merge sort sap xep day a1, a2, ..., an da tren nhan xet sau:
Moi
day a1, a2, ..., an bat ky la mot tap hp cac day con lien tiep ma moi day con eu a co th t. V du: day 12, 2, 8, 5, 1, 6, 4, 15 co the coi nh gom 5 day con khong giam (12); (2, 8); (5); (1, 6); (4, 15). Day a co th t coi nh co 1 day con.
tiep can: tm cach lam giam so kiem va Sap xep Cau truc D lieu - Tm day con khong giam cua
Hng
157
Bc 1 : k = 1; // day con co 1 phan t la day khong giam Bc 2 : Lap trong khi (k < N) // day con hn 1 day con Bc 21: Phan phoi eu luan phien day a1, a2, , an thanh 2 day b, c theo tng nhom k phan t lien tiep nhau.
//b = a1, , ak, a2k+1, , a3k, //c = ak+1, , a2k, a3k+1, , a4k,
22: Tron tng cap day con gom k phan t cua 2 day b, c vao a. D lieu - Tm = k*2; Cau truc Bc 23: k kiem va Sap xep 159
Bc
Merge sort V du
k = 1;
1 1 2 2 2 3 8 Phan phoi eu luan phien 4 5 6 7 8 5 1 6 4 1 5
160
Merge sort V du
k = 1;
1 1 2 2 2 3 8 Phan phoi eu luan phien 4 5 6 7 8 5 1 6 4 1 5
161
Merge sort V du
k = 1;
1 2 3 Tron tng cap ng chay 4 5 6 7 8
1 2 2
8 5
1 6
4 1 5
162
Merge sort V du
k = 1;
1 2 3 Tron tng cap ng chay 4 5 6 7 8
1 2 2
8 5
1 6
4 1 5
163
Merge sort V du
k = 2;
1 2 2 1 2 3 5 Phan phoi eu luan phien 4 5 6 7 8 8 1 6 4 1 5
164
Merge sort V du
k = 2;
1 2 3 Tron tng cap ng chay 4 5 6 7 8
2 5
1 2 8
1 4
6 1 5
165
Merge sort V du
k = 2;
1 2 3 Tron tng cap ng chay 4 5 6 7 8
2 5
1 2 8
1 4
6 1 5
166
Merge sort V du
k = 4;
1 2 2 5 3 8 Phan phoi eu luan phien 4 5 6 7 8 1 2 1 4 6 1 5
167
Merge sort V du
k = 4;
1 2 3 Tron tng cap ng chay 4 5 6 7 8
2 1
5 4
8 6
1 2 1 5
168
Merge sort V du
k = 4;
1 2 3 Tron tng cap ng chay 4 5 6 7 8
2 1
5 4
8 6
1 2 1 5
169
Merge sort V du
k = 8;
1 1 2 2 3 4 4 5 5 6 6 8 7 1 2 8 1 5
STOP
Only one subarray
170
Merge sort V du
1 1 2 2 3 4 4 5 5 6 6 8 7 1 2 8 1 5
171
Cac ham can cai at: MergeSort: Sap xep mang (a, N) tang dan
void MergeSort(int a[], int N);
mang a
c vao a
172
173
So lan thc hien viec chia luan phien va tron: Sau moi lan tach tron, o dai K cua day con tang gap oi So lan tach tron trong thuat toan: log2n .
Chi ph thc hien tach - tron t le thuan vi n. Chi ph thc hien cua giai thuat MergeSort la O(nlog2n).
178
Mot nhc iem ln na cua cac thuat toan tron la khi cai at thuat toan oi hoi them khong gian bo nh e lu cac day phu b, c. Han che nay kho chap nhan trong thc te v cac day can sap xep thng co kch thc ln. V vay thuat toan tron thng c dung e sap xep cac cau truc d lieu khac phu hp hn nh danh sach lien ket hoac file.
179
Sap xep theo phng phap tron trc tiep Thuat toan tron t nhien
Natural Merge sort
Mot ng chay cua day so a la mot day con khong giam cua cc ai cua a. Ngha la, ng chay r= (ai, ai+1, , aj) phai thoa ieu kien:
ak ak +1 ai < ai 1 a > a j +1 j
k [i, j )
V du day 12, 2, 8, 5, 1, 6, 4, 15 co the coi nh gom 5 ng chay (12); (2, 8); (5); (1, 6); (4, 15).
180
Sap xep theo phng phap tron trc tiep Thuat toan tron t nhien
Natural Merge sort
Thuat toan tron t nhien khac thuat toan tron trc tiep cho thay v luon cng nhac phan hoach theo day con co chieu dai k, viec phan hoach se theo n v la ng chay. ta ch can biet so ng chay cua a sau lan phan hoach cuoi cung la co the biet thi iem dng cua thuat toan v day a co th t la day chi co mot ng chay.
181
Sap xep theo phng phap tron trc tiep Thuat toan tron t nhien
Natural Merge sort
Bc 1 : // Chuan b r = 0; // r dung e em so dng chay Bc 2 : Tach day a1, a2, , an thanh 2 day b, c theo nguyen tac luan phien tng ng chay: Bc 2.1 : Phan phoi cho b mot ng chay; r = r+1; Neu a con phan t cha phan phoi Phan phoi cho c mot ng chay; r = r+1; Bc 2.2 : Neu a con phan t: quay lai bc 2.1; Bc 3 : Tron tng cap ng chay cua 2 day b, c vao a. Cau truc D lieu - Tm kiem va Sap xep Bc 4 :
182
Radix Sort la mot thuat toan tiep can theo mot hng hoan toan khac. Neu nh trong cac thuat toan khac, c s e sap xep luon la viec so sanh gia tr cua 2 phan t th Radix Sort lai da tren nguyen tac phan loai th cua bu ien. V ly do o Radix Sort con co ten la Postmans sort. Radix Sort khong he quan tam en viec so sanh gia tr cua phan t ma ban than viec phan loai va trnh t phan loai se tao ra th t cho cac phan t.
184
185
Mo phong lai qui trnh tren, e sap xep day a1, a2, ..., an, giai thuat Radix Sort thc hien nh sau: Trc tien, ta co the gia s moi phan t ai trong day a1, a2, ..., an la mot so nguyen co toi a m ch so. Ta phan loai cac phan t lan lt theo cac ch so hang n v, hang chuc, hang tram, tng t viec phan loai th theo tnh thanh, quan huyen, phng xa, .
186
Bc 1 :// k cho biet ch so dung e phan loai hien hanh k = 0; // k = 0: hang n v; k = 1: hang chuc; Bc 2 : //Tao cac lo cha cac loai phan t khac nhau Khi tao 10 lo B0, B1, , B9 rong; Bc 3 : For i = 1 .. n do at a vao lo B vi t: ch so th k i t cua ai; Bc 3 :
187
188
189
190
191
192
anh gia giai thuat: Vi mot day n so, moi so co toi a m ch so, thuat toan thc hien m lan cac thao tac phan lo va ghep lo. Trong thao tac phan lo, moi phan t ch c xet ung mot lan, khi ghep cung vay. Nh vay, chi ph cho viec thc hien thuat toan hien nhien la O(2mn) = O(n).
193
lan phan phoi th k cac phan t cua A vao cac lo B0, B1, , B9, va lay ngc tr ra, neu ch xet en k+1 ch so cua cac phan t trong A, ta se co mot mang tang dan nh trnh t lay ra t 0 9. Nhan xet nay bao am tnh ung an cua thuat toan. Thuat toan co o phc tap tuyen tnh nen hieu qua khi sap day co rat nhieu phan t, nhat la khi khoa sap xep khong qua dai so vi so lng
194
toan khong co trng hp xau nhat va tot nhat. Moi day so eu c sap vi chi ph nh nhau neu chung co cung so phan t va cac khoa co cung chieu dai. Thuat toan cai at thuan tien vi cac mang vi khoa sap xep la chuoi (ky t hay so) hn la khoa so nh trong v du do tranh c chi ph lay cac ch so cua tng so.
Cau truc D lieu - Tm kiem va Sap xep 195
lng lo ln (10 khi dung so thap phan, 26 khi dung chuoi ky t tieng Anh, ) nhng tong kch thc cua tat ca cac lo ch bang day ban au nen ta khong the dung mang e bieu dien B. Nh vay, phai dung cau truc d lieu ong e bieu dien B Radix Sort rat thch hp cho sap xep tren danh sach lien ket.
196
ta cung dung phng phap phan lo theo bieu dien nh phan cua khoa sap xep. Khi o ta co the dung hoan toan cau truc d lieu mang e bieu dien B v ch can dung hai lo B0 va B1. Tuy nhien, khi o chieu dai khoa se ln. Khi sap cac day khong nhieu phan t, thuat toan Radix sort se mat u the so vi cac thuat toan khac.
197
Tho lun
198