Bai 5-Search Sort

56
1 TÌM KIM & SP XP Bài ging Cu trúc dliu và Gii thut

description

Thuat toan Search Sort

Transcript of Bai 5-Search Sort

  • 1TM KIM & SP XPBi ging Cu trc d liu v Gii thut

  • Tm kimTun t

    Ni dung

    Tun t Nh phn

    Sp xp Bubble sort Selection sort Insert sort Quick sort

  • Tm kim3

    Tm kim: duyt mt danh sch v ly ra phn t tho tiu chun cho trc.

    L thao tc ph bin trn my tnh: L thao tc ph bin trn my tnh: Tm mu tin trong c s d liu Tm kim thng tin trn Internet

    Kho st vic tm kim trn mng/danh sch.

  • Tm kimGii thut

    4

    Input: Mng A gm n phn t Gi tr x cn tm

    Tr v: V tr phn t x trong A hoc 1 nu x khng xut hin

    Thao tc c bn: So snh

  • Tm kim tun tGii thut

    5

    Gii thut: Ln lt so snh x vi cc phn t ca mng A cho n khi

    gp c phn t cn tm, hoc ht mng. V d: A = {1, 25, 6, 5, 2, 37, 40}, x = 6

    1 25 6 5 2 37 40

    x = 6

    x = 6

    Dng

    1 25 6 5 2 37 40

    1 25 6 5 2 37 40

    x = 6

  • Tm kim tun tnh gi

    6

    nh gi (thao tc so snh): Tt nht: O(1) Xu nht: O(n) Trung bnh:

    Him khi xy ra. Ti sao?

    Trung bnh: Gi s d liu phn b u, xc sut bt gp x ti mi v tr u nh nhau.

    Mi vng lp thc hin 2 thao tc so snh. Ti sao? S thao tc = 2*(1 + 2 + + n) = n + 1 phc tp: O(n)

  • Tm kim tun tPhn t lnh canh

    7

    Mi vng lp cn 2 thao tc so snh: Kim tra ht mng Kim tra phn t hin ti c bng x

    Phn t lnh canh: t gi tr x vo cui mng Phn t lnh canh: t gi tr x vo cui mng khng cn kim tra iu kin ht mng.

    V d: A = {1, 25, 5, 2, 37}, x = 6

    Tr v: n nu khng tm thy

    1 25 5 2 37 6

  • Tm kim nh phn8

    Khi mng gm cc phn t c sp, tn dng iu kin ny gim s thao tc.

    tng: tng: Xt phn t gia A[m] Nu A[m] = x, tr v m Nu A[m] > x, tm trong cc phn t bn tri ca m Nu A[m] < x, tm trong cc phn t bn tri ca m

  • Tm kim nh phnV d minh ho

    9

    A = {2, 3, 6, 7, 10, 16, 18}, x = 16

    2 3 6 7 10 16 18

    [0] [1] [2] [3] [4] [5] [6][0] [1] [2] [3] [4] [5] [6][4] [5] [6]

    2 3 6 7 10 16 18

  • 10

    Tm kim nh phnChng trnhint BinarySearch(int a[], int n, int x){int l = 0, r = n-1;while (l

  • Tm kim nh phnBi tp

    11

    Thc hin vic tm kim i vi cc bi tp sau: A = {1, 2, 6, 26, 28, 37, 40}, x = 40

    A = {1, 2, 6, 26, 28, 37, 40}, x = -7

  • Tm kim nh phnnh gi

    12

    Mi ln lp, chiu di mng con phi xt c gim so vi mng trc .

    Mng ban u c chia ti a k ln vi k =log2n.log2n.

    Ti a k vng lp c thc hin trong mi vng lp thc hin 1-2 php so snh.

    phc tp: O(log2n)

    Mng cn c sp xp trc!!!

  • Sp xp13

    Sp xp: t chc cc phn t trong mt danh sch theo th t.

    L bi ton ph bin trn my tnh. L bi ton ph bin trn my tnh. Nhiu gii thut sp xp ra i.

    Kho st v nh gi hiu qu mt s gii thut sp xp thng dng da trn mng.

  • Sp xpGii thut

    14

    Input: Mng A gm n phn t.

    Output: Mt hon v ca A sao cho: A0 A1 An-1 (sp Mt hon v ca A sao cho: A0 A1 An-1 (sp

    xp tng dn). Thao tc c bn:

    So snh Hon v (i v tr hai phn t)

  • Sp xpCc gii thut

    15

    Cc phng php sp xp thng dng: Bubble Sort Selection Sort Insertion Sort Insertion Sort Quick Sort Merge Sort Shell Sort Heap Sort Radix Sort

  • Bubble sort16

    Gii thut: Xut pht t cui (u) dy, i ch cc cp phn t k

    cn a phn t nh hn v v tr ng u dyhin hnh.

    Sau khng xt n n bc k tip. Ln x l th i s c v tr u dy l i. Lp li cho n khi khng cn cp phn t no xt.

    V d: sp xp dy A: 15 2 8 7 3 6 9 17

  • Bubble sortV d

    17

    15 2 8 7 3 6 9 17

    15 2 8 3 7 6 9 17

    15 2 3 8 7 6 9 17

    i = 0

    i = 0

    i = 0

    j = 4

    j = 3

    j = 1

    2 15 3 8 7 6 9 17

    2 15 3 8 6 7 9 17

    2 15 3 6 8 7 9 17

    2 3 15 6 8 7 9 17

    2 3 15 6 7 8 9 17

    i = 1

    i = 1

    i = 1

    i = 2

    i = 2

    j = 5

    j = 4

    j = 2

    j = 5

    j = 3

  • Bubble sortV d (tt)

    18

    2 3 6 15 7 8 9 17

    2 3 6 7 15 8 9 17

    2 3 6 7 8 15 9 17

    j = 4

    j = 5

    j = 6

    i = 3

    i = 4

    i = 5 2 3 6 7 8 15 9 17

    2 3 6 7 8 9 15 17

    2 3 6 7 8 9 15 17

    j = 7i = 6

  • Bubble sortChng trnh

    19

    void BubbleSort(int a[], int n){for(int i=0; ii; j--){if(a[j]

  • Bubble sortBi tp

    20

    M t tnh trng dy A sau mi bc chy vi thut ton Bubble sort.A = {2, 9, 5, 12, 20, 15, -8, 10}

  • Bubble sortnh gi

    21

    Cc gii thut sp xp thng c phc tp tng t nhau.

    Cn mt nh gi chi tit: Cc trng hp: xu nht, tt nht, trung bnh Cc trng hp: xu nht, tt nht, trung bnh Cc thao tc:

    So snh Gn (quan trng hn v tn nhiu chi ph hn). Lu : mi

    thao tc gn v tn 3 php gn

  • Bubble sortChng trnh

    22

    void BubbleSort(int a[], int n){for(int i=0; ii; j--){if(a[j]

  • Bubble sortnh gi

    23

    S php so snh: khng ph thuc vo tnh trng dy s ban u.

    2

    0

    ( 1)( 1)2

    n

    i

    n nn i

    =

    =

    S lng php gn: ty vo kt qu so snh Tt nht: 0 Xu nht:

    2

    0

    3 ( 1)3( 1)2

    n

    i

    n nn i

    =

    =

  • Shaker sort Ci tin Bubble sort

    24

    Nhn xt: Bubble sort c cc khuyt im: Khng nhn din c tnh trng dy c th t hay

    khng c th t tng phn. Trong khi phn t nh c a v v tr ng rt

    nhanh, th cc phn t ln li c a v v tr ng rt chm.Gii thut Shaker sort ci tin cc khuyt im ny.

  • Shaker sort Ci tin Bubble sort

    25

    Ci tin: Duyt mng theo 2 lt t 2 pha khc nhau:

    Lt i: y phn t nh v u mng Lt v: y phn t ln v cui mng.

    Ghi nhn li nhng on sp.

  • Shaker sortV d minh ho

    26

    15 2 8 7 3 6 9 17

    15 2 8 3 7 6 9 17

    15 2 3 8 7 6 9 17

    r =7l = 0

    2 15 3 8 7 6 9 17

    2 3 15 8 7 6 9 17

    2 3 8 15 7 6 9 17

    2 3 8 7 15 6 9 17

    k=1r =7l = 1

  • Shaker sortV d minh ho

    27

    2 3 8 7 6 15 9 17

    2 3 8 7 6 9 15 17 k=5

    2 3 8 7 6 9 15 17

    r =5l = 1

    2 3 8 6 7 9 15 17

    2 3 6 8 7 9 15 17 k=3

    2 3 6 7 8 9 15 17

    r =5l = 3

  • Shaker sortChng trnh

    28

    l=0; r=n-1; k=n-1; //khi gn cc gi tr//k l v tr xy ra hon v sau cng while(ll){ if(a[j]

  • Shaker sortChng trnh (tt)

    29

    j=l; //y phn t ln v cuiwhile(ja[j+1])

    {HoanVi(a[j], a[j+1]); HoanVi(a[j], a[j+1]); k=j; //lu li v tr xy ra hon v

    }j++;

    }r=k; //loi cc phn t c th t cui dy

    }

  • Selection Sort30

    M phng cch sp xp t nhin nht trong thc t Chn phn t nh nht v a v v tr ng l u dy

    hin hnh. Sau xem dy hin hnh ch cn n-1 phn t. Lp li cho n khi dy hin hnh ch cn 1 phn t.

  • Selection SortGii thut

    31

    Cc bc ca gii thut:1. i = 0.2. Tm a[min] nh nht trong dy t a[i] n a[n-1]3. Hon v a[min] v a[i]4. Nu i n th tng i v lp li bc 2

    Ngc li: Dng thut ton

  • Selection SortV d

    32

    15 2 8 7 3 6 9 17

    2 15 8 7 3 6 9 17

    2 3 8 7 15 6 9 17

    i = 0

    i = 1

    i = 2

    2 3 6 7 15 8 9 17

    2 3 6 7 15 8 9 17

    2 3 6 7 8 15 9 17

    2 3 6 7 8 9 15 17

    2 3 6 7 8 9 15 17

    i = 3

    i = 4

    i = 5

    i = 6

    i = 7

  • Selection SortChng trnh

    33

    void SelectionSort(int a[], int n){int min; //ch s ca phn t nh nhtfor(int i=0; i

  • Selection Sortnh gi

    34

    void SelectionSort(int a[], int n){int min; for(int i=0; i

  • Selection Sortnh gi

    35

    S php so snh: Ti lt i bao gi cng cn (n-i-1) s ln so snh Khng ph thuc vo tnh trng dy s ban u

    =

    1 )1()1(n nnin

    S php gn: Tt nht:

    Xu nht:

    S php so snh = =

    =

    0 2)1()1(

    i

    nnin

    1

    04 4

    n

    in

    =

    =

    =

    +=+

    1

    0 2)7()14(

    n

    i

    nnin

  • Insertion Sort36

    Cch xp cc qun bi dng thut ton Insertion Sort:

    Tay tri l dy cc qun bi c th t, khi cm 1 qun bi mi ln th tm v tr ng ca n v chn vo.

    Cch tm: ln lt so snh qun bi mi vi cc qun bi trong dy ban u.

  • Insertion SortGii thut

    37

    Gii thut: Xem dy a0, a1, , an-1 c i phn t u tin a0, a1, ,

    ai-1 c th t. Tm cch chn phn t ai vo v tr thch hp dy a0, i 0

    a1, , ai c th t.

    Cho dy ban u a0, a1, , an-1, c th xem nh on gm 1 phn t a0 c sp.

    Thm vo a1 s c a0, a1 c sp, tip tc thm a2, a3cho n khi thm an-1

  • Insertion SortV d

    38

    15 2 8 7 3 6 9 17

    2 15 8 7 3 6 9 17

    2 8 15 7 3 6 9 17

    i = 1

    i = 2

    i = 3 2 8 15 7 3 6 9 17

    2 7 8 15 3 6 9 17

    2 3 7 8 15 6 9 17

    2 3 6 7 8 15 9 17

    2 3 6 7 8 9 15 17

    i = 3

    i = 4

    i = 5

    i = 6

    i = 7

  • Insertion SortGii thut

    39

    Cc bc ca gii thut:1. Xut pht t i = 1.2. Tm v tr pos thch hp trong on a[0] n a[i-1] chn

    a[i].3. Di ch cc phn t t a[pos] n a[i-1] sang 1 v tr

    chn a[i].4. a[pos] = a[i]5. Tng i.

    5.1 Nu i n: lp li bc 25.2 Ngc li: dng

  • Insertion SortChng trnh

    40

    void InsertionSort(int a[], int n){

    for(int i=1; i=0 && a[pos] > x) //tm pos{

    a[pos+1]=a[pos]; //di v sau 1 v trpos--;

    }a[pos+1] = x;

    }}

  • Insertion SortBi tp

    41

    Cho bit cc gi tr i, pos tng ng khi dng thut ton Insertion Sort sp xp mng A gim dn.A = {2, 9, 5, 12, 20, 15, -8, 10}

  • Insertion SortNhn xt

    42

    Nhn xt:on a[0] n a[i-1] lun lun c sp:

    Vic tm v tr chn c th dng gii thut tm kim nh phn.Nu dng gii thut tm kim nh phn th vn phi tr gi Nu dng gii thut tm kim nh phn th vn phi tr gi cho thao tc di cc phn t sau x.

    Sinh vin t ci t.

  • Insertion Sortnh gi

    43

    void InsertionSort(int a[], int n){

    for(int i=1; i=0 && a[pos] > x)

    S ln lp i

    while(pos>=0 && a[pos] > x) {

    a[pos+1]=a[pos]; pos--;

    }a[pos+1] = x;

    }}

    S ln lp pos

  • Insertion Sortnh gi

    44

    So snh: Tt nht:

    Xu nht:

    1

    12 2 ( 1)

    n

    in

    =

    = 1

    2 ( 1)n

    i n n

    = Xu nht:

    Gn: Tt nht:

    Xu nht:

    1

    13 3( 1)

    n

    in

    =

    =

    12 ( 1)

    ii n n

    =

    =

    1

    1

    ( 1)(3 ) 3( 1)2

    n

    i

    n ni n

    =

    + = +

  • Quick sort45

    Cc gii thut Bubble sort, Selection sort, Insertion sort: D hiu, d ci t Hiu qu thp: O(n2) Hiu qu thp: O(n )

    Cc gii thut sp xp da trn so snh: phc tp n log2n.

    Quick sort (C. A. R. Hoare, 1962) c th t c phc tp trn.

  • Quick Sort tng

    46

    Da trn vic phn hoch dy ban u thnh 2 phn: Dy con 1: a0, a1, , ai c gi tr nh hn x Dy con 2: aj, , an-1 c gi tr ln hn x. Dy con 2: aj, , an-1 c gi tr ln hn x.Dy ban u c phn thnh 3 phn:

    Phn 2 c th t Phn 1, 3: cn sp th t, tin hnh phn hoch tng dy

    con theo cch phn hoch dy ban u (chia tr)

    akxk = 0 i k = i+1 j k = j+1, n-1

  • Quick SortGii thut

    47

    Gii thut phn hoch thnh 2 dy con:1. Chn phn t a[k] trong dy lm gi tr mc, 0 k r-1

    x=a[k], i = 0, j = r-1.Thng chn phn t gia dy: k = (l+r)/2

    2. Pht hin v hiu chnh cp phn t a[i], a[j] sai v tr2. Pht hin v hiu chnh cp phn t a[i], a[j] sai v tr2.1 Trong khi (a[i] < x), tng i.2.2 Trong khi (a[j] >x), gim j.2.3 Nu i

  • Quick SortV d

    48

    Phn hoch dy ban u: l = 0, r = 7, x = a[3]

    Phn hoch on l = 0, r = 3, x = a[1]

    15 2 8 7 3 6 9 17

    6 2 3 7 8 15 9 17i = 3, j = 3i=0, j = 5; i = 2, j = 4

    Phn hoch on l = 0, r = 3, x = a[1]

    Phn hoch on l = 1, r = 3, x = a[2]

    6 2 3 7 8 15 9 17

    2 6 3 7 8 15 9 17i=1, j = 0

    i=0, j = 1

    2 6 3 7 8 15 9 17

    2 3 6 7 8 15 9 17i=2, j = 1

    i=1, j = 2

  • Quick SortV d

    49

    Phn hoch on l = 2, r = 3, x = a[2]

    Phn hoch on l = 3, r = 7, x = a[5]

    2 3 6 7 8 15 9 17i=3, j = 1

    Phn hoch on l = 3, r = 5, x = a[4]

    Phn hoch on l = 6, r = 7, x = a[6]

    2 3 6 7 8 15 9 17i=5, j = 6i=6, j = 5

    2 3 6 7 8 9 15 17i=5, j = 3

    2 3 6 7 8 9 15 17

  • Quick SortChng trnh

    50

    void QuickSort(int a[], int l, int r){

    i = l; j = r; x = a[(l+r)/2];do {

    while (a[i] < x) i++;while (a[j] > x) j--;if (i

  • Quick SortBi tp

    51

    Chy tay thut ton Quick Sort sp xp mng A trong 2 trng hp tng dn v gim dn.A = {2, 9, 5, 12, 20, 15, -8, 10}

  • Quick Sortnh gi

    52

    nh gi gii thut: Hiu qu ph thuc vo vic chn gi tr mc

    Tt nht l phn t median. Nu phn t mc l cc i hay cc tiu th vic phn

    hoch khng ng u.hoch khng ng u. Tt nht: O(n*log2n) Trung bnh: O(n*log2n) Xu nht: O(n2)

  • Quick SortDanh sch lin kt Vi danh sch lin kt:

    Quick sort sp xp hiu qu nht trn danh sch lin kt.

    Lu : khi ci t trn danh sch lin kt, phn t mc

    53

    m c duy nht hp l l phn t u xu.

  • Quick SortDanh sch lin kt Gii thut Quick sort cho DSLK:

    Bc 1: chn x lm mc l phn t u DSLK. Bc 2: Tch DSLK thnh 2 DSLK con L1 (cc phn

    t x), L2 (cc phn t >x).

    54

    Bc 3: QuickSort(L1) Bc 4: QuickSort(L2) Bc 5: Ni L1, X v L2 li

  • Quick SortDanh sch lin kt

    Tch L thnh L1, X v L2

    4 9 3 4 2 19 12

    3 4 2 4 9 19 12

    55

    Tch L1 thnh L11, X1 v L1232 4

    L11 X1 L12

    2 3 4

    L1 X

    Ni L11, X, L12

    L2

  • Quick SortDanh sch lin ktTch L2 thnh L21, X2 v L22

    Tch L22 thnh L221, X22 v L222

    9 19

    X2 L22

    19

    12

    12

    56

    Ni L221 v X22 thnh L22

    Ni L21, X2 v L22 thnh L2

    Ni L1, X v L2 thnh L

    1912

    L221 X22

    19129

    2 3 4 191294

    1912