You are on page 1of 198

Tm kiem &Sap xep

Tm kiem & Sap xep


Muc tieu:

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:

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cac giai thuat tm kiem noi


Tm

kiem tuan t Tm kiem nh phan

Cac giai thuat tm kiem noi


Bai toan: Tm v tr xuat hien cua phan t co gia tr x tren danh sach ac a Tap d lieu c lu tr la day so a1, a2, ... ,aN
int a[N];
Khoa

can tm la x
x;

int

Cau truc D lieu - Tm kiem va Sap xep

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.

Cau truc D lieu - Tm kiem va Sap xep

Tm kiem tuan t

V du: Cho day so a 12 2 8 5 Gia tr can tm: 8 i=1

15

Cau truc D lieu - Tm kiem va Sap xep

Tm kiem tuan t

i=2

i=3

Cau truc D lieu - Tm kiem va Sap xep

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 }

Cau truc D lieu - Tm kiem va Sap xep

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.

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

13

Tm kiem tuan t

anh gia giai thuat:

Vay giai thuat tm tuan t co o phc tap tnh toan cap n: T(n) = O(n)

Cau truc D lieu - Tm kiem va Sap xep

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 .

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

V du: Cho day so a gom 8 phan t: 1 2 4 5 6 8 12 15 Gia tr can tm la 8

Cau truc D lieu - Tm kiem va Sap xep

20

Tm kiem nh phan

left = 1, right = 8, mid = 4

Cau truc D lieu - Tm kiem va Sap xep

21

Tm kiem nh phan

left = 5, right = 8, mid = 6

Cau truc D lieu - Tm kiem va Sap xep

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 }

Cau truc D lieu - Tm kiem va Sap xep

23

Tm kiem nh phan

anh gia giai thuat:

Giai thuat tm nh phan co o phc tap tnh toan cap logn: T(n) = O(log 2 n)
24

Cau truc D lieu - Tm kiem va Sap xep

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

Cac giai thuat Sap xep noi

nh ngha bai toan sap xep

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.

Cau truc D lieu - Tm kiem va Sap xep

28

Khai niem nghch the

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

30

Phng phap chon trc tiep Selection sort

Selection sort Y tng

Nhan xet: Mang co th t th ai=min(ai, ai+1, , an-1)

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

Selection sort Thuat toan

//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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Selection sort anh gia giai thuat

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

Cau truc D lieu - Tm kiem va Sap xep

42

Selection sort anh gia giai thuat

So lan hoan v (mot hoan v bang 3 phep gan) phu thuoc vao tnh trang ban au cua day so

Cau truc D lieu - Tm kiem va Sap xep

43

Phng phap Chen trc tiep Insertion Sort

Insertion Sort Y tng


Nhan xet: moi day a1 , a2 ,..., an luon co i-1 phan t au tien a1 , a2 ,... ,ai-1 a co th t (2 i). Y tng chnh: tm cach chen phan t ai vao v tr thch hp cua oan a c sap e co day mi a1 , a2 ,... ,ai tr nen co th t. V tr nay chnh la pos thoa apos-1 ai < apos (1 pos i). Chi tiet hn: Day ban au a1 , a2 ,..., an, xem nh a co oan gom mot phan t a1 a c sap. Them a2 vao oan a1 se co oan a1 a2 Cau truc c sap kiem va Sap xep D lieu - Tm 45

//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

Insertion Sort Thuat toan

46

Insertion Sort V du
1 1 2 2 2 3 8 4 5 5 1 6 6 7 4 8 1 5

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

55

Insertion Sort Cai at


void InsertionSort(int a[], int N ) { int pos, i; int x;//lu tr a[i] tranh b ghi e khi di cho cac
phan t.

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

Insertion Sort Nhan xet

Cau truc D lieu - Tm kiem va Sap xep

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

Binary Insertion Sort Cai at


void BInsertionSort(int a[], int N ) { int l,r,m,i; int x;//lu tr gia tr a[i] tranh b ghi e khi di cho cac phan t. for(int i=1 ; i<N ; i++) { x = a[i]; l = 1; r = i-1; while(i<=r) // tm v tr chen x { m = (l+r)/2; // tm v tr thch hp m if(x < a[m]) r = m-1; else l = m+1; } for(int j = i ; j >l ; j--) a[j] = a[j-1]; // di cho cac phan t se ng sau x a[l] = x; // chen x vao day } }

Cau truc D lieu - Tm kiem va Sap xep

58

Insertion Sort anh gia giai thuat

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:

Cau truc D lieu - Tm kiem va Sap xep

59

Phng phap oi cho trc tiep Interchange Sort

Interchange Sort Y tng


Nhan xet: e sap xep mot day so, ta co the xet cac nghch the co trong day va lam triet tieu dan chung i. Y tng chnh: Xuat phat t au day, tm tat ca nghch the cha phan t nay, triet tieu chung bang cach oi cho phan t nay vi phan t tng ng trong cap nghch the. Lap lai x ly tren vi cac phan t tiep theo trong day

Cau truc D lieu - Tm kiem va Sap xep 61

Interchange Sort Thuat toan

//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

Cau truc D lieu - Tm kiem va Sap xep

Interchange Sort V du
1 1 2 i j 2 2 3 8 4 5 5 1 6 6 7 4 8 1 5

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

66

Interchange Sort V du
1 1 2 2 3 4 4 5 5 6 6 8 7 1 2 8 1 5

Cau truc D lieu - Tm kiem va Sap xep

67

Interchange Sort - Cai at


void InterchangeSort(int a[], int N) { int i, j; for (i = 0 ; i<N-1 ; i++) for (j =i+1; j < N ; j++) if(a[j]< a[i]) //neu co nghch the th oi cho Swap(a[i],a[j]); }

Cau truc D lieu - Tm kiem va Sap xep

68

Interchange Sort anh gia giai thuat


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

Cau truc D lieu - Tm kiem va Sap xep

69

Phng phap noi bot Bubble sort

Bubble sort Y tng

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

Cau truc D lieu - Tm kiem va Sap xep

Bubble sort Thuat toan


//input: day (a, N) //output: day (a, N) a c sap xep Bc 1 : i = V tr au; Bc 2 : j = V tr cuoi;//Duyet t cuoi day ngc ve v tr i Trong khi (j > i) thc hien: Neu a[j]<a[j-1]: a[j]a[j-1];//xet cap phan t ke can j = V tr trc(j); Bc 3 : i = V tr ke(i); // lan x ly ke tiep Neu i = V tr cuoi: Dng. // Het day. Ngc lai : Lap lai Bc 2.

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

79

Bubble sort - Cai at


void BubbleSort(int a[], int N) { int i, j; for (i = 0 ; i<N-1 ; i++) for (j =N-1; j>i ; j --) if(a[j]< a[j-1]) Swap(a[j], a[j-1]); }

Cau truc D lieu - Tm kiem va Sap xep

80

Bubble sort - anh gia giai thuat

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

Cau truc D lieu - Tm kiem va Sap xep

81

Bubble sort - anh gia giai thuat

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.

Cau truc D lieu - Tm kiem va Sap xep

82

Bubble sort Cai tien

Cau truc D lieu - Tm kiem va Sap xep

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

Giai thuat ShakerSort


//input: day (a, N) //output: day (a, N) a c sap xep Bc 1 : l = 1; r = n; //t l en r la oan can c sap xep k = n; // ghi nhan lai v tr k xay ra hoan v sau cung // e lam c s thu hep oan l en r Bc 2 : Bc 2a : j = r ; // ay phan t nho ve au mang Trong khi (j > l) : Neu a[j]<a[j-1]: a[j] a[j-1];

Cau truc D lieu - Tm kiem va Sap xep

84

Giai thuat ShakerSort

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

Cau truc D lieu - Tm kiem va Sap xep

Sap xep cay Heap Sort

Sap xep cay - Heap sort

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.

Cau truc D lieu - Tm kiem va Sap xep

87

Sap xep cay - Heap sort


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:

Cau truc D lieu - Tm kiem va Sap xep

88

Sap xep cay - Heap sort


Phan t mc i chnh la phan t ln trong cap phan t tng ng mc i+1 phan t mc 0 (nut goc cua cay) luon la phan t ln nhat cua day. Neu loai bo phan t goc ra khoi cay (ngha la a phan t ln nhat ve ung v tr), th viec cap nhat cay ch xay ra tren nhng nhanh lien quan en phan t mi loai bo, con cac nhanh khac c bao toan, ngha la bc ke tiep co the s dung lai cac ket qua so sanh bc hien tai.

Cau truc D lieu - Tm kiem va Sap xep

89

Sap xep cay - Heap sort

Loai bo 8 ra khoi cay va the vao cac cho trong gia tr - e tien viec cap nhat lai cay :

Cau truc D lieu - Tm kiem va Sap xep

90

Sap xep cay - Heap sort


Toan bo nhanh trai cua cay cu c bao toan Bc ke tiep e chon c phan t ln nhat hien hanh la 6, ch can lam them mot phep so sanh 1 vi 6.

Cau truc D lieu - Tm kiem va Sap xep

91

Sap xep cay - Heap sort

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

Cau truc D lieu - Tm kiem va Sap xep

Sap xep cay - Heap sort

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

Cau truc D lieu - Tm kiem va Sap xep

94

Sap xep cay Heap sort


a1 Cac phan t cua day c bieu dien theo cac moi quan he lien i

a2

a3

a4 a8

a5

a6

a7

Cau truc D lieu - Tm kiem va Sap xep

95

Sap xep cay - Heap sort

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

Cau truc D lieu - Tm kiem va Sap xep

V du cac tnh chat cua heap:


1 1 5 2 1 2 1 2 3 8 8 4 5 5 5 1 1 1 6 6 6 6 7 4 4 4 2 8 2

Cau truc D lieu - Tm kiem va Sap xep

97

Sap xep cay - Heap sort

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

Cau truc D lieu - Tm kiem va Sap xep

98

Heap sort Giai oan 1

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.

Cau truc D lieu - Tm kiem va Sap xep

99

Heap sort Giai oan 1


//input: day (a, N) //output: day (a, N) la mot heap Bc 1: left = N/2; //Them cac phan t aleft, .., a1 vao heap

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

Cau truc D lieu - Tm kiem va Sap xep

100

Heap sort Giai oan 1


1 1 2 2 2 3 8 4 5 5 1 6 6 7 4 8 1 5

Cau truc D lieu - Tm kiem va Sap xep

101

Heap sort Giai oan 1


1 1 2 2 2 3 8 curr 4 5 left 5 1 joint 6 6 7 4 joint 8 1 5 5

Cau truc D lieu - Tm kiem va Sap xep

102

Heap sort Giai oan 1


1 1 2 curr 2 2 3 8 left joint 4 1 5 joint 5 1 6 6 7 4 joint 8 5

Cau truc D lieu - Tm kiem va Sap xep

103

Heap sort Giai oan 1


curr 1 1 2 joint 2 1 5 left joint 3 8 4 5 5 1 6 6 7 4 8 2

Cau truc D lieu - Tm kiem va Sap xep

104

Heap sort Giai oan 1


1 1 5 2 1 2 3 8 4 5 5 1 6 6 7 4 8 2

Cau truc D lieu - Tm kiem va Sap xep

105

Heap sort Giai oan 2

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

Cau truc D lieu - Tm kiem va Sap xep

106

Heap sort Giai oan 2


//input: day (a, N) la heap //output: day (a, N) sap tang dan Bc 1: right = N; //Bat au thc hien t cuoi day Bc 2: Trong khi right > 1 //a phan t ln nhat (a1)ve v tr right Bc 21: Hoanv (a , a 1 right); //Loai bo phan t ln nhat ra khoi heap Bc 22: right := right -1; Bc 23: Hieu chnh oan a , a , , a 1 2 right

Cau truc D lieu - Tm kiem va Sap xep

107

Heap sort Giai oan 2


1 1 5 2 1 2 3 8 4 5 5 1 6 6 7 4 8 2 right Swap(a1, aright)

Cau truc D lieu - Tm kiem va Sap xep

108

Heap sort Giai oan 2


curr 1 2 joint 2 1 2 joint 3 8 4 5 Shift(a, 1, right) 5 1 6 6 7 4 8 1 5 right

Cau truc D lieu - Tm kiem va Sap xep

109

Heap sort Giai oan 2


1 1 2 2 5 3 8 4 2 5 1 6 6 7 4 right Swap(a1, aright) 8 1 5

Cau truc D lieu - Tm kiem va Sap xep

110

Heap sort Giai oan 2


curr 1 4 joint 2 5 joint 3 8 4 2 Shift(a, 1, right) 5 1 joint 6 6 7 1 2 right 8 1 5

Cau truc D lieu - Tm kiem va Sap xep

111

Heap sort Giai oan 2


1 8 2 5 3 6 4 2 5 1 6 4 right Swap(a1, aright) 7 1 2 8 1 5

Cau truc D lieu - Tm kiem va Sap xep

112

Heap sort Giai oan 2


1 4 2 5 3 6 4 2 5 1 6 8 7 1 2 1 2 8 1 5 1 5

Cau truc D lieu - Tm kiem va Sap xep

113

Heap sort Hieu chnh heap Van e: day con a ,a , , a la heap,


left+1 left+2 right

can hieu chnh lai e aleft, , aright la heap

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

Cau truc D lieu - Tm kiem va Sap xep

Heap sort Hieu chnh heap


1 curr 2 2 left 3 8 joint 4 1 5 joint 5 1 6 6 7 4 joint 8 2 5 right

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

116

Heap sort Hieu chnh heapday con a , a , , a la heap //input:


left+1 left+2 right

//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

Heap sort Hieu chnh heap


1 curr 2 2 left 3 8 joint 4 1 5 ??? 5 1 6 6 7 4 joint 8 2 5 right

Cau truc D lieu - Tm kiem va Sap xep

118

Heap sort Cai at

e cai at giai thuat dng cac thu tuc: Thu tuc hieu chnh aright thanh heap:
Thu

Heapsort can xay day aleft, aleft+1, ,

void Shift (int a[], int left, int right)

tuc chuyn i day a0, a2, , aN-1 thanh heap:


void CreateHeap(int a[], int N )

Thu

tuc sap xep day a0, a2, , aN-1 tang


119

dan:
Cau truc D lieu - Tm kiem va Sap xep

void HeapSort(int a[], int N)

Heap sort Cai at


void Shift (int a[], int left, int right) { int x, curr, joint; curr = left; joint =2*curr+1;// ajoint: phan t lien i x = a[curr]; while (joint <= right) { if (joint < right) // neu co u 2 phan t lien i if (a[joint] < a[joint+1]) joint = joint+1; if (a[joint]<x) break; //thoa quan he lien i a[curr] = a[joint]; curr = joint; // xet tiep kha nang hieu chnh lan truyen joint = 2*curr+1;

Cau truc D lieu - Tm kiem va Sap xep

120

Heap sort Cai at


void CreateHeap(int a[], int N) { int left; //left: v tr phn t cn ghp thm for (left = (N-1)/2; left >= 0; left --) Shift(a, left, N-1); }

Cau truc D lieu - Tm kiem va Sap xep

121

Heap Sort Cai at


void HeapSort (int a[], int N) { int right; CreateHeap(a, N); //sap xep day a thanh heap right = N-1; // right la v tr ung cho phan t ln nhat while (right > 0) do { Swap(a[0],a[right]); right --; Shift(a,0,right); } }
Cau truc D lieu - Tm kiem va Sap xep 122

Heap Sort anh gia giai thuat


Viec anh gia mot cach chnh xac giai thuat Heapsort rat phc tap. Tuy nhien, co the anh gia mot cach tng oi da vao mot so nhan xet: Khi xem xet heap dang cay quan he lien i cac phan t cua heap tao thanh cay nh phan co o cao h log2N. moi bc hieu chnh, so phep ieu chnh cac vi pham lien i khong vt qua chieu cao h cua cay lien i. ca giai oan 1 va giai oan 2 so phep hieu chnh khong vt qua N Trong trng hp xau nhat o phc tap thuat toan O(Nlog2N)

Cau truc D lieu - Tm kiem va Sap xep

123

Sap xep chen vi o dai bc giam dan Shell Sort

Shell sort Y tng

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

Cau truc D lieu - Tm kiem va Sap xep

Shell sort Y tng


Viec sap xep cac phan t trong cung day con se lam cho cac phan t c a ve v tr ung tng oi (ch ung trong day con, so vi toan bo cac phan t trong day ban au co the cha ung) mot cach nhanh chong. Khi khoang cach len giam tao thanh cac day con mi mot phan t c so sanh vi nhieu phan t khac trc o khong cung day con vi no. Thuat toan dng sau khi sap xong day con vi len = 1, thuat toan luc nay thc hien nh thuat toan chen trc tiep. Tuy nhien, phan ln cac phan t trong day a co th t bo phan. Cau truc D lieu - Tm kiem va Sap xep 126

Shell sort Thuat toan


//input: day (a, N); day (h, k): k o dai cac bc lap - const //output: day (a, N) la c sap tang dan Bc 1: step = 1; //h[step]: o dai bc lap Bc 2: Trong khi (step k) //o dai bc con >1 Bc 21: len = h[step]; //lay o dai bc Bc 22: Lap vi i=len+1 .. N //sap xep cac day lien //i bc len Chen a[i] vao day lien i bc

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

134

Shell sort V du
1 1 2 2 3 4 4 5 5 6 6 8 7 1 2 8 1 5

Cau truc D lieu - Tm kiem va Sap xep

135

Shell sort Cai at


int h[MAXK], k; void ShellSort(int a[], int N) { int step, i, pos, x, len; for (step = 0 ; step <k; step ++) { len = h[step]; //khoang cach 2 phan t lien tiep
cua day con

for (i = len; i <N; i++) { x = a[i];


for(pos=i;(pos-len>=0)&&(x<a[pos-len]);pos-=len)

a[pos] = a[pos-len]; a[pos] = x; } }


Cau} truc D lieu - Tm kiem va Sap xep 136

Shell sort anh gia giai thuat

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

Cau truc D lieu - Tm kiem va Sap xep

137

Shell sort anh gia giai thuat

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

Cau truc D lieu - Tm kiem va Sap xep

138

Shell sort anh gia giai thuat

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

Cau truc D lieu - Tm kiem va Sap xep

139

Sap xep da tren phan hoach Quick sort

Quick sort Y tng


Mot vai han che cua thuat toan oi cho trc tiep: Moi lan oi cho ch thay oi 1 cap phan t trong nghch the; cac trng hp nh: i < j < k va ai > aj > ak (*) ch can thc hien 1 lan oi cho (ai, ak): thuat toan khong lam c. o phc tap cua thuat toan O(N2) khi N u ln thuat toan se rat cham Y tng: phan chia day thanh cac oan con tan dung c cac phep oi cho dang (*) va lam giam o dai day khi sap xep cai thien ang ke o phc tap Cau truc D lieu - Tm kiem va Sap xep 141 cua thuat toan.

Quick sort Y tng

Cau truc D lieu - Tm kiem va Sap xep

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

Quick sort Y tng


oan th 2 a co th t. Neu cac oan 1 va 3 ch co 1 phan t th chung cung a co th t, khi o day con ban au a c sap. Ngc lai, neu cac oan 1 va 3 co nhieu hn 1 phan t th day con ban au ch co th t khi cac oan 1, 3 c sap. e sap xep cac oan 1 va 3, ta lan lt tien hanh viec phan hoach tng day con theo cung phng phap phan hoach day ban au va trnh bay Cau truc D lieu - Tm kiem va Sap xep

143

Quick sort Giai thuat


//input: day con (a, left, right) //output: day con (a, left, right) c sap tang dan Bc 1: Neu left right //day co t hn 2 phan t Ket thuc; //day a c sap xep Bc 2: Phan hoach day aleft aright thanh cac oan: aleft.. aj, aj+1.. ai-1, ai.. Aright //oan 1 x - oan 2: aj+1.. ai-1 = x - oan 3: ai.. aright x

Bc 3: Sap xep oan 1: aleft.. aj Bc 4: Sap xep oan 3: ai.. aright


144

Cau truc D lieu - Tm kiem va Sap xep

Quick sort Phan hoach day con a , , a //input: day


left right

//output: day con chia thanh 3 oan: oan 1 oan 2 oan 3


Bc 1: Chon tuy y mot phan t a[p] trong day con la gia tr moc: x = a[p]; Bc 2: Duyet t 2 au day e phat hien va hieu chnh cap phan t a[i], a[j] vi pham ieu kien Bc 21: i = left; j = right; Bc 22: Trong khi (a[i]<x) i++; Bc 23: Trong khi (a[j]>x) j--; Bc 24: Neu i<= j // a[i] x a[j] ma a[j] ng sau a[i] Hoan v i++; j--; Cau truc D lieu - Tm (a[i],a[j]); kiem va Sap xep 145

Quick sort V du
X i 1 1 2 left 2 2 5 3 8 4 5 5 1

Phan hoach day


6 6 7 4 j 8 1 5 right

STOP

STOP

Not less than X greater than Not X


Cau truc D lieu - Tm kiem va Sap xep 146

Quick sort V du
X 1 4 left i 2 2 5 3 8 4 5 5 1

Phan hoach day


j 6 6 7 1 2 8 1 5 right

STOP

STOP

Not less than X greater than Not X


Cau truc D lieu - Tm kiem va Sap xep 147

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

Cau truc D lieu - Tm kiem va Sap xep

148

Quick sort V du
1 1 2 2 3 4 4 5 i 5 8 left

Phan hoach day


X 6 6 6 7 1 2 j 8 1 5 right

Sap xep oan 3

STOP

STOP

Not less than X greater than Not X


149

Cau truc D lieu - Tm kiem va Sap xep

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

Sap xep oan 3

Cau truc D lieu - Tm kiem va Sap xep

150

Shell sort V du
1 1 2 2 3 4 4 5 5 6 6 8 7 1 2 8 1 5

Cau truc D lieu - Tm kiem va Sap xep

151

Quick sort Cai at


void QuickSort(int a[], int left, int right) { int i, j, x; if (left right) return; x = a[(left+right)/2]; // chon phan t gia lam gia tr moc i = left; j = right; while(i < j) { while(a[i] < x) i++; while(a[j] > x) j--; if(i <= j) { Swap(a[i], a[j]); i++ ; j--; } } QuickSort(a, left, j); QuickSort(a, i, right); } Cau truc D lieu - Tm kiem va Sap xep 152

Quick sort anh gia giai thuat


Nhan xet:

Cau truc D lieu - Tm kiem va Sap xep

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

Quick sort anh gia giai thuat


Hieu qua phu thuoc vao viec chon gia tr moc: Trng hp tot nhat: moi lan phan hoach eu chon phan t median lam moc, khi o day c phan chia thanh 2 phan bang nhau va can log2(n) lan phan hoach th sap xep xong. Neu moi lan phan hoach chon phan t co gia tr cc ai (hay cc tieu) la moc day se b phan chia thanh 2 phan khong eu: mot phan ch co 1 phan t, phan con lai gom (n-1) phan t, do vay - Tm phan hoach Cau truc D lieucankiem va Sap xep n lan mi sap 154

Quick sort anh gia giai thuat

o phc tap thuat toan:

Trng hp Tot nhat Trung bnh Xau nhat

o phc tap O(NlogN) O(NlogN) O(N2)

Cau truc D lieu - Tm kiem va Sap xep

155

Sap xep theo phng phap tron trc tiep Merge Sort

Merge sort Y tng

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

Merge sort Y tng


Cac van e can giai quyet: Phng an phan hoach day ban au thanh cac day con. Phng an lam giam so day con. Phan hoach day ban au thanh cac day con tang dan: Phng an 1: Phan hoach day theo cac ng chay sap xep tron t nhien. Phng an 2: Phan hoach thanh cac day con co so phan t bang nhau (1, 2, 4, ) sap xep tron trc tiep. Lam giam so day con: Cac day con tang dan se c tach ra 2 day phu theo nguyen tac phan phoi eu luan phien. Tron tng cap day con cua hai day phu Cau truc D lieu - Tm kiem va Sap xep 158

Merge sort Giai thuat


//input: day (a, N) //output: day (a, N) c sap tang dan

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

170

Merge sort V du
1 1 2 2 3 4 4 5 5 6 6 8 7 1 2 8 1 5

Cau truc D lieu - Tm kiem va Sap xep

171

Merge Sort Cai at


D lieu ho tr: 2 mang b, c:


int b[MAX], c[MAX], nb, nc;

Cac ham can cai at: MergeSort: Sap xep mang (a, N) tang dan
void MergeSort(int a[], int N);

Distribute: Phan phoi eu luan phien

cac day con o dai k t mang a vao hai mang b va c


void Distribute(int a[], int N, int &nb, int &nc, int k);

Merge: Tron mang b va mang c vao

mang a

void Merge(int a[], int nb, int nc, int k);

MergeSubarr: Tron 1 cap day con t b va

Cau truc D lieu - Tm kiem va Sap xep

c vao a

172

Merge sort Cai at


//khai bao 2 mang phu
int b[MAX], c[MAX], nb, nc; void MergeSort(int a[], int N) { int k; for (k = 1; k < N; k *= 2) { Distribute(a, N, nb, nc, k); Merge(a, nb, nc, k); } }

Cau truc D lieu - Tm kiem va Sap xep

173

Merge sort Cai at


void Distribute(int a[], int N, int &nb, int &nc, int k) { int i, pa, pb, pc; pa = pb = pc = 0; while (pa < N) { for (i=0; (pa<N) && (i<k); i++, pa++, pb++) b[pb] = a[pa]; for (i=0; (pa<N) && (i<k); i++, pa++, pc++) c[pc] = a[pa]; } nb = pb; nc = pc; }
Cau truc D lieu - Tm kiem va Sap xep 174

Merge sort Cai at


void Merge(int a[], int nb, int nc, int k) { int pa, pb, pc; pa = pb = pc = 0; while ((pb < nb) && (pc < nc)) MergeSubarr(a, nb, nc, pa, pb, pc, k); while (pb < nb) a[pa ++] = b[pb ++]; while (pc < nc) a[pa ++] = c[pc ++]; }
Cau truc D lieu - Tm kiem va Sap xep 175

Merge sort Cai at


void MergeSubarr(int a[], int nb, int nc, int &pa, int &pb, int &pc, int k) { int rb, rc; rb = min(nb, pb+k); rc = min(nc, pb+k); while ((pb < rb) && (pc < rc)) if (b[pb] < c[pc]) a[pa ++] = b[pb ++]; else a[pa ++] = c[pc ++]; while (pb < rb) a[pa ++] = b[pb ++]; while (pc < rc) a[pa ++] = c[pc ++]; }
Cau truc D lieu - Tm kiem va Sap xep 176

Merge Sort anh gia giai thuat


Giai thuat tron trc tiep la phng phap tron n gian nhat: Viec phan hoach thanh cac day con ch la tach day thanh cac day con khong giam o dai k. o dai cua day con la 1, 2, 4, 8, am bao day con luon la day con khong giam sau moi bc tach - tron. Khong s dung thong tin ve th t cua day ban au 2 he qua: o phc tap thuat toan khong phu Cau tructhuoc vaokiem va Sap xep D lieu - Tm day ban au. 177

Merge Sort anh gia giai thuat

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).

Cau truc D lieu - Tm kiem va Sap xep

178

Merge Sort anh gia giai thuat

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

Cau truc D lieu - Tm kiem va Sap xep

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

Cau truc D lieu - Tm kiem va Sap xep

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.

Cau truc D lieu - Tm kiem va Sap xep

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

Sap xep theo phng phap c so Radix Sort

Sap xep theo phng phap c so Radix Sort


Cau truc D lieu - Tm kiem va Sap xep

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

Sap xep theo phng phap c so Radix Sort


e chuyen mot khoi lng th ln en tay ngi nhan nhieu a phng khac nhau, bu ien thng to chc mot he thong phan loai th phan cap. Trc tien, cac th en cung mot tnh, thanh pho se c sap chung vao mot lo e gi en tnh thanh tng ng. Bu ien cac tnh thanh nay lai thc hien cong viec tng t. Cac th en cung mot quan, huyen se c xep vao chung mot lo va gi en quan, huyen tng ng. C nh vay, cac bc th se c trao Cau truc D lieu - Tm kiem va Sap xep en tay ngi nhan mot cach co he

185

Sap xep theo phng phap c so Radix Sort

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

Cau truc D lieu - Tm kiem va Sap xep

Sap xep theo phng phap c so Radix Sort

Cau truc D lieu - Tm kiem va Sap xep

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

Sap xep theo phng phap c so Radix Sort

Cau truc D lieu - Tm kiem va Sap xep

188

Sap xep theo phng phap c so Radix Sort

Cau truc D lieu - Tm kiem va Sap xep

189

Sap xep theo phng phap c so Radix Sort

Cau truc D lieu - Tm kiem va Sap xep

190

Sap xep theo phng phap c so Radix Sort

Cau truc D lieu - Tm kiem va Sap xep

191

Sap xep theo phng phap c so Radix Sort

Cau truc D lieu - Tm kiem va Sap xep

192

Sap xep theo phng phap c so Radix Sort

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

Cau truc D lieu - Tm kiem va Sap xep

Sap xep theo phng phap c so Radix Sort


Nhan xet:
Sau

Cau truc D lieu - Tm kiem va Sap xep

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

Sap xep theo phng phap c so Radix Sort


Nhan xet:
Thuat

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

Sap xep theo phng phap c so Radix Sort


Nhan xet:
So

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.

Cau truc D lieu - Tm kiem va Sap xep

196

Sap xep theo phng phap c so Radix Sort


Nhan xet:
Ngi

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

Cau truc D lieu - Tm kiem va Sap xep

Tho lun

Cau truc D lieu - Tm kiem va Sap xep

198

You might also like