GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

Embed Size (px)

Citation preview

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    1/230

    Gio trnh cu trcd liu v gii thut

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    2/230

    MUC LUC

    Muc Trang

    CHNG 1: TONG QUAN VE CAU TRUC D LIEU & GT ...........31.1. Tam quan trong cua CTDL & GT trong mot e an tin hoc ........................ 3

    1.1.1. Xay dng cau truc d lieu ......................................................................... 31.1.2. Xay dng giai thuat ................................................................................... 31.1.3. Moi quan he gia cau truc d lieu va giai thuat ....................................... 3

    1.2. anh gia Cau truc d lieu & Giai thuat .......................................................31.2.1. Cac tieu chuan anh gia cau truc d lieu ................................................. 31.2.2. anh gia o phc tap cua thuat toan ........................................................ 4

    1.3. Kieu d lieu ..................................................................................................... 41.3.1. Khai niem ve kieu d lieu.......................................................................... 41.3.2. Cac kieu d lieu c s ............................................................................... 41.3.3. Cac kieu d lieu co cau truc...................................................................... 51.3.4. Kieu d lieu con tro................................................................................... 51.3.5. Kieu d lieu tap tin .................................................................................... 5

    Cau hoi va bai tap ................................................................................................. 6

    CHNG 2: KY THUAT TM KIEM (Searching) .............................82.1. Khai quat ve tm kiem .................................................................................... 82.2. Cac giai thuat tm kiem noi ...........................................................................8

    2.2.1. at van e ................................................................................................. 82.2.2. Tm tuyen tnh............................................................................................ 82.2.3. Tm nh phan............................................................................................ 10

    2.3. Cac giai thuat tm kiem ngoai ..................................................................... 142.3.1. at van e ............................................................................................... 142.3.2. Tm tuyen tnh.......................................................................................... 142.3.3. Tm kiem theo ch muc............................................................................. 16

    Cau hoi va bai tap ............................................................................................... 17

    CHNG 3: KY THUAT SAP XEP (SORTING) .............................193.1. Khai quat ve sap xep .................................................................................... 193.2. Cac giai thuat sap xep noi............................................................................ 19

    3.2.1 Sap xep bang phng phap oi cho .......................................................... 203.2.2. Sap xep bang phng phap chon ............................................................. 283.2.3. Sap xep bang phng phap chen ............................................................. 333.2.4. Sap xep bang phng phap tron .............................................................. 40

    3.3. Cac giai thuat sap xep ngoai........................................................................ 603.3.1. Sap xep bang phng phap tron .............................................................. 603.3.2. Sap xep theo ch muc ............................................................................... 79

    Cau hoi va bai tap ............................................................................................... 82

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    3/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 2

    CHNG 4: DANH SACH (LIST) .....................................................844.1. Khai niem ve danh sach ............................................................................... 844.2. Cac phep toan tren danh sach ..................................................................... 844.3. Danh sach ac ............................................................................................... 85

    4.3.1. nh ngha............................................................................................... 85

    4.3.2. Bieu dien danh sach ac.......................................................................... 854.3.3. Cac thao tac tren danh sach ac ............................................................. 854.3.4. u nhc iem va ng dung ................................................................... 91

    4.4. Danh sach lien ket ........................................................................................ 924.4.1. nh ngha............................................................................................... 924.4.2. Danh sach lien ket n ............................................................................ 924.4.3. Danh sach lien ket kep .......................................................................... 1114.4.4. u nhc iem cua danh sach lien ket .................................................. 135

    4.5. Danh sach han che...................................................................................... 1354.5.1. Hang i................................................................................................ 1354.5.2. Ngan xep ............................................................................................... 142

    4.5.3. ng dung cua danh sach han che.......................................................... 147Cau hoi va bai tap ............................................................................................. 147

    CHNG 5: CAY (TREE) ...............................................................1495.1. Khai niem Bieu dien cay......................................................................... 149

    5.1.1. nh ngha cay ...................................................................................... 1495.1.2. Mot so khai niem lien quan ................................................................... 1495.1.3. Bieu dien cay......................................................................................... 151

    5.2. Cay nh phan ............................................................................................... 1525.2.1. nh ngha............................................................................................. 152

    5.2.2. Bieu dien va Cac thao tac ..................................................................... 1525.2.3. Cay nh phan tm kiem........................................................................... 163

    5.3. Cay can bang ............................................................................................... 1885.3.1. nh ngha Cau truc d lieu............................................................... 1885.3.2. Cac thao tac .......................................................................................... 189

    Cau hoi va bai tap .............................................................................................227

    ON TAP (REVIEW) ..........................................................................224He thong lai cac Cau truc d lieu va cac Giai thuat a hoc .......................... 224Cau hoi va Bai tap on tap tong hp ................................................................. 227

    TAI LIEU THAM KHAO .................................................................229

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

    By Ht thu c l c h i cho s c kh e at 9:19 pm, Jun 25, 2007

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    4/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 3

    Chng 1:TONG QUAN VE CAU TRUC D LIEU VA GIAI THUAT

    1.1. Tam quan trong cua cau truc d lieu va giai thuat trong mote an tin hoc

    1.1.1. Xay dng cau truc d lieu

    Co the noi rang khong co mot chng trnh may tnh nao ma khong co d lieu e x ly.D lieu co the la d lieu a vao (input data), d lieu trung gian hoac d lieu a ra(output data). Do vay, viec to chc e lu tr d lieu phuc vu cho chng trnh co yngha rat quan trong trong toan bo he thong chng trnh. Viec xay dng cau truc dlieu quyet nh rat ln en chat lng cung nh cong sc cua ngi lap trnh trong viecthiet ke, cai at chng trnh.

    1.1.2. Xay dng giai thuat

    Khai niem giai thuat hay thuat giai ma nhieu khi con c goi la thuat toan dung e chphng phap hay cach thc (method) e giai quyet van e. Giai thuat co the c minhhoa bang ngon ng t nhien (natural language), bang s o (flow chart) hoac bang magia (pseudo code). Trong thc te, giai thuat thng c minh hoa hay the hien bangma gia ta tren mot hay mot so ngon ng lap trnh nao o (thng la ngon ng mangi lap trnh chon e cai at thuat toan), chang han nh C, Pascal,

    Khi a xac nh c cau truc d lieu thch hp, ngi lap trnh se bat au tien hanhxay dng thuat giai tng ng theo yeu cau cua bai toan at ra tren c s cua cau trucd lieu a c chon. e giai quyet mot van e co the co nhieu phng phap, do vays la chon phng phap phu hp la mot viec ma ngi lap trnh phai can nhac va tnhtoan. S la chon nay cung co the gop phan ang ke trong viec giam bt cong viec

    cua ngi lap trnh trong phan cai at thuat toan tren mot ngon ng cu the.1.1.3. Moi quan he gia cau truc d lieu va giai thuat

    Moi quan he gia cau truc d lieu va Giai thuat co the minh hoa bang ang thc:

    Cau truc d lieu + Giai thuat = Chng trnh

    Nh vay, khi a co cau truc d lieu tot, nam vng giai thuat thc hien th viec the hienchng trnh bang mot ngon ng cu the ch la van e thi gian. Khi co cau truc d lieuma cha tm ra thuat giai th khong the co chng trnh va ngc lai khong the coThuat giai khi cha co cau truc d lieu. Mot chng trnh may tnh ch co the c hoanthien khi co ay u ca Cau truc d lieu e lu tr d lieu va Giai thuat x ly d lieutheo yeu cau cua bai toan at ra.

    1.2. anh gia cau truc d lieu va giai thuat

    1.2.1. Cac tieu chuan anh gia cau truc d lieu

    e anh gia mot cau truc d lieu chung ta thng da vao mot so tieu ch sau:

    - Cau truc d lieu phai tiet kiem tai nguyen (bo nh trong),

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns By Ht thu c l c h i cho s c kh e at 9:19 pm, Jun 25, 2007

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    5/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 4

    - Cau truc d lieu phai phan anh ung thc te cua bai toan,

    - Cau truc d lieu phai de dang trong viec thao tac d lieu.

    1.2.2. anh gia o phc tap cua thuat toan

    Viec anh gia o phc tap cua mot thuat toan qua khong de dang chut nao. day,

    chung ta ch muon c lng thi gian thc hien thuan toan T(n) e co the co s sosanh tng oi gia cac thuat toan vi nhau. Trong thc te, thi gian thc hien motthuat toan con phu thuoc rat nhieu vao cac ieu kien khac nh cau tao cua may tnh,d lieu a vao, , ay chung ta ch xem xet tren mc o cua lng d lieu a vaoban au cho thuat toan thc hien.

    e c lng thi gian thc hien thuat toan chung ta co the xem xet thi gian thc hienthuat toan trong hai trng hp:

    - Trong trng hp tot nhat: Tmin

    - Trong trng hp xau nhat: Tmax

    T o chung ta co the c lng thi gian thc hien trung bnh cua thuat toan: Tavg

    1.3. Kieu d lieu

    1.3.1. Khai niem ve kieu d lieu

    Kieu d lieu T co the xem nh la s ket hp cua 2 thanh phan:

    - Mien gia tr ma kieu d lieu T co the lu tr: V,

    - Tap hp cac phep toan e thao tac d lieu: O.

    T =

    Moi kieu d lieu thng c ai dien bi mot ten (nh danh). Moi phan t d lieu cokieu T se co gia tr trong mien V va co the c thc hien cac phep toan thuoc tap hpcac phep toan trong O.

    e lu tr cac phan t d lieu nay thng phai ton mot so byte(s) trong bo nh, sobyte(s) nay goi la kch thc cua kieu d lieu.

    1.3.2. Cac kieu d lieu c s

    Hau het cac ngon ng lap trnh eu co cung cap cac kieu d lieu c s. Tuy vao moingon ng ma cac kieu d lieu c s co the co cac ten goi khac nhau song chung quylai co nhng loai kieu d lieu c s nh sau:

    - Kieu so nguyen: Co the co dau hoac khong co dau va thng co cac kch thc sau:+ Kieu so nguyen 1 byte

    + Kieu so nguyen 2 bytes

    + Kieu so nguyen 4 bytes

    Kieu so nguyen thng c thc hien vi cac phep toan: O = {+, -, *, /, DIV, MOD, , =, =, }

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    6/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 5

    - Kieu so thc: Thng co cac kch thc sau:

    + Kieu so thc 4 bytes

    + Kieu so thc 6 bytes

    + Kieu so thc 8 bytes

    + Kieu so thc 10 bytes

    Kieu so thc thng c thc hien vi cac phep toan: O = {+, -, *, /, , =, =, }

    - Kieu ky t: Co the co cac kch thc sau:

    + Kieu ky t byte

    + Kieu ky t 2 bytes

    Kieu ky t thng c thc hien vi cac phep toan: O = {+, -, , =, =, ORD,CHR, }

    - Kieu chuoi ky t: Co kch thc tuy thuoc vao tng ngon ng lap trnh

    Kieu chuoi ky t thng c thc hien vi cac phep toan: O = {+, &, , =, =,Length, Trunc, }- Kieu luan ly: Thng co kch thc 1 byte

    Kieu luan ly thng c thc hien vi cac phep toan: O = {NOT, AND, OR, XOR, ,=, =, }

    1.3.3. Cac kieu d lieu co cau truc

    Kieu d lieu co cau truc la cac kieu d lieu c xay dng tren c s cac kieu d lieua co (co the lai la mot kieu d lieu co cau truc khac). Tuy vao tng ngon ng laptrnh song thng co cac loai sau:

    - Kieu mang hay con goi la day: kch thc bang tong kch thc cua cac phan t- Kieu ban ghi hay cau truc: kch thc bang tong kch thc cac thanh phan (Field)

    1.3.4. Kieu d lieu con tro

    Cac ngon ng lap trnh thng cung cap cho chung ta mot kieu d lieu ac biet e lutr cac a ch cua bo nh, o la con tro (Pointer). Tuy vao loai con tro gan (nearpointer) hay con tro xa (far pointer) ma kieu d lieu con tro co cac kch thc khacnhau:

    + Con tro gan: 2 bytes

    + Con tro xa: 4 bytes

    1.3.5. Kieu d lieu tap tin

    Tap tin (File) co the xem la mot kieu d lieu ac biet, kch thc toi a cua tap tin tuythuoc vao khong gian a ni lu tr tap tin. Viec oc, ghi d lieu trc tiep tren tap tinrat mat thi gian va khong bao am an toan cho d lieu tren tap tin o. Do vay, trongthc te, chung ta khong thao tac trc tiep d lieu tren tap tin ma chung ta can chuyentng phan hoac toan bo noi dung cua tap tin vao trong bo nh trong e x ly.

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    7/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 6

    Cau hoi va Bai tap

    1. Trnh bay tam quan trong cua Cau truc d lieu va Giai thuat oi vi ngi lap trnh?

    2. Cac tieu chuan e anh gia cau truc d lieu va giai thuat?

    3. Khi xay dng giai thuat co can thiet phai quan tam ti cau truc d lieu hay khong?Tai sao?

    4. Liet ke cac kieu d lieu c s, cac kieu d lieu co cau truc trong C, Pascal?

    5. S dung cac kieu d lieu c ban trong C, hay xay dng cau truc d lieu e lu trtrong bo nh trong (RAM) cua may tnh a thc co bac t nhien n (0 n 100) trentrng so thc (ai, x R):

    Vi cau truc d lieu c xay dng, hay trnh bay thuat toan va cai at chng trnh ethc hien cac cong viec sau:

    - Nhap, xuat cac a thc.

    - Tnh gia tr cua a thc tai gia tr x0 nao o.

    - Tnh tong, tch cua hai a thc.

    6. Tng t nh bai tap 5. nhng a thc trong trng so hu ty Q (cac he so a i va x lacac phan so co t so va mau so la cac so nguyen).

    7. Cho bang gi tau i t ga Saigon en cac ga nh sau (ga cuoi la ga Ha noi):

    TAU I S2 S4 S6 S8 S10 S12 S14 S16 S18 LH2 SN2HANH TRNH 32 gi 41 gi 41 gi 41 gi 41 gi 41 gi 41 gi 41 gi 41 gi 27gi 10g30SAIGON I 21g00 21g50 11g10 15g40 10g00 12g30 17g00 20g00 22g20 13g20 18g40

    MNG MAN 2g10 15g21 19g53 14g07 16g41 21g04 1g15 3g16 17g35 22g58THAP CHAM 5g01 18g06 22g47 16g43 19g19 0g08 4g05 6g03 20g19 2g15NHA TRANG 4g10 6g47 20g00 0g47 18g50 21g10 1g57 5g42 8g06 22g46 5g15

    TUY HOA 9g43 23g09 3g39 21g53 0g19 5g11 8g36 10g50 2g10DIEU TR 8g12 11g49 1g20 5g46 0g00 2g30 7g09 10g42 13g00 4g15

    QUANG NGAI 15g41 4g55 9g24 3g24 5g55 11g21 14g35 17g04 7g34TAM KY 6g11 10g39 4g38 7g10 12g40 16g08 18g21 9g03

    A NANG 13g27 19g04 8g29 12g20 6g19 9g26 14g41 17g43 20g17 10g53HUE 16g21 22g42 12g29 15g47 11g12 14g32 18g13 21g14 23g50 15g10

    ONG HA 0g14 13g52 17g12 12g42 16g05 19g38 22g39 1g25ONG HI 19g15 2g27 15g52 19g46 14g41 17g59 21g38 0g52 3g28

    VINH 23g21 7g45 21g00 1g08 20g12 23g50 2g59 7g07 9g20THANH HOA 10g44 0g01 4g33 23g09 3g33 6g39 9g59 12g20NINH BNH 12g04 1g28 5g54 0g31 4g50 7g57 11g12 13g51

    NAM NH 12g37 2g01 6g26 1g24 5g22 8g29 11g44 14g25PHU LY 13g23 2g42 7g08 2g02 6g00 9g09 12g23 15g06EN HA NOI 5g00 14g40 4g00 8g30 3g15 7g10 10g25 13g45 16g20

    S dung cac kieu d lieu c ban, hay xay dng cau truc d lieu thch hp e lu trbang gi tau tren vao bo nh trong va bo nh ngoai (disk) cua may tnh.

    Vi cau truc d lieu a c xay dng tren, hay trnh bay thuat toan va cai atchng trnh e thc hien cac cong viec sau:

    - Xuat ra gi en cua mot tau T0 nao o tai mot ga G0 nao o.

    =

    =n

    i

    i

    i xaxfn0

    )(

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    8/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 7

    - Xuat ra gi en cac ga cua mot tau T0 nao o.

    - Xuat ra gi cac tau en mot ga G0 nao o.

    - Xuat ra bang gi tau theo mau tren.

    Lu y:

    - Cac o trong ghi nhan tai cac ga o, tau nay khong i en hoac ch i qua makhong dng lai.

    - Dong HANH TRNH ghi nhan tong so gi tau chay t ga Saigon en ga Ha noi.

    8. Tng t nh bai tap 7. nhng chung ta can ghi nhan them thong tin ve oan tau khidng tai cac ga ch e tranh tau hay e cho khach len/xuong (cac dong in nghiengtng ng vi cac ga co khach len/xuong, cac dong khac ch dng e tranh tau).

    9. S dung kieu d lieu cau truc trong C, hay xay dng cau truc d lieu e lu tr trongbo nh trong (RAM) cua may tnh trang thai cua cac cot en giao thong (co 3 en:Xanh, o, Vang). Vi cau truc d lieu a c xay dng, hay trnh bay thuat toan vacai at chng trnh e mo phong (minh hoa) cho hoat ong cua 2 cot en tren hai

    tuyen ng giao nhau tai mot nga t.10. S dung cac kieu d lieu c ban trong C, hay xay dng cau truc d lieu e lu tr

    trong bo nh trong (RAM) cua may tnh trang thai cua mot ban c CARO co kchthc MN (0 M, N 20). Vi cau truc d lieu c xay dng, hay trnh bay thuattoan va cai at chng trnh e thc hien cac cong viec sau:

    - In ra man hnh ban c CARO trong trang thai hien hanh.

    - Kiem tra xem co ai thang hay khong? Neu co th thong bao Ket thuc, neu khongco th thong bao Tiep tuc.

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    9/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 8

    Chng 2:KY THUAT TM KIEM (SEARCHING)

    2.1. Khai quat ve tm kiem

    Trong thc te, khi thao tac, khai thac d lieu chung ta hau nh luc nao cung phai thc

    hien thao tac tm kiem. Viec tm kiem nhanh hay cham tuy thuoc vao trang thai va tratt cua d lieu tren o. Ket qua cua viec tm kiem co the la khong co (khong tm thay)hoac co (tm thay). Neu ket qua tm kiem la co tm thay th nhieu khi chung ta con phaixac nh xem v tr cua phan t d lieu tm thay la au? Trong pham vi cua chngnay chung ta tm cach giai quyet cac cau hoi nay.

    Trc khi i vao nghien cu chi tiet, chung ta gia s rang moi phan t d lieu cxem xet co mot thanh phan khoa (Key) e nhan dien, co kieu d lieu la T nao o, cacthanh phan con lai la thong tin (Info) lien quan en phan t d lieu o. Nh vay moiphan t d lieu co cau truc d lieu nh sau:

    typedef struct DataElement

    { T Key;InfoType Info;}DataType;

    Trong tai lieu nay, khi noi ti gia tr cua mot phan t d lieu chung ta muon noi ti giatr khoa (Key) cua phan t d lieu o. e n gian, chung ta gia s rang moi phan td lieu ch la thanh phan khoa nhan dien.

    Viec tm kiem mot phan t co the dien ra tren mot day/mang (tm kiem noi) hoac dienra tren mot tap tin/ file (tm kiem ngoai). Phan t can tm la phan t can thoa man ieukien tm kiem (thng co gia tr bang gia tr tm kiem). Tuy thuoc vao tng bai toan cuthe ma ieu kien tm kiem co the khac nhau song chung quy viec tm kiem d lieu

    thng c van dung theo cac thuat toan trnh bay sau ay.2.2. Cac giai thuat tm kiem noi (Tm kiem tren day/mang)

    2.2.1. at van e

    Gia s chung ta co mot mang M gom N phan t. Van e at ra la co hay khong phan tco gia tr bang X trong mang M? Neu co th phan t co gia tr bang X la phan t thmay trong mang M?

    2.2.2. Tm tuyen tnh (Linear Search)

    Thuat toan tm tuyen tnh con c goi la Thuat toan tm kiem tuan t (SequentialSearch).

    a. T tng:

    Lan lt so sanh cac phan t cua mang M vi gia tr X bat au t phan t au tiencho en khi tm en c phan t co gia tr X hoac a duyet qua het tat ca cac phant cua mang M th ket thuc.

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    10/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 9

    b. Thuat toan:

    B1: k = 1 //Duyet t au mangB2: IF M[k] X AND k N //Neu cha tm thay va cung cha duyet het mang

    B2.1: k++B2.2: Lap lai B2

    B3: IF k NTm thay tai v tr k

    B4: ELSEKhong tm thay phan t co gia tr X

    B5: Ket thuc

    c. Cai at thuat toan:

    Ham LinearSearch co prototype:

    int LinearSearch (T M[], int N, T X);

    Ham thc hien viec tm kiem phan t co gia tr X tren mang M co N phan t. Neu tmthay, ham tra ve mot so nguyen co gia tr t 0 en N-1 la v tr tng ng cua phan

    t tm thay. Trong trng hp ngc lai, ham tra ve gia tr 1 (khong tm thay). Noidung cua ham nh sau:

    int LinearSearch (T M[], int N, T X){ int k = 0;

    while (M[k] != X && k < N)k++;

    if (k < N)return (k);

    return (-1);}

    d. Phan tch thuat toan:- Trng hp tot nhat khi phan t au tien cua mang co gia tr bang X:

    So phep gan: Gmin = 1So phep so sanh: Smin = 2 + 1 = 3

    - Trng hp xau nhat khi khong tm thay phan t nao co gia tr bang X:

    So phep gan: Gmax = 1So phep so sanh: Smax = 2N+1

    - Trung bnh:

    So phep gan: Gavg = 1So phep so sanh: Savg = (3 + 2N + 1) : 2 = N + 2

    e. Cai tien thuat toan:

    Trong thuat toan tren, moi bc lap chung ta can phai thc hien 2 phep so sanh ekiem tra s tm thay va kiem soat s het mang trong qua trnh duyet mang. Chung taco the giam bt 1 phep so sanh neu chung ta them vao cuoi mang mot phan t camcanh (sentinel/stand by) co gia tr bang X e nhan dien ra s het mang khi duyetmang, khi o thuat toan nay c cai tien lai nh sau:

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    11/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 10

    B1: k = 1B2: M[N+1] = X //Phan t cam canhB3: IF M[k] X

    B3.1: k++B3.2: Lap lai B3

    B4: IF k < N

    Tm thay tai v tr kB5: ELSE //k = N song o ch la phan t cam canhKhong tm thay phan t co gia tr X

    B6: Ket thuc

    Ham LinearSearch c viet lai thanh ham LinearSearch1 nh sau:

    int LinearSearch1 (T M[], int N, T X){ int k = 0;

    M[N] = X;while (M[k] != X)

    k++;

    if (k < N)return (k);return (-1);

    }

    f. Phan tch thuat toan cai tien:

    - Trng hp tot nhat khi phan t au tien cua mang co gia tr bang X:

    So phep gan: Gmin = 2So phep so sanh: Smin = 1 + 1 = 2

    - Trng hp xau nhat khi khong tm thay phan t nao co gia tr bang X:

    So phep gan: Gmax = 2So phep so sanh: Smax = (N+1) + 1 = N + 2

    - Trung bnh:

    So phep gan: Gavg = 2So phep so sanh: Savg = (2 + N + 2) : 2 = N/2 + 2

    - Nh vay, neu thi gian thc hien phep gan khong ang ke th thuat toan cai tien sechay nhanh hn thuat toan nguyen thuy.

    2.2.3. Tm nh phan (Binary Search)

    Thuat toan tm tuyen tnh to ra n gian va thuan tien trong trng hp so phan t cuaday khong ln lam. Tuy nhien, khi so phan t cua day kha ln, chang han chung ta tmkiem ten mot khach hang trong mot danh ba ien thoai cua mot thanh pho ln theothuat toan tm tuan t th qua thc mat rat nhieu thi gian. Trong thc te, thong thngcac phan t cua day a co mot th t, do vay thuat toan tm nh phan sau ay se rutngan ang ke thi gian tm kiem tren day a co th t. Trong thuat toan nay chung tagia s cac phan t trong day a co th t tang (khong giam dan), tc la cac phan tng trc luon co gia tr nho hn hoac bang (khong ln hn) phan t ng sau no.Khi o, neu X nho hn gia tr phan t ng gia day (M[Mid]) th X ch co the tm

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    12/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 11

    thay na au cua day va ngc lai, neu X ln hn phan t M[Mid] th X ch co the tmthay na sau cua day.

    a. T tng:

    Pham vi tm kiem ban au cua chung ta la t phan t au tien cua day (First = 1)cho en phan t cuoi cung cua day (Last = N).

    So sanh gia tr X vi gia tr phan t ng gia cua day M la M[Mid].Neu X = M[Mid]: Tm thay

    Neu X < M[Mid]: Rut ngan pham vi tm kiem ve na au cua day M (Last = Mid1)

    Neu X > M[Mid]: Rut ngan pham vi tm kiem ve na sau cua day M (First = Mid+1)

    Lap lai qua trnh nay cho en khi tm thay phan t co gia tr X hoac pham vi tmkiem cua chung ta khong con na (First > Last).

    b. Thuat toan e quy (Recursion Algorithm):

    B1: First = 1

    B2: Last = NB3: IF (First > Last) //Het pham vi tm kiemB3.1: Khong tm thayB3.2: Thc hien Bkt

    B4: Mid = (First + Last)/ 2B5: IF (X = M[Mid])

    B5.1: Tm thay tai v tr MidB5.2: Thc hien Bkt

    B6: IF (X < M[Mid])Tm e quy t First en Last = Mid 1

    B7: IF (X > M[Mid])

    Tm e quy t First = Mid + 1 en LastBkt: Ket thuc

    c. Cai at thuat toan e quy:

    Ham BinarySearch co prototype:

    int BinarySearch (T M[], int N, T X);

    Ham thc hien viec tm kiem phan t co gia tr X trong mang M co N phan t a coth t tang. Neu tm thay, ham tra ve mot so nguyen co gia tr t 0 en N-1 la v trtng ng cua phan t tm thay. Trong trng hp ngc lai, ham tra ve gia tr 1(khong tm thay). Ham BinarySearch s dung ham e quy RecBinarySearch co

    prototype:int RecBinarySearch(T M[], int First, int Last, T X);

    Ham RecBinarySearch thc hien viec tm kiem phan t co gia tr X tren mang Mtrong pham vi t phan t th First en phan t th Last. Neu tm thay, ham tra vemot so nguyen co gia tr t First en Last la v tr tng ng cua phan t tm thay.Trong trng hp ngc lai, ham tra ve gia tr 1 (khong tm thay). Noi dung cua cacham nh sau:

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    13/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 12

    int RecBinarySearch (T M[], int First, int Last, T X){ if (First > Last)

    return (-1);int Mid = (First + Last)/2;if (X == M[Mid])

    return (Mid);

    if (X < M[Mid])return(RecBinarySearch(M, First, Mid 1, X));else

    return(RecBinarySearch(M, Mid + 1, Last, X));}

    //=======================================================

    int BinarySearch (T M[], int N, T X){ return (RecBinarySearch(M, 0, N 1, X));}

    d. Phan tch thuat toan e quy:

    - Trng hp tot nhat khi phan t gia cua mang co gia tr bang X:

    So phep gan: Gmin = 1So phep so sanh: Smin = 2

    - Trng hp xau nhat khi khong tm thay phan t nao co gia tr bang X:

    So phep gan: Gmax = log2N + 1So phep so sanh: Smax = 3log2N + 1

    - Trung bnh:

    So phep gan: Gavg = log2N + 1

    So phep so sanh: Savg = (3log2N + 3)e. Thuat toan khong e quy (Non-Recursion Algorithm):

    B1: First = 1B2: Last = NB3: IF (First > Last)

    B3.1: Khong tm thayB3.2: Thc hien Bkt

    B4: Mid = (First + Last)/ 2B5: IF (X = M[Mid])

    B5.1: Tm thay tai v tr Mid

    B5.2: Thc hien BktB6: IF (X < M[Mid])B6.1: Last = Mid 1B6.2: Lap lai B3

    B7: IF (X > M[Mid])B7.1: First = Mid + 1B7.2: Lap lai B3

    Bkt: Ket thuc

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    14/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 13

    f. Cai at thuat toan khong e quy:

    Ham NRecBinarySearch co prototype: int NRecBinarySearch (T M[], int N, T X);

    Ham thc hien viec tm kiem phan t co gia tr X trong mang M co N phan t a coth t tang. Neu tm thay, ham tra ve mot so nguyen co gia tr t 0 en N-1 la v trtng ng cua phan t tm thay. Trong trng hp ngc lai, ham tra ve gia tr 1

    (khong tm thay). Noi dung cua ham NRecBinarySearch nh sau:int NRecBinarySearch (T M[], int N, T X){ int First = 0;

    int Last = N 1;while (First Last Mid M[Mid] X =

    M[Mid]X

    M[Mid]Ban au 0 9 False 4 8 False True False

    1 0 3 False 1 3 False False True2 2 3 False 2 4 False False True3 3 3 False 3 5 True

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    15/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 14

    Ket qua sau 3 lan lap (e quy) thuat toan ket thuc.

    - Bay gi ta thc hien tm kiem phan t co gia tr X = 7 (khong tm thay):

    Lan lap First Last First > Last Mid M[Mid] X =M[Mid]

    X M[Mid]

    Ban au 0 9 False 4 8 False True False

    1 0 3 False 1 3 False False True2 2 3 False 2 4 False False True3 3 3 False 3 5 False False True4 4 3 True

    Ket qua sau 4 lan lap (e quy) thuat toan ket thuc.

    Lu y:

    Thuat toan tm nh phan ch co the van dung trong trng hp day/mang a coth t. Trong trng hp tong quat chung ta ch co the ap dung thuat toan tmkiem tuan t.

    Cac thuat toan e quy co the ngan gon song ton kem bo nh e ghi nhan malenh chng trnh (moi lan goi e quy) khi chay chng trnh, do vay co thelam cho chng trnh chay cham lai. Trong thc te, khi viet chng trnh neu cothe chung ta nen s dung thuat toan khong e quy.

    2.3. Cac giai thuat tm kiem ngoai (Tm kiem tren tap tin)

    2.3.1. at van e

    Gia s chung ta co mot tap tin F lu tr N phan t. Van e at ra la co hay khong phant co gia tr bang X c lu tr trong tap tin F? Neu co th phan t co gia tr bang X laphan t nam v tr nao tren tap tin F?

    2.3.2. Tm tuyen tnh

    a. T tng:

    Lan lt oc cac phan t t au tap tin F va so sanh vi gia tr X cho en khi occ phan t co gia tr X hoac a oc het tap tin F th ket thuc.

    b. Thuat toan:

    B1: k = 0B2: rewind(F) //Ve au tap tin FB3: read(F, a) //oc mot phan t t tap tin FB4: k = k + sizeof(T) //V tr phan t hien hanh (sau phan t mi oc)B5: IF a X AND !(eof(F))

    Lap lai B3B6: IF (a = X)

    Tm thay tai v tr k byte(s) tnh t au tap tinB7: ELSE

    Khong tm thay phan t co gia tr X

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    16/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 15

    B8: Ket thuc

    c. Cai at thuat toan:

    Ham FLinearSearch co prototype:

    long FLinearSearch (char * FileName, T X);

    Ham thc hien tm kiem phan t co gia tr X trong tap tin co ten FileName. Neu tmthay, ham tra ve mot so nguyen co gia tr t 0 en filelength(FileName) la v trtng ng cua phan t tm thay so vi au tap tin (tnh bang byte). Trong trng hpngc lai, hoac co loi khi thao tac tren tap tin ham tra ve gia tr 1 (khong tm thayhoac loi thao tac tren tap tin). Noi dung cua ham nh sau:

    long FLinearSearch (char * FileName, T X){ FILE * Fp;

    Fp = fopen(FileName, rb);if (Fp == NULL)

    return (-1);long k = 0;

    T a;int SOT = sizeof(T);while (!feof(Fp)){ if (fread(&a, SOT, 1, Fp) == 0)

    break;k = k + SOT;if (a == X)

    break;}

    fclose(Fp);if (a == X)

    return (k - SOT);return (-1);

    }

    d. Phan tch thuat toan:

    - Trng hp tot nhat khi phan t au tien cua tap tin co gia tr bang X:

    So phep gan: Gmin = 1 + 2 = 3So phep so sanh: Smin = 2 + 1 = 3So lan oc tap tin: Dmin = 1

    - Trng hp xau nhat khi khong tm thay phan t nao co gia tr bang X:

    So phep gan: Gmax = N + 2So phep so sanh: Smax = 2N + 1So lan oc tap tin: Dmax = N

    - Trung bnh:

    So phep gan: Gavg = (N + 5)So phep so sanh: Savg = (3 + 2N + 1) : 2 = N + 2So lan oc tap tin: Davg = (N + 1)

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    17/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 16

    2.3.3. Tm kiem theo ch muc (Index Search)

    Nh chung ta a biet, moi phan t d lieu c lu tr trong tap tin d lieu F thng cokch thc ln, ieu nay cung lam cho kch thc cua tap tin F cung kha ln. V vayviec thao tac d lieu trc tiep len tap tin F se tr nen lau, cha ke s mat an toan chod lieu tren tap tin. e giai quyet van e nay, i kem theo mot tap tin d lieu thng cothem cac tap tin ch muc (Index File) e lam nhiem vu ieu khien th t truy xuat dlieu tren tap tin theo mot khoa ch muc (Index key) nao o. Moi phan t d lieu trongtap tin ch muc IDX gom co 2 thanh phan: Khoa ch muc va V tr vat ly cua phan t dlieu co khoa ch muc tng ng tren tap tin d lieu. Cau truc d lieu cua cac phan ttrong tap tin ch muc nh sau:

    typedef struct IdxElement{ T IdxKey;

    long Pos;} IdxType;

    Tap tin ch muc luon luon c sap xep theo th t tang cua khoa ch muc. Viec taotap tin ch muc IDX se c nghien cu trong Chng 3, trong phan nay chung ta xemnh a co tap tin ch muc IDX e thao tac.

    a. T tng:

    Lan lt oc cac phan t t au tap tin IDX va so sanh thanh phan khoa ch muc vigia tr X cho en khi oc c phan t co gia tr khoa ch muc ln hn hoac bang Xhoac a oc het tap tin IDX th ket thuc. Neu tm thay th ta a co v tr vat ly cuaphan t d lieu tren tap tin d lieu F, khi o chung ta co the truy cap trc tiep en vtr nay e oc d lieu cua phan t tm thay.

    b. Thuat toan:

    B1: rewind(IDX)B2: read(IDX, ai)B3: IF ai.IdxKey < X AND !(eof(IDX))

    Lap lai B2B4: IF ai.IdxKey = X

    Tm thay tai v tr ai.Pos byte(s) tnh t au tap tinB5: ELSE

    Khong tm thay phan t co gia tr XB6: Ket thuc

    c. Cai at thuat toan:

    Ham IndexSearch co prototype:

    long IndexSearch (char * IdxFileName, T X);

    Ham thc hien tm kiem phan t co gia tr X da tren tap tin ch muc co tenIdxFileName. Neu tm thay, ham tra ve mot so nguyen co gia tr t 0 enfilelength(FileName)-1 la v tr tng ng cua phan t tm thay so vi au tap tin dlieu (tnh bang byte). Trong trng hp ngc lai, hoac co loi khi thao tac tren tap tinch muc ham tra ve gia tr 1 (khong tm thay). Noi dung cua ham nh sau:

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    18/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 17

    long IndexSearch (char * IdxFileName, T X){ FILE * IDXFp;

    IDXFp = fopen(IdxFileName, rb);if (IDXFp == NULL)

    return (-1);IdxType ai;

    int SOIE = sizeof(IdxType);while (!feof(IDXFp)){ if (fread(&ai, SOIE, 1, IDXFp) == 0)

    break;if (ai.IdxKey >= X)

    break;}

    fclose(IDXFp);if (ai.IdxKey == X)

    return (ai.Pos);return (-1);

    }d. Phan tch thuat toan:

    - Trng hp tot nhat khi phan t au tien cua tap tin ch muc co gia tr khoa chmuc ln hn hoac bang X:

    So phep gan: Gmin = 1So phep so sanh: Smin = 2 + 1 = 3So lan oc tap tin: Dmin = 1

    - Trng hp xau nhat khi moi phan t trong tap tin ch muc eu co khoa ch mucnho hn gia tr X:

    So phep gan: Gmax = 1So phep so sanh: Smax = 2N + 1So lan oc tap tin: Dmax = N

    - Trung bnh:

    So phep gan: Gavg = 1So phep so sanh: Savg = (3 + 2N + 1) : 2 = N + 2So lan oc tap tin: Davg = (N + 1)

    Cau hoi va Bai tap

    1. Trnh bay t tng cua cac thuat toan tm kiem: Tuyen tnh, Nh phan, Ch muc? Cacthuat toan nay co the c van dung trong cac trng hp nao? Cho v du?

    2. Cai at lai thuat toan tm tuyen tnh bang cac cach:- S dung vong lap for,- S dung vong lap do while?

    Co nhan xet g cho moi trng hp?

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    19/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 18

    3. Trong trng hp cac phan t cua day a co th t tang, hay cai tien lai thuat toantm tuyen tnh? Cai at cac thuat toan cai tien? anh gia va so sanh gia thuat toannguyen thuy vi cac thuat toan cai tien.

    4. Trong trng hp cac phan t cua day a co th t giam, hay trnh bay va cai at laithuat toan tm nh phan trong hai trng hp: e quy va Khong e quy?

    5. Van dung thuat toan tm nh phan, hay cai tien va cai at lai thuat toan tm kiem datheo tap tin ch muc? anh gia va so sanh gia thuat toan nguyen thuy vi cac thuattoan cai tien?

    6. S dung ham random trong C e tao ra mot day (mang) M co toi thieu 1.000 songuyen, sau o chon ngau nhien (cung bang ham random) mot gia tr nguyen K. Vandung cac thuat toan tm tuyen tnh, tm nh phan e tm kiem phan t co gia tr Ktrong mang M.

    Vi cung mot d lieu nh nhau, cho biet thi gian thc hien cac thuat toan.

    7. Trnh bay va cai at thuat toan tm tuyen tnh oi vi cac phan t tren mang haichieu trong hai trng hp:

    - Khong s dung phan t Cam canh.- Co s dung phan t Cam canh.

    Cho biet thi gian thc hien cua hai thuat toan trong hai trng hp tren.

    8. S dung ham random trong C e tao ra toi thieu 1.000 so nguyen va lu tr vao mottap tin co ten SONGUYEN.DAT, sau o chon ngau nhien (cung bang ham random)mot gia tr nguyen K. Van dung thuat toan tm tuyen tnh e tm kiem phan t co giatr K trong tap tin SONGUYEN.DAT.

    9. Thong tin ve moi nhan vien bao gom: Ma so la mot so nguyen dng, Ho va em la mot choi co toi a 20 ky t, Ten nhan vien la mot chuoi co toi a 10 ky t,

    Ngay, Thang, Nam sinh la cac so nguyen dng, Phai La Nam hoac N, Heso lng, Lng can ban, Phu cap la cac so thc. Viet chng trnh nhap vao danhsach nhan vien (t nhat la 10 ngi, khong nhap trung ma gia cac nhan vien vinhau) va lu tr danh sach nhan vien nay vao mot tap tin co ten NHANSU.DAT, sauo van dung thuat toan tm tuyen tnh e tm kiem tren tap tin NHANSU.DAT xem cohay khong nhan vien co ma la K (gia tr cua K co the nhap vao t ban phm hoacphat sinh bang ham random). Neu tm thay nhan vien co ma la K th in ra man hnhtoan bo thong tin ve nhan vien nay.

    10. Vi tap tin d lieu co ten NHANSU.DAT trong bai tap 9, thc hien cac yeu cau sau:

    - Tao mot bang ch muc theo Ten nhan vien.

    - Tm kiem tren bang ch muc xem trong tap tin NHANSU.DAT co hay khong nhanvien co ten la X, neu co th in ra toan bo thong tin ve nhan vien nay.- Lu tr bang ch muc nay vao trong tap tin co ten NSTEN.IDX.- Van dung thuat toan tm kiem da tren tap tin ch muc NSTEN.IDX e tm xem co

    hay khong nhan vien co ten la X trong tap tin NHANSU.DAT, neu co th in ra toanbo thong tin ve nhan vien nay.

    - Co nhan xet g khi thc hien tm kiem d lieu tren tap tin bang cac phng phap:Tm tuyen tnh va Tm kiem da tren tap tin ch muc.

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    20/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 19

    Chng 3:KY THUAT SAP XEP (SORTING)

    3.1. Khai quat ve sap xep

    e thuan tien va giam thieu thi gian thao tac ma ac biet la e tm kiem d lieu de

    dang va nhanh chong, thong thng trc khi thao tac th d lieu tren mang, tren taptin a co th t. Do vay, thao tac sap xep d lieu la mot trong nhng thao tac can thietva thng gap trong qua trnh lu tr, quan ly d lieu.

    Th t xuat hien d lieu co the la th t tang (khong giam dan) hoac th t giam(khong tang dan). Trong pham vi chng nay chung ta se thc hien viec sap xep dlieu theo th t tang. Viec sap xep d lieu theo th t giam hoan toan tng t.

    Co rat nhieu thuat toan sap xep song chung ta co the phan chia cac thuat toan sap xepthanh hai nhom chnh can c vao v tr lu tr cua d lieu trong may tnh, o la:

    - Cac giai thuat sap xep th t noi (sap xep th t tren day/mang),

    - Cac giai thuat sap xep th t ngoai (sap xep th t tren tap tin/file).

    Cung nh trong chng trc, chung ta gia s rang moi phan t d lieu c xem xetco mot thanh phan khoa (Key) e nhan dien, co kieu d lieu la T nao o, cac thanhphan con lai la thong tin (Info) lien quan en phan t d lieu o. Nh vay moi phan td lieu co cau truc d lieu nh sau:

    typedef struct DataElement{ T Key;

    InfoType Info;}DataType;

    Trong chng nay noi rieng va tai lieu nay noi chung, cac thuat toan sap xep cua

    chung ta la sap xep sao cho cac phan t d lieu co th t tang theo thanh phan khoa(Key) nhan dien. e n gian, chung ta gia s rang moi phan t d lieu ch la thanhphan khoa nhan dien.

    3.2. Cac giai thuat sap xep noi (Sap xep tren day/mang)

    ay, toan bo d lieu can sap xep c a vao trong bo nh trong (RAM). Do vay, sophan t d lieu khong ln lam do gii han cua bo nh trong, tuy nhien toc o sap xeptng oi nhanh. Cac giai thuat sap xep noi bao gom cac nhom sau:

    - Sap xep bang phng phap em (counting sort),

    - Sap xep bang phng phap oi cho (exchange sort),

    - Sap xep bang phng phap chon la (selection sort),

    - Sap xep bang phng phap chen (insertion sort),

    - Sap xep bang phng phap tron (merge sort).

    Trong pham vi cua giao trnh nay chung ta ch trnh bay mot so thuat toan sap xep tieubieu trong cac thuat toan sap xep cac nhom tren va gia s th t sap xep N phan tco kieu d lieu T trong mang M la th t tang.

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    21/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 20

    3.2.1. Sap xep bang phng phap oi cho (Exchange Sort)

    Cac thuat toan trong phan nay se tm cach oi cho cac phan t ng sai v tr (so vimang a sap xep) trong mang M cho nhau e cuoi cung tat ca cac phan t trong mangM eu ve ung v tr nh mang a sap xep.

    Cac thuat toan sap xep bang phng phap oi cho bao gom:

    - Thuat toan sap xep noi bot (bubble sort),- Thuat toan sap xep lac (shaker sort),

    - Thuat toan sap xep giam o tang hay o dai bc giam dan (shell sort),

    - Thuat toan sap xep da tren s phan hoach (quick sort).

    ay chung ta trnh bay hai thuat toan pho bien la thuat toan sap xep noi bot va sapxep da tren s phan hoach.

    a. Thuat toan sap xep noi bot (Bubble Sort):

    - T tng:

    + i t cuoi mang ve au mang, trong qua trnh i neu phan t di (ng phasau) nho hn phan t ng ngay tren (trc) no th theo nguyen tac cua bot khphan t nhe se b troi len pha tren phan t nang (hai phan t nay se c oicho cho nhau). Ket qua la phan t nho nhat (nhe nhat) se c a len (troi len)tren be mat (au mang) rat nhanh.

    + Sau moi lan i chung ta a c mot phan t troi len ung cho. Do vay, sau N1lan i th tat ca cac phan t trong mang M se co th t tang.

    - Thuat toan:

    B1: First = 1

    B2: IF (First = N)Thc hien BktB3: ELSE

    B3.1: Under = NB3.2: If (Under = First)

    Thc hien B4B3.3: Else

    B3.3.1: if (M[Under] < M[Under - 1])Swap(M[Under], M[Under 1]) //oi cho 2 phan t cho nhau

    B3.3.2: Under--B3.3.3: Lap lai B3.2

    B4: First++B5: Lap lai B2Bkt: Ket thuc

    - Cai at thuat toan:

    Ham BubbleSort co prototype nh sau:

    void BubbleSort(T M[], int N);

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    22/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 21

    Ham thc hien viec sap xep N phan t co kieu d lieu T tren mang M theo th ttang da tren thuat toan sap xep noi bot. Noi dung cua ham nh sau:

    void BubbleSort(T M[], int N){ for (int I = 0; I < N-1; I++)

    for (int J = N-1; J > I; J--)if (M[J] < M[J-1])

    Swap(M[J], M[J-1]);return;

    }

    Ham Swap co prototype nh sau:

    void Swap(T &X, T &Y);

    Ham thc hien viec hoan v gia tr cua hai phan t X va Y cho nhau. Noi dung cuaham nh sau:

    void Swap(T &X, T &Y){ T Temp = X;

    X = Y;Y = Temp;return;

    }

    - V du minh hoa thuat toan:

    Gia s ta can sap xep mang M co 10 phan t sau (N = 10):

    M: 15 10 2 20 10 5 25 35 22 30

    Ta se thc hien 9 lan i (N - 1 = 10 - 1 = 9) e sap xep mang M:

    Lan 1: First = 1

    J: 2 3 4 5 6 7 8 9 10

    M: 15 10 2 20 10 5 25 35 22 30

    M: 15 10 2 20 10 5 25 22 35 30

    M: 15 10 2 20 10 5 22 25 35 30

    M: 15 10 2 20 5 10 22 25 35 30

    M: 15 10 2 5 20 10 22 25 35 30

    M: 15 2 10 5 20 10 22 25 35 30

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    23/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 22

    M: 2 15 10 5 20 10 22 25 35 30

    Lan 2: First = 2

    J: 3 4 5 6 7 8 9 10

    M: 2 15 10 5 20 10 22 25 35 30

    M: 2 15 10 5 20 10 22 25 30 35

    M: 2 15 10 5 10 20 22 25 30 35

    M: 2 15 5 10 10 20 22 25 30 35

    M: 2 5 15 10 10 20 22 25 30 35

    Lan 3: First = 3

    J: 4 5 6 7 8 9 10

    M: 2 5 15 10 10 20 22 25 30 35

    M: 2 5 10 15 10 20 22 25 30 35

    Lan 4: First = 4J: 5 6 7 8 9 10

    M: 2 5 10 15 10 20 22 25 30 35

    M: 2 5 10 10 15 20 22 25 30 35

    Lan 5: First = 5

    J: 6 7 8 9 10M: 2 5 10 10 15 20 22 25 30 35

    Lan 6: First = 6

    J: 7 8 9 10

    M: 2 5 10 10 15 20 22 25 30 35

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    24/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 23

    Lan 7: First = 7

    J: 8 9 10

    M: 2 5 10 10 15 20 22 25 30 35

    Lan 8: First = 8

    J: 9 10

    M: 2 5 10 10 15 20 22 25 30 35

    Lan 9: First = 9

    J: 10

    M: 2 5 10 10 15 20 22 25 30 35

    Sau 9 lan i mang M tr thanh:

    M: 2 5 10 10 15 20 22 25 30 35

    - Phan tch thuat toan:

    + Trong moi trng hp:

    So phep gan: G = 0

    So phep so sanh: S = (N-1) + (N-2) + + 1 = N(N-1)

    + Trong trng hp tot nhat: khi mang ban au a co th t tang

    So phep hoan v: Hmin = 0

    + Trong trng hp xau nhat: khi mang ban au a co th t giam

    So phep hoan v: Hmin = (N-1) + (N-2) + + 1 = N(N-1)

    + So phep hoan v trung bnh: Havg = N(N-1)

    - Nhan xet ve thuat toan noi bot:

    + Thuat toan sap xep noi bot kha n gian, de hieu va de cai at.

    + Trong thuat toan sap xep noi bot, moi lan i t cuoi mang ve au mang th phan tnhe c troi len rat nhanh trong khi o phan t nang lai chm xuong kha chamchap do khong tan dung c chieu i xuong (chieu t au mang ve cuoi mang).

    + Thuat toan noi bot khong phat hien ra c cac oan phan t nam hai au cuamang a nam ung v tr e co the giam bt quang ng i trong moi lan i.

    b. Thuat toan sap xep da tren s phan hoach (Partitioning Sort):Thuat toan sap xep da tren s phan hoach con c goi la thuat toan sap xepnhanh (Quick Sort).

    - T tng:

    + Phan hoach day M thanh 03 day con co th t tng oi thoa man ieu kien:

    Day con th nhat (au day M) gom cac phan t co gia tr nho hn gia tr trungbnh cua day M,

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    25/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 24

    Day con th hai (gia day M) gom cac phan t co gia tr bang gia tr trung bnhcua day M,

    Day con th ba (cuoi day M) gom cac phan t co gia tr ln hn gia tr trung bnhcua day M,

    + Neu day con th nhat va day con th ba co nhieu hn 01 phan t th chung ta lai

    tiep tuc phan hoach e quy cac day con nay.+ Viec tm gia tr trung bnh cua day M hoac tm kiem phan t trong M co gia tr banggia tr trung bnh cua day M rat kho khan va mat thi gian. Trong thc te, chungta chon mot phan t bat ky (thng la phan t ng v tr gia) trong day cacphan t can phan hoach e lam gia tr cho cac phan t cua day con th hai (daygia) sau khi phan hoach. Phan t nay con c goi la phan t bien (boundaryelement). Cac phan t trong day con th nhat se co gia tr nho hn gia tr phan tbien va cac phan t trong day con th ba se co gia tr ln hn gia tr phan t bien.

    + Viec phan hoach mot day c thc hien bang cach tm cac cap phan t ng hai day con hai ben phan t gia (day 1 va day 3) nhng b sai th t (phan tng day 1 co gia tr ln hn gia tr phan t gia va phan t ng day 3 cogia tr nho hn gia tr phan t gia) e oi cho (hoan v) cho nhau.

    - Thuat toan:

    B1: First = 1B2: Last = NB3: IF (First Last) //Day con ch con khong qua 01 phan t

    Thc hien BktB4: X = M[(First+Last)/2] //Lay gia tr phan t giaB5: I = First //Xuat phat t au day 1 e tm phan t co gia tr > XB6: IF (M[I] > X)

    Thc hien B8B7: ELSE

    B7.1: I++B7.2: Lap lai B6

    B8: J = Last //Xuat phat t cuoi day 3 e tm phan t co gia tr < XB9: IF (M[J] < X)

    Thc hien B11B10: ELSE

    B10.1: J--B10.2: Lap lai B9

    B11: IF (I J)

    B11.1: Hoan_V(M[I], M[J])B11.2: I++B11.3: J--B11.4: Lap lai B6

    B12: ELSEB12.1: Phan hoach e quy day con t phan t th First en phan t th JB12.2: Phan hoach e quy day con t phan t th I en phan t th Last

    Bkt: Ket thuc

    - Cai at thuat toan:

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    26/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 25

    Ham QuickSort co prototype nh sau:

    void QuickSort(T M[], int N);

    Ham thc hien viec sap xep N phan t co kieu d lieu T tren mang M theo th ttang da tren thuat toan sap xep nhanh. Ham QuickSort s dung ham phan hoach equy PartitionSort e thc hien viec sap xep theo th t tang cac phan t cua mot day

    con gii han t phan t th First en phan t th Last tren mang M. HamPartitionSort co prototype nh sau:

    void PartitionSort(T M[], int First, int Last);

    Noi dung cua cac ham nh sau:

    void PartitionSort(T M[], int First, int Last){ if (First >= Last)

    return;T X = M[(First+Last)/2];int I = First;int J = Last;

    do { while (M[I] < X)I++;while (M[J] > X)

    J--;if (I

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    27/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 26

    I X = 15 J

    M: 45 55 25 20 15 5 25 30 10 3

    I X = 15 J

    M: 3 55 25 20 15 5 25 30 10 45

    I X = 15 J

    M: 3 10 25 20 15 5 25 30 55 45

    I X = 15

    M: 3 10 5 20 15 25 25 30 55 45

    JFirst X = 15 I Last

    M: 3 10 5 15 20 25 25 30 55 45

    J

    Phan hoach cac phan t trong day con t First -> J:

    First = 1 Last = J = 4 X = M[(1+4)/2] = M[2] = 10

    First X = 10 Last

    M: 3 10 5 15 20 25 25 30 55 45

    Phan hoach:I X = 10 J

    M: 3 10 5 15 20 25 25 30 55 45

    X = 10 J

    M: 3 10 5 15 20 25 25 30 55 45

    I

    J X = 10

    M: 3 5 10 15 20 25 25 30 55 45I

    Phan hoach cac phan t trong day con t First -> J:

    First = 1 Last = J = 2 X = M[(1+2)/2] = M[1] = 3

    First Last

    M: 3 5 10 15 20 25 25 30 55 45

    X = 3

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    28/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 27

    Phan hoach:I J

    M: 3 5 10 15 20 25 25 30 55 45

    X = 3

    IJ

    M: 3 5 10 15 20 25 25 30 55 45

    X = 3

    J I

    M: 3 5 10 15 20 25 25 30 55 45

    X = 3

    First J I Last

    M: 3 5 10 15 20 25 25 30 55 45

    Phan hoach cac phan t trong day con t I -> Last:First = I = 3 Last = 4 X = M[(3+4)/2] = M[3] = 10

    First Last

    M: 3 5 10 15 20 25 25 30 55 45

    X = 10Phan hoach:

    I J

    M: 3 5 10 15 20 25 25 30 55 45

    X = 10IJ

    M: 3 5 10 15 20 25 25 30 55 45

    X = 10J I

    M: 3 5 10 15 20 25 25 30 55 45

    X = 10First J I Last

    M: 3 5 10 15 20 25 25 30 55 45

    Phan hoach cac phan t trong day con t I -> Last:

    First = I = 5 Last = 10 X = M[(5+10)/2] = M[7] = 25

    First X = 25 Last

    M: 3 5 10 15 20 25 25 30 55 45

    Phan hoach:

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    29/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 28

    I X = 25 J

    M: 3 5 10 15 20 25 25 30 55 45

    I X = 25

    M: 3 5 10 15 20 25 25 30 55 45

    JFirst X = 25 I Last

    M: 3 5 10 15 20 25 25 30 55 45

    JPhan hoach cac phan t trong day con t First -> J:

    First = 5 Last = J = 6 X = M[(5+6)/2] = M[5] = 20First Last

    M: 3 5 10 15 20 25 25 30 55 45

    X = 20Phan hoach:

    I J

    M: 3 5 10 15 20 25 25 30 55 45

    X = 20IJ

    M: 3 5 10 15 20 25 25 30 55 45

    X = 20J I

    M: 3 5 10 15 20 25 25 30 55 45X = 20First J I Last

    M: 3 5 10 15 20 25 25 30 55 45

    Phan hoach cac phan t trong day con t I -> Last:

    First = I = 7 Last = 10 X = M[(7+10)/2] = M[8] = 30First X = 30 Last

    M: 3 5 10 15 20 25 25 30 55 45

    Phan hoach:I X = 30 J

    M: 3 5 10 15 20 25 25 30 55 45

    IJ

    M: 3 5 10 15 20 25 25 30 55 45

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    30/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 29

    X = 30J I

    M: 3 5 10 15 20 25 25 30 55 45

    X = 30

    FirstJ I Last

    M: 3 5 10 15 20 25 25 30 55 45

    X = 30Phan hoach cac phan t trong day con t I -> Last:

    First = I = 9 Last = 10 X = M[(9+10)/2] = M[9] = 55First Last

    M: 3 5 10 15 20 25 25 30 55 45

    X = 55Phan hoach:

    I J

    M: 3 5 10 15 20 25 25 30 55 45

    X = 55J I

    M: 3 5 10 15 20 25 25 30 45 55

    X = 55

    M: 3 5 10 15 20 25 25 30 45 55

    Toan bo qua trnh phan hoach ket thuc, day M tr thanh:M: 3 5 10 15 20 25 25 30 45 55

    - Phan tch thuat toan:

    + Trng hp tot nhat, khi mang M ban au a co th t tang:

    So phep gan: Gmin = 1 + 2 + 4 + + 2^[Log2(N) 1] = N-1So phep so sanh: Smin = NLog2(N)/2So phep hoan v: Hmin = 0

    + Trng hp xau nhat, khi phan t X c chon gia day con la gia tr ln nhat

    cua day con. Trng hp nay thuat toan QuickSort tr nen cham chap nhat:So phep gan: Gmax = 1 + 2 + + (N-1) = N(N-1)/2So phep so sanh: Smax = (N-1)(N-1)So phep hoan v: Hmax = (N-1) + (N-2) + + 1 = N(N-1)/2

    + Trung bnh:

    So phep gan: Gavg = [(N-1)+N(N-1)/2]/2 = (N-1)(N+2)/4So phep so sanh: Savg = [NLog2(N)/2 + N(N-1)]/2 = N[Log2(N)+2N2]/4So phep hoan v: Havg = N(N-1)/4

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    31/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 30

    3.2.2. Sap xep bang phng phap chon (Selection Sort)

    Cac thuat toan trong phan nay se tm cach la chon cac phan t thoa man ieu kienchon la e a ve ung v tr cua phan t o, cuoi cung tat ca cac phan t trongmang M eu ve ung v tr.

    Cac thuat toan sap xep bang phng phap chon bao gom:

    - Thuat toan sap xep chon trc tiep (straight selection sort),- Thuat toan sap xep da tren khoi/heap hay sap xep tren cay (heap sort).

    ay chung ta ch trnh bay thuat toan sap xep chon trc tiep

    Thuat toan sap xep chon trc tiep (Straight Selection Sort):

    - T tng:

    + Ban au day co N phan t cha co th t. Ta chon phan t co gia tr nho nhattrong N phan t cha co th t nay e a len au nhom N phan t.

    + Sau lan th nhat chon la phan t nho nhat va a len au nhom chung ta con lai

    N-1 phan t ng pha sau day M cha co th t. Chung ta tiep tuc chon phant co gia tr nho nhat trong N-1 phan t cha co th t nay e a len au nhomN-1 phan t. . Do vay, sau N1 lan chon la phan t nho nhat e a len aunhom th tat ca cac phan t trong day M se co th t tang.

    + Nh vay, thuat toan nay chu yeu chung ta i tm gia tr nho nhat trong nhom N-Kphan t cha co th t ng pha sau day M. Viec nay n gian chung ta vandung thuat toan tm kiem tuan t.

    - Thuat toan:

    B1: K = 0B2: IF (K = N-1)

    Thc hien BktB3: Min = M[K+1]B4: PosMin = K+1B5: Pos = K+2B6: IF (Pos > N)

    Thc hien B8B7: ELSE

    B7.1: If (Min > M[Pos])B7.1.1: Min = M[Pos]B7.1.2: PosMin = Pos

    B7.2: Pos++B7.3: Lap lai B6

    B8: HoanV(M[K+1], M[PosMin])B9: K++B10: Lap lai B2Bkt: Ket thuc

    - Cai at thuat toan:

    Ham SelectionSort co prototype nh sau:

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    32/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 31

    void SelectionSort(T M[], int N);

    Ham thc hien viec sap xep N phan t co kieu d lieu T tren mang M theo th ttang da tren thuat toan sap xep chon trc tiep. Noi dung cua ham nh sau:

    void SelectionSort(T M[], int N){ int K = 0, PosMin;

    while (K < N-1){ T Min = M[K];PosMin = K;for (int Pos = K+1; Pos < N; Pos++)

    if (Min > M[Pos]){ Min = M[Pos];

    PosMin = Pos}

    Swap(M[K], M[PosMin]);K++;

    }return;

    }

    - V du minh hoa thuat toan:

    Gia s ta can sap xep mang M co 10 phan t sau (N = 10):

    M: 1 60 2 25 15 45 5 30 33 20

    Ta se thc hien 9 lan chon la (N - 1 = 10 - 1 = 9) phan t nho nhat e sap xepmang M:

    Lan 1: Min = 1 PosMin = 1 K = 0K+1

    M: 1 60 2 25 15 45 5 30 33 20

    Lan 2: Min = 2 PosMin = 3 K = 1K+1

    M: 1 60 2 25 15 45 5 30 33 20

    K+1

    M: 1 2 60 25 15 45 5 30 33 20

    Lan 3: Min = 5 PosMin = 7 K = 2K+1

    M: 1 2 60 25 15 45 5 30 33 20

    K+1

    M: 1 2 5 25 15 45 60 30 33 20

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    33/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 32

    Lan 4: Min = 15 PosMin = 5 K = 3

    K+1

    M: 1 2 5 25 15 45 60 30 33 20

    K+1

    M: 1 2 5 15 25 45 60 30 33 20

    Lan 5: Min = 20 PosMin = 10 K = 4

    K+1

    M: 1 2 5 15 25 45 60 30 33 20

    K+1

    M: 1 2 5 15 20 45 60 30 33 25

    Lan 6: Min = 25 PosMin = 10 K = 5K+1

    M: 1 2 5 15 20 45 60 30 33 25

    K+1

    M: 1 2 5 15 20 25 60 30 33 45

    Lan 7: Min = 30 PosMin = 8 K = 6K+1

    M: 1 2 5 15 20 25 60 30 33 45

    K+1

    M: 1 2 5 15 20 25 30 60 33 45

    Lan 8: Min = 33 PosMin = 9 K = 7K+1

    M: 1 2 5 15 20 25 30 60 33 45

    K+1

    M: 1 2 5 15 20 25 30 33 60 45

    Lan 9: Min = 45 PosMin = 10 K = 8K+1

    M: 1 2 5 15 20 25 30 33 60 45

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    34/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 33

    K+1

    M: 1 2 5 15 20 25 30 33 45 60

    Sau lan 9: K = 9 va mang M tr thanh:

    M: 1 2 5 15 20 25 30 33 45 60

    - Phan tch thuat toan:

    + Trong moi trng hp:So phep so sanh: S = (N-1)+(N-2)++1 = N(N-1)/2So phep hoan v: H = N-1

    + Trng hp tot nhat, khi mang M ban au a co th t tang:

    So phep gan: Gmin = 2(N-1)

    + Trng hp xau nhat, khi mang M ban au a co th t giam dan:

    So phep gan: Gmax = 2[N+(N-1)+ +1] = N(N+1)+ Trung bnh:

    So phep gan: Gavg = [2(N-1)+N(N+1)]/2 = (N-1) + N(N+1)/2

    3.2.3. Sap xep bang phng phap chen (Insertion Sort)

    Cac thuat toan trong phan nay se tm cach tan dung K phan t au day M a co th ttang, chung ta em phan t th K+1 chen vao K phan t au day sao cho sau khi chenchung ta co K+1 phan t au day M a co th t tang.

    Ban au day M co t nhat 1 phan t au day a co th t tang (K=1). Nh vay sau toia N-1 bc chen la chung ta se sap xep xong day M co N phan t theo th t tang.

    Cac thuat toan sap xep bang phng phap chen bao gom:

    - Thuat toan sap xep chen trc tiep (straight insertion sort),

    - Thuat toan sap xep chen nh phan (binary insertion sort).

    Trong tai lieu nay chung ta ch trnh bay thuat toan sap xep chen trc tiep.

    Thuat toan sap xep chen trc tiep (Straight Insertion Sort):

    - T tng:

    e chen phan t th K+1 vao K phan t au day a co th t chung ta se tien hanh

    tm v tr ung cua phan t K+1 trong K phan t au bang cach van dung thuat giaitm kiem tuan t (Sequential Search). Sau khi tm c v tr chen (chac chan co vtr chen) th chung ta se tien hanh chen phan t K+1 vao ung v tr chen bang cachdi cac phan t t v tr chen en phan t th K sang phai (ra pha sau) 01 v tr vachen phan t K+1 vao v tr cua no.

    - Thuat toan:

    B1: K = 1B2: IF (K = N)

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    35/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 34

    Thc hien BktB3: X = M[K+1]B4: Pos = 1B5: IF (Pos > K)

    Thc hien B7B6: ELSE //Tm v tr chen

    B6.1: If (X Pos) //Neu con phai di cac phan t t Pos->K ve pha sau 1 v tr

    B8.1: M[I] = M[I-1]B8.2: I--B8.3: Lap lai B8

    B9: ELSE //a di xong cac phan t t Pos->K ve pha sau 1 v trB9.1: M[Pos] = X //Chen X vao v tr Pos

    B9.2: K++B9.3: Lap lai B2Bkt: Ket thuc

    - Cai at thuat toan:

    Ham InsertionSort co prototype nh sau:

    void InsertionSort(T M[], int N);

    Ham thc hien viec sap xep N phan t co kieu d lieu T tren mang M theo th ttang da tren thuat toan sap xep chen trc tiep. Noi dung cua ham nh sau:

    void InsertionSort(T M[], int N){ int K = 1, Pos;

    while (K < N){ T X = M[K];

    Pos = 0;while (X > M[Pos])

    Pos++;for (int I = K; I > Pos; I--)

    M[I] = M[I-1];M[Pos] = X;K++;

    }

    return;}

    - V du minh hoa thuat toan:

    Gia s ta can sap xep mang M co 10 phan t sau (N = 10):

    M: 11 16 12 75 51 54 5 73 36 52

    Ta se thc hien 9 lan chen (N - 1 = 10 - 1 = 9) cac phan t vao day con a co th ttang ng au day M:

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    36/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 35

    Lan 1: K = 1 X = M[K+1] = M[2] = 16 Pos = 2K: 1

    M: 11 16 12 75 51 54 5 73 36 52

    X

    Lan 2: K = 2 X = M[K+1] = M[3] = 12 Pos = 2K: 1 2

    M: 11 16 12 75 51 54 5 73 36 52

    XK: 1 2

    M: 11 12 16 75 51 54 5 73 36 52

    X

    Lan 3: K = 3 X = M[K+1] = M[4] = 75 Pos = 4

    K: 1 2 3M: 11 12 16 75 51 54 5 73 36 52

    XK: 1 2 3

    M: 11 12 16 75 51 54 5 73 36 52

    X

    Lan 4: K = 4 X = M[K+1] = M[5] = 51 Pos = 4

    K: 1 2 3 4M: 11 12 16 75 51 54 5 73 36 52

    XK: 1 2 3 4

    M: 11 12 16 51 75 54 5 73 36 52

    X

    Lan 5: K = 5 X = M[K+1] = M[6] = 54 Pos = 5

    K: 1 2 3 4 5M: 11 12 16 51 75 54 5 73 36 52

    XK: 1 2 3 4 5

    M: 11 12 16 51 54 75 5 73 36 52

    X

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    37/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 36

    Lan 6: K = 6 X = M[K+1] = M[7] = 5 Pos = 1K: 1 2 3 4 5 6

    M: 11 12 16 51 54 75 5 73 36 52

    XK: 1 2 3 4 5 6

    M: 5 11 12 16 51 54 75 73 36 52

    X

    Lan 7: K = 7 X = M[K+1] = M[8] = 73 Pos = 7K: 1 2 3 4 5 6 7

    M: 5 11 12 16 51 54 75 73 36 52

    XK: 1 2 3 4 5 6 7

    M: 5 11 12 16 51 54 73 75 36 52

    X

    Lan 8: K = 8 X = M[K+1] = M[9] = 36 Pos = 5K: 1 2 3 4 5 6 7 8

    M: 5 11 12 16 51 54 73 75 36 52

    X

    K: 1 2 3 4 5 6 7 8

    M: 5 11 12 16 36 51 54 73 75 52

    X

    Lan 9: K = 9 X = M[K+1] = M[10] = 52 Pos = 7K: 1 2 3 4 5 6 7 8 9

    M: 5 11 12 16 36 51 54 73 75 52

    XK: 1 2 3 4 5 6 7 8 9

    M: 5 11 12 16 36 51 52 54 73 75X

    Thuat toan ket thuc: K = 10, mang M a c sap xep theo th t tangK: 1 2 3 4 5 6 7 8 9 10

    M: 5 11 12 16 36 51 52 54 73 75

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    38/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 37

    - Phan tch thuat toan:

    + Trng hp tot nhat, khi mang M ban au a co th t tang:

    So phep gan: Gmin = 2(N-1)So phep so sanh: Smin = 1+2++(N-1) = N(N-1)/2So phep hoan v: Hmin = 0

    + Trng hp xau nhat, khi mang M ban au luon co phan t nho nhat trong N-Kphan t con lai ng v tr sau cung sau moi lan hoan v:

    So phep gan: Gmax = [2(N-1)]+[ 1+2++(N-1)] = [2(N-1)] + [N(N-1)/2]So phep so sanh: Smax = (N-1)So phep hoan v: Hmax = 0

    + Trung bnh:

    So phep gan: Gavg = 2(N-1) + [N(N-1)/4]So phep so sanh: Savg = [N(N-1)/2 + (N-1)]/2 = (N+2)(N-1)/4So phep hoan v: Havg = 0

    + Chung ta nhan thay rang qua trnh tm kiem v tr chen cua phan t K+1 va quatrnh di cac phan t t v tr chen en K ra pha sau 01 v tr co the ket hp laivi nhau. Nh vay, qua trnh di di cac phan t ra sau nay se bat au t phan tth K tr ve au day M cho en khi gap phan t co gia tr nho hn phan t K+1th chung ta ong thi va di di xong va ong thi cung bat gap v tr chen.Ngoai ra, chung ta cung co the tnh toan gia tr ban au cho K tuy thuoc vao sophan t ng au day M ban au co th t tang la bao nhieu phan t ch khongnhat thiet phai la 1. Khi o, thuat toan sap xep chen trc tiep cua chung ta co thec hieu chnh lai nh sau:

    - Thuat toan hieu chnh:

    B1: K = 1B2: IF (M[K] 0 And X < M[Pos])

    B6.1: M[Pos+1] = M[Pos]B6.2: Pos--

    B6.3: Lap lai B6B7: ELSE //Chen X vao v tr Pos+1B7.1: M[Pos+1] = XB7.2: K++B7.3: Lap lai B3

    Bkt: Ket thuc

    - Cai at thuat toan hieu chnh:

    Ham InsertionSort1 co prototype nh sau:

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    39/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 38

    void InsertionSort1(T M[], int N);

    Ham thc hien viec sap xep N phan t co kieu d lieu T tren mang M theo th ttang da tren thuat toan sap xep chen trc tiep a hieu chnh. Noi dung cua hamnh sau:

    void InsertionSort1(T M[], int N)

    { int K = 1, Pos;while(M[K-1] Pos + 1 = 4K: 1 2 3 4

    M: 14 16 20 75 50 5 25 75 60 50

    X=50K: 1 2 3 4

    M: 14 16 20 75 75 5 25 75 60 50

    K: 1 2 3 4

    M: 14 16 20 50 75 5 25 75 60 50

    X

    Lan 2: K = 5 X = M[K+1] = M[6] = 5 Pos = 0 => Pos + 1 = 1K: 1 2 3 4 5

    M: 14 16 20 50 75 5 25 75 60 50

    X=5K: 1 2 3 4 5

    M: 14 14 16 20 50 75 25 75 60 50

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    40/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 39

    K: 1 2 3 4 5

    M: 5 14 16 20 50 75 25 75 60 50

    X

    Lan 3: K = 6 X = M[K+1] = M[7] = 25 Pos = 4 => Pos + 1 = 5

    K: 1 2 3 4 5 6M: 5 14 16 20 50 75 25 75 60 50

    X=25K: 1 2 3 4 5 6

    M: 5 14 16 20 50 50 75 75 60 50

    K: 1 2 3 4 5 6

    M: 5 14 16 20 25 50 75 75 60 50

    X

    Lan 4: K = 7 X = M[K+1] = M[8] = 75 Pos = 7 => Pos + 1 = 8K: 1 2 3 4 5 6 7

    M: 5 14 16 20 25 50 75 75 60 50

    X=75K: 1 2 3 4 5 6 7

    M: 5 14 16 20 25 50 75 75 60 50

    X=75Lan 5: K = 8 X = M[K+1] = M[9] = 60 Pos = 6 => Pos + 1 = 7K: 1 2 3 4 5 6 7 8

    M: 5 14 16 20 25 50 75 75 60 50

    X=60K: 1 2 3 4 5 6 7 8

    M: 5 14 16 20 25 50 75 75 75 50

    K: 1 2 3 4 5 6 7 8

    M: 5 14 16 20 25 50 60 75 75 50

    X

    Lan 6: K = 9 X = M[K+1] = M[10] = 50 Pos = 6 => Pos + 1 = 7K: 1 2 3 4 5 6 7 8 9

    M: 5 14 16 20 25 50 60 75 75 50

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    41/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 40

    X=50K: 1 2 3 4 5 6 7 8 9

    M: 5 14 16 20 25 50 60 60 75 75

    K: 1 2 3 4 5 6 7 8 9

    M: 5 14 16 20 25 50 50 60 75 75X

    Thuat toan ket thuc: K = 10, mang M a c sap xep theo th t tangK: 1 2 3 4 5 6 7 8 9 10

    M: 5 14 16 20 25 50 50 60 75 75

    - Phan tch thuat toan hieu chnh:

    + Trng hp tot nhat, khi mang M ban au a co th t tang:

    So phep gan: Gmin = 1So phep so sanh: Smin = 2(N-1) + 1So phep hoan v: Hmin = 0

    + Trng hp xau nhat, khi mang M ban au a co th t giam dan:

    So phep gan: Gmax = 1+[1+2++(N-1)]+[N-1] = N(N+1)/2So phep so sanh: Smax = 1+2[1+2++(N-1)]+[N-1] = N2So phep hoan v: Hmax = 0

    + Trung bnh:

    So phep gan: Gavg = [1+ N(N-1)/2]/2

    So phep so sanh: Savg = [2(N-1) + 1+N2]/2So phep hoan v: Havg = 0

    3.2.4. Sap xep bang phng phap tron (Merge Sort)

    Cac thuat toan trong phan nay se tm cach tach mang M thanh cac mang con theo cacng chay (run) roi sau o tien hanh nhap cac mang nay lai theo tng cap ngchay e tao thanh cac ng chay mi co chieu dai ln hn ng chay cu. Sau motso lan tach/nhap th cuoi cung mang M ch con lai 1 ng chay, luc o th cac phan ttren mang M se tr nen co th t.

    Cac thuat toan sap xep bang phng phap tron bao gom:

    - Thuat toan sap xep tron thang hay tron trc tiep (straight merge sort),

    - Thuat toan sap xep tron t nhien (natural merge sort).

    Trc khi i vao chi tiet tng thuat toan chung ta hay tm hieu khai niem va cac van elien quan en ng chay (run)

    - ng chay (Run):

    Day M[I], M[I+1], , M[J] (I J: 1 I, J N) la mot ng chay neu no co th t.

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    42/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 41

    - Chieu dai cua ng chay (Runs Length):

    So phan t cua mot ng chay con c goi la chieu dai cua ng chay.

    Nh vay:

    + Moi phan t cua day la mot ng chay co chieu dai bang 1.+ Mot day co the bao gom nhieu ng chay.

    - Tron cac ng chay:

    Khi ta tron cac ng chay lai vi nhau se cho ra mot ng chay mi co chieu daibang tong chieu dai cac ng chay ban au.

    a. Thuat toan sap xep tron trc tiep hay tron thang (Straight Merge Sort):

    - T tng:

    Ban au day M co N run(s) vi chieu dai moi run: L = 1, ta tien hanh phan phoi luanphien N run(s) cua day M ve hai day phu Temp1, Temp2 (Moi day phu co N/2run(s)). Sau o tron tng ng tng cap run hai day phu Temp1, Temp2 thanh motrun mi co chieu dai L = 2 e a ve M va day M tr thanh day co N/2 run(s) vichieu dai moi run: L = 2.

    Nh vay, sau moi lan phan phoi va tron cac run tren day M th so run tren day M segiam i mot na, ong thi chieu dai moi run se tang gap oi. Do o, sau Log2(N)lan phan phoi va tron th day M ch con lai 01 run vi chieu dai la N va khi o day Mtr thanh day co th t.

    Trong thuat giai sau, e de theo doi chung ta trnh bay rieng 02 thuat giai:+ Thuat giai phan phoi luan phien (tach) cac ng chay vi chieu dai L tren day

    M ve cac day phu Temp1, Temp2.+ Thuat giai tron (nhap) cac cap ng chay tren Temp1, Temp2 co chieu dai L

    ve M thanh cac ng chay vi chieu dai 2*L.

    - Thuat toan phan phoi:

    B1: I = 1 //Ch so tren MB2: J1 = 1 //Ch so tren Temp1B3: J2 = 1 //Ch so tren Temp2B4: IF (I > N) //a phan phoi het

    Thc hien Bkt//Chep 1 run t M sang Temp1B5: K = 1 //Ch so e duyet cac runB6: IF (K > L) //Duyet het 1 run

    Thc hien B13

    B7: Temp1[J1] = M[I] //Chep cac phan t cua run tren M sang Temp1B8: I++B9: J1++B10: K++B11: IF (I > N) //a phan phoi het

    Thc hien BktB12: Lap lai B6//Chep 1 run t M sang Temp2

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    43/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 42

    B13: K = 1B14: IF (K > L)

    Thc hien B21B15: Temp2[J2] = M[I] //Chep cac phan t cua run tren M sang Temp2B16: I++B17: J2++

    B18: K++B19: IF (I > N) //a phan phoi hetThc hien Bkt

    B20: Lap lai B14B21: Lap lai B4B22: N1 = J1-1 //So phan t tren Temp1B23: N2 = J2-1 //So phan t tren Temp2Bkt: Ket thuc

    - Thuat toan tron:

    B1: I = 1 // Ch so tren M

    B2: J1 = 1 //Ch so tren Temp1B3: J2 = 1 //Ch so tren Temp2B4: K1 = 1 //Ch so e duyet cac run tren Temp1B5: K2 = 1 //Ch so e duyet cac run tren Temp2B6: IF (J1 > N1) //a chep het cac phan t trong Temp1

    Thc hien B25B7: IF (J2 > N2) //a chep het cac phan t trong Temp2

    Thc hien B30B8: IF (Temp1[J1] Temp2[J2]) //Temp1[J1] ng trc Temp2[J2] tren M

    B8.1: M[I] = Temp1[J1]B8.2: I++

    B8.3: J1++B8.4: K1++B8.5: If (K1 > L) //a duyet het 1 run trong Temp1

    Thc hien B11B8.6: Lap lai B6

    B9: ELSE //Temp2[J2] ng trc Temp1[J1] tren MB9.1: M[I] = Temp2[J2]B9.2: I++B9.3: J2++B9.4: K2++B9.5: If (K2 > L) //a duyet het 1 run trong Temp2

    Thc hien B18B9.6: Lap lai B6B10: Lap lai B4//Chep phan run con lai trong Temp2 ve MB11: IF (K2 > L) //a chep het phan run con lai trong Temp2 ve M

    Lap lai B4B12: M[I] = Temp2[J2]B13: I++B14: J2++

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    44/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 43

    B15: K2++B16: IF (J2 > N2) //a chep het cac phan t trong Temp2

    Thc hien B30B17: Lap lai B11//Chep phan run con lai trong Temp1 ve MB18: IF (K1 > L) //a chep het phan run con lai trong Temp1 ve M

    Lap lai B4B19: M[I] = Temp1[J1]B20: I++B21: J1++B22: K1++B23: IF (J1 > N1) //a chep het cac phan t trong Temp1

    Thc hien B25B24: Lap lai B18//Chep cac phan t con lai trong Temp2 ve MB25: IF (J2>N2)

    Thc hien Bkt

    B26: M[I] = Temp2[J2]B27: I++B28: J2++B29: Lap lai B25//Chep cac phan t con lai trong Temp1 ve MB30: IF (J1>N1)

    Thc hien BktB31: M[I] = Temp1[J1]B32: I++B33: J1++B34: Lap lai B30

    Bkt: Ket thuc- Thuat toan sap xep tron thang:

    B1: L = 1 //Chieu dai ban au cua cac runB2: IF (L N) //Day ch con 01 run

    Thc hien BktB3: Phan_Phoi(M, N, Temp1, N1, Temp2, N2, L)B4: Tron(Temp1, N1, Temp2, N2, M, N, L)B5: L = 2*LB6: Lap lai B2Bkt: Ket thuc

    - Cai at thuat toan:Ham StraightMergeSort co prototype nh sau:

    void StraightMergeSort(T M[], int N);

    Ham thc hien viec sap xep N phan t co kieu d lieu T tren mang M theo th ttang da tren thuat toan sap tron trc tiep. Ham s dung cac ham Distribute, Mergeco prototype va y ngha nh sau:

    void Distribute(T M[], int N, T Temp1[], int &N1, T Temp2[], int &N2, int L);

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    45/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 44

    Ham thc hien viec phan phoi luan phien cac ng chay co chieu dai L tren day Mco N phan t ve thanh cac day Temp1 va Temp2 co tng ng N1 va N2 phan t.

    void Merge(T Temp1[], int N1, T Temp2[], int N2, T M[], int &N, int L);

    Ham thc hien viec tron tng cap tng ng cac ng chay vi o dai L trenTemp1, Temp2 ve day M thanh cac ng chay co chieu dai 2*L.

    Noi dung cua cac ham nh sau:void Distribute(T M[], int N, T Temp1[], int &N1, T Temp2[], int &N2, int L){ int I = 0, J1 = 0, J2 = 0;

    while (I < N){ for(int K = 0; K

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    46/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 45

    return;}

    K2++;if (K2 == L){ for (; K1 < L && J1 < N1; K1++, I++, J1++)

    M[I] = Temp1[J1];

    K1 = K2 = 0;break;}

    }}

    while (J1 < N1){ M[I] = Temp1[J1];

    I++;J1++;

    }while (J2 < N2){ M[I] = Temp2[J2];

    I++;J2++;

    }N = N1 + N2;return;

    }

    //========================================================

    void StraightMergeSort(T M[], int N){ int L = 1, N1 = 0, N2 = 0;

    T * Temp1 = new T[N];

    T * Temp2 = new T[N];if (Temp1 == NULL || Temp2 == NULL)

    return;while (L < N){ Distribute(M, N, Temp1, N1, Temp2, N2, L);

    Merge(Temp1, N1, Temp2, N2, M, N, L);L = 2*L;

    }delete Temp1;delete Temp2;return;

    }- V du minh hoa thuat toan:

    Gia s ta can sap xep mang M co 10 phan t sau (N = 10):

    M: 41 36 32 47 65 21 52 57 70 50

    Ta thc hien cac lan phan phoi va tron cac phan t cua M nh sau:

    Lan 1: L = 1

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    47/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 46

    Phan phoi M thanh Temp1, Temp2:

    M: 41 36 32 47 65 21 52 57 70 50

    Temp1:N1=541 32 65 52 70

    Temp2:N2=536 47 21 57 50

    Tron Temp1, Temp2 thanh M:Temp1:N1=5

    41 32 65 52 70

    Temp2:N2=536 47 21 57 50

    M: 36 41 32 47 21 65 52 57 50 70

    Lan 2: L = 2

    Phan phoi M thanh Temp1, Temp2:

    M: 36 41 32 47 21 65 52 57 50 70

    Temp1: N1=6

    36 41 21 65 50 70

    Temp2: N2=432 47 52 57

    Tron Temp1, Temp2 thanh M:Temp1: N1=6

    36 41 21 65 50 70

    Temp2: N2=432 47 52 57

    M: 32 36 41 47 21 52 57 65 50 70

    Lan 3: L = 4

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    48/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 47

    Phan phoi M thanh Temp1, Temp2:

    M: 32 36 41 47 21 52 57 65 50 70

    Temp1:N1=6 32 36 41 47 50 70

    Temp2: N2=4 21 52 57 65

    Tron Temp1, Temp2 thanh M:

    Temp1:N1=6 32 36 41 47 50 70

    Temp2: N2=4 21 52 57 65

    M: 21 32 36 41 47 52 57 65 50 70

    Lan 4: L = 8

    Phan phoi M thanh Temp1, Temp2:

    M: 21 32 36 41 47 52 57 65 50 70

    Temp1: N1=8 21 32 36 41 47 52 57 65

    Temp2: N2=2 50 70

    Tron Temp1, Temp2 thanh M:

    Temp1: N1=8 21 32 36 41 47 52 57 65

    Temp2: N2=2 50 70

    M: 21 32 36 41 47 50 52 57 65 70

    L = 16 > 10: Ket thuc thuat toan

    - Phan tch thuat toan:

    + Trong thuat giai nay chung ta luon thc hien log2(N) lan phan phoi va tron cac run.

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    49/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 48

    + moi lan phan phoi run chung ta phai thc hien: N phep gan va 2N phep so sanh(N phep so sanh het ng chay va N phep so sanh het day).

    + moi lan tron run chung ta cung phai thc hien: N phep gan va 2N+N/2 phep sosanh (N phep so sanh het ng chay, N phep so sanh het day va N/2 phep sosanh gia tr cac cap tng ng tren 2 day phu).

    + Trong moi trng hp:So phep gan: G = 2NLog2(N)So phep so sanh: S = (4N+N/2)Log2(N)So phep hoan v: Hmin = 0

    + Trong thuat giai nay chung ta s dung 02 day phu, tuy nhien tong so phan t 02day phu nay cung ch bang N, do vay a tao ra s lang ph bo nh khong canthiet. e giai quyet van e nay chung ta ch can s dung 01 day phu song chungta ket hp qua trnh tron cac cap run co chieu dai L tng ng hai au daythanh cac run co chieu dai 2L va phan phoi luan phien ve hai au cua mot dayphu. Sau o chung ta oi vai tro cua 02 day nay cho nhau.

    + Trc khi hieu chnh lai thuat giai chung ta xet day M gom 10 phan t sau e minhhoa cho qua trnh nay:

    Gia s ta can sap xep mang M co 10 phan t sau (N = 10):

    M: 81 63 69 74 14 77 56 57 9 25

    Ta thc hien cac lan tron cac cap run hai au day nay va ket hp phan phoi cacrun mi tron ve hai au day kia nh sau:

    Lan 1: L = 1

    Tron cac cap run co chieu dai L = 1 tren M thanh cac run co chieu dai L = 2 va kethp phan phoi luan phien cac run nay ve hai au day Tmp:

    M: 81 63 69 74 14 77 56 57 9 25

    Tmp: 25 81 57 69 14 77 74 56 63 9

    oi vai tro cua M va Tmp cho nhau

    M: 25 81 57 69 14 77 74 56 63 9

    Lan 2: L = 2Tron cac cap run co chieu dai L = 2 tren M thanh cac run co chieu dai L = 4 va kethp phan phoi luan phien cac run nay ve hai au day Tmp:

    M: 25 81 57 69 14 77 74 56 63 9

    Tmp: 9 25 63 81 14 77 74 69 57 56

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    50/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 49

    oi vai tro cua M va Tmp cho nhau

    M: 9 25 63 81 14 77 74 69 57 56

    Lan 3: L = 4

    Tron cac cap run co chieu dai L = 4 tren M thanh cac run co chieu dai L = 8 va kethp phan phoi luan phien cac run nay ve hai au day Tmp:

    M: 9 25 63 81 14 77 74 69 57 56

    Tmp: 9 25 56 57 63 69 74 81 77 14

    oi vai tro cua M va Tmp cho nhau

    M: 9 25 56 57 63 69 74 81 77 14

    Lan 4: L = 8

    Tron cac cap run co chieu dai L = 4 tren M thanh cac run co chieu dai L = 8 va kethp phan phoi luan phien cac run nay ve hai au day Tmp:

    M: 9 25 56 57 63 69 74 81 77 14

    Tmp: 9 14 25 56 57 63 69 74 77 81

    oi vai tro cua M va Tmp cho nhauM: 9 14 25 56 57 63 69 74 77 81

    L = 16 > 10: Ket thuc thuat toan

    + Nh vay, trong thuat giai nay chung ta ch con thao tac tron cac cap run co chieudai L tng ng hai au day thanh mot run mi co chieu dai 2L e a ve dayphu. Van e la chung ta se luan phien at run mi vao au day phu (theo th ttang) va cuoi day phu (theo th t giam). Tc la hai bc tron va phan phoi ac ket hp lai vi nhau. Thuat giai hieu chnh nh sau:

    - Thuat toan Tron Phan phoi cac cap ng chay:B1: I1 = 1 // Ch so t au day MB2: I2 = N // Ch so t cuoi day MB3: J1 = 1 // Ch so t au day TempB4: J2 = N // Ch so t cuoi day TempB5: Head = True // C bao pha at run mi trong qua trnh tron - phan phoiB6: K1 = 1 // Ch so e duyet cac run au day MB7: K2 = 1 // Ch so e duyet cac run cuoi day MB8: IF (I1 > I2) // a tron va phan phoi het cac run

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    51/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 50

    Thc hien BktB9: IF (M[I1] M[I2]) // M[I1] ng trc M[I2] tren Temp

    B9.1: If (Head = True)B9.1.1: Temp[J1] = M[I1]B9.1.2: J1++

    B9.2: Else

    B9.2.1: Temp[J2] = M[I1]B9.2.2: J2--B9.3: I1++B9.4: If (I1 > I2)

    Thc hien BktB9.5: K1++B9.6: If (K1 > L) //a duyet het 1 run pha au trong M

    Thc hien B11B9.7: Lap lai B9

    B10: ELSE // M[I2] ng trc M[I1] tren TempB10.1: If (Head = True)

    B10.1.1: Temp[J1] = M[I2]B10.1.2: J1++B10.2: Else

    B10.2.1: Temp[J2] = M[I2]B10.2.2: J2--

    B10.3: I2--B10.4: If (I1 > I2)

    Thc hien BktB10.5: K2++B10.6: If (K2 > L) //a duyet het 1 run pha sau trong M

    Thc hien B18

    B10.7: Lap lai B9//Chep phan run con lai pha sau trong M ve Temp

    B11: IF (K2 > L) //a chep het phan run con lai pha sau trong M ve TempB11.1: Head = Not(Head)B11.2: Lap lai B6

    B12: IF (Head = True)B12.1: Temp[J1] = M[I2]B12.2: J1++

    B13: ELSEB13.1: Temp[J2] = M[I2]

    B13.2: J2--B14: I2--B15: If (I1 > I2)

    Thc hien BktB16: K2++B17: Lap lai B11

    //Chep phan run con lai pha trc trong M ve Temp

    B18: IF (K1 > L) //a chep het phan run con lai pha trc trong M ve Temp

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    52/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 51

    B18.1: Head = Not(Head)B18.2: Lap lai B6

    B19: IF (Head = True)B19.1: Temp[J1] = M[I1]B19.2: J1++

    B20: ELSE

    B20.1: Temp[J2] = M[I1]B20.2: J2--B21: I1++B22: If (I1 > I2)

    Thc hien BktB23: K1++B24: Lap lai B18Bkt: Ket thuc

    - Thuat toan sap xep tron thang hieu chnh:

    B1: L = 1 //Chieu dai ban au cua cac run

    B2: IF (L N) //Day ch con 01 runThc hien BktB3: Tron_Phan_Phoi(M, N, Temp, L)B4: L = 2*LB5: IF (L > N)

    // Chep cac phan t t Temp ve MB5.1: I = 1B5.2: If (I > N)

    Thc hien BktB5.3: M[I] = Temp[I]B5.4: I++

    B5.5: Lap lai B5.2B6: Tron_Phan_Phoi(Temp, N, M, L)B7: L = 2*LB8: Lap lai B2Bkt: Ket thuc

    - Cai at thuat toan hieu chnh:

    Ham StraightMergeSortModify co prototype nh sau:

    void StraightMergeSortModify(T M[], int N);

    Ham thc hien viec sap xep N phan t co kieu d lieu T tren mang M theo th t

    tang da tren thuat toan sap tron trc tiep a hieu chnh. Ham s dung hamMergeDistribute co prototype va y ngha nh sau:

    void MergeDistribute(T M[], int N, T Temp[], int L);

    Ham thc hien viec tron cac cap run co chieu dai L hai au day M thanh mot runco chieu dai 2L va phan phoi luan phien cac run co chieu dai 2L nay ve hai au dayTemp. Noi dung cua ham nh sau:

    void MergeDistribute(T M[], int N, T Temp[], int L)

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    53/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 52

    { int I1 = 0, I2 = N-1, J1 = 0, J2 = N-1, K1 = 0, K2 = 0, Head = 1;while (I1

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    54/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 53

    }else{ Temp[J2] = M[I1]

    J2--;}

    Head = 0-Head;

    K1 = K2 = 0;break;}

    }}

    return;}

    //========================================================

    void StraightMergeSortModify(T M[], int N){ int L = 1 ;

    T * Temp = new T[N];

    if (Temp == NULL)return;

    while (L < N){ MergeDistribute(M, N, Temp, L);

    L = 2*L;if (L >= N){ for (int I = 0; I < N; I++)

    M[I] = Temp[I];break;

    }MergeDistribute(Temp, N, M, L);

    L = 2*L;}

    delete Temp;return;

    }

    - Phan tch thuat toan hieu chnh:

    + Trong thuat giai nay chung ta luon thc hien log2(N) lan tron - phan phoi cac run.

    + Moi lan tron-phan phoi chung ta phai thc hien: N phep gan va N+N/2+N/2=2Nphep so sanh.

    + Trong moi trng hp:So phep gan: G = NLog2(N)So phep so sanh: S = 2NLog2(N)So phep hoan v: Hmin = 0

    + Nh vay thuat giai tron thang hieu chnh va tiet kiem bo nh, va thc hien nhanhhn thuat giai tron thang ban au.

    + Tuy nhien, trong thuat giai tron thang chung ta a thc hien viec phan phoi va troncac cap ng chay co chieu dai co nh ma trong thc te tren day cac ng

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    55/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 54

    chay co the co chieu dai ln hn. ieu nay se giam bt so lan phan phoi va troncac cap ng chay cho chung ta. Thuat giai tron t nhien c trnh bay sau ayse loai bo c nhc iem nay cua thuat giai tron thang.

    b. Thuat toan sap xep tron t nhien (Natural Merge Sort):

    - T tng:Tan dung cac ng chay t nhien co san tren day, tien hanh tron tng ng caccap ng chay t nhien nam hai au day M thanh mot ng chay mi va phanphoi luan phien cac ng chay mi nay ve hai au day phu Temp. Sau o lai tieptuc tron tng ng tng cap run hai au day phu Temp thanh mot run mi va phanphoi luan phien run mi nay ve hai au day M. C tiep tuc nh vay cho en khi trenM hoac tren Temp ch con lai 01 run th ket thuc.

    - Thuat toan Tron Phan phoi cac cap ng chay t nhien:

    B1: I1 = 1 // Ch so t au day MB2: I2 = N // Ch so t cuoi day M

    B3: J1 = 1 // Ch so t au day TempB4: J2 = N // Ch so t cuoi day Temp

    B5: Head = True // C bao pha at run mi trong qua trnh tron - phan phoi

    B6: IF (I1 > I2) // a tron va phan phoi het cac runThc hien Bkt

    B7: IF (M[I1] M[I2]) // M[I1] ng trc M[I2] tren TempB7.1: If (Head = True)

    B7.1.1: Temp[J1] = M[I1]

    B7.1.2: J1++

    B7.2: ElseB7.2.1: Temp[J2] = M[I1]B7.2.2: J2--

    B7.3: I1++B7.4: If (I1 > I2)

    Thc hien BktB7.5: If (M[I1] < M[I1-1]) //a duyet het 1 run pha au trong M

    Thc hien B9B7.6: Lap lai B7

    B8: ELSE // M[I2] ng trc M[I1] tren TempB8.1: If (Head = True)

    B8.1.1: Temp[J1] = M[I2]B8.1.2: J1++

    B8.2: ElseB8.2.1: Temp[J2] = M[I2]B8.2.2: J2--

    B8.3: I2--B8.4: If (I1 > I2)

    Thc hien Bkt

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 GT Cau Truc Du Lieu Va Giai Thuat - Smith.N Studio

    56/230

    Giao trnh: Cau Truc D Lieu va Giai Thuat

    Trang: 55

    B8.5: If (M[I2] < M[I2+1]) //a duyet het 1 run pha sau trong MThc hien B15

    B8.6: Lap lai B7

    //Chep phan run con lai pha sau trong M ve Temp

    B9: IF (M[I2] < M[I2+1]) //a chep het phan run con lai pha sau trong M ve Temp

    B9.1: Head = Not(Head)B9.2: Lap lai B6B10: IF (Head = True)

    B10.1: Temp[J1] = M[I2]B10.2: J1++

    B11: ELSEB11.1: Temp[J2] = M[I2]B11.2: J2--

    B12: I2--B13: IF (I1> I2)

    Thc hien Bkt

    B14: Lap lai B9//Chep phan run c