Cuon gido trinh ‘Cau true dir lieu va giai tliuat " ra dai phdn nao giup sinh vien, nhieng nha phat trien phdn mem trong tuomg lai co duqc nhung kien thicc co ban ban ddu cho van de lir
Trang 1j DAI HOC CONG NG H lfiP HA NOl
l l l l l l l l l l l l l l l l i l l l \
GT.0000026859
nhA x uAt bAn kh o a h o c vA KY THUAT
Trang 3TRUdNG £>AI HOC CONG NGHIEP HA NQI
AN VAN MINH - TRAN HUNG CUCJNG
Trang 5MUC LUC
Trang
HNOI DAU .7
Chirong 1 TONG QUAN VE CAU TRUC DU LIEU VA GIAI THUAT VAI TRO CUA VIEC XAY Dl/NG CAU TRUC DU' LIEU 9
CAC TIEU CHUAN DANH G1A CAU TRUC DU' LIEU 12
CAC CAU TRUC DU' LIEU CO SCJ TRONG C/C++ 13
1.3.1 Djnh nghTa kieu dir lie u 14
1.3.2 Cac thuoc tinh cua mqt kieu dir lieu 14
1.3.3 Cac kieu du lieu cor b a n 14
1.3.4 Cac kieu dir lieu co cau true 15
1.3.5 Cac phep toan trong h? kieu C/C ++ 19
g iAi t h uAt - p hAn t ic h vA dAn h g iA g iAi t h uAt 19
1.4.1 Giai th u a t 19
1.4.2 Bieu dien giai thuat 21
1.4.3 Phan tich giai th u at 21
1.4.4 Phan tich mpt so giai th u a t 28
TLUAN CHUNG 32
ITAPCHU'ONG 1 32
Chining 2 DE QUY VA GIAI THUAT DE QUY K.HA1 N1EM VEDEQUY 34
g iAi t h uAt d e q u y vA hAm d e q u y 34
2.2.1 Giai thuat d? quy 34
2.2.2 Ham de quy 35
THIET K.E GlAl THUAT DE QUY 36
2.3.1 Ham n ! 36
2.3.2 Bai toan day s6 FIBONACCI 37
2.3.3 Bai toan “Thap HaNoi” 38
HIEU LQ'C CUA DE Q U Y 40
ITAPCHU'ONG 2 .42
3
Trang 6Chiro'ng 3 DANH SACH TUYEN TINH
3.1 KHAlNIEM DANH SACH TUYEN TINH 44
3.1.1 Khai niem 44
3.1.2 Cac phep toan tren danh sach 44
3.2 LUlI TRU' KE TIEP CUA DANH SACH TUYEN TINH 46
3.2.1 Thiet ke cau true dir lieu 46
3.2.2 Cai dat cac phep toan tren danh sach 48
3.2.3 Bai tap ap dpng 54
3.3 DANH SACH MOC NOI 61
3.3.1 KiSu con tro va cac khai niem lien quan 61
3.3.2 Danh sach moc noi don 66
3.4 DANH SACH NOI VONG 89
3.5 DANH SACH MOC NOI HAI CHIEU 90
3.5.1 Phep bo sung mQt nut m o i 92
3.5.2 Loai bo mpt nut tren danh sach 93
3.6 UNO DUNG DANH SACH MOC NOI 94
3.6.1 Giai thieu umg dung .94
3.6.2 Giai th u at 95
3.7 STACK VA QUEUE .97
3.7.1 Stack (Ngan x ep ) 97
3.7.2 Queue (Hang d p i) 114
BAI TAP CHUONG 3 125
Chirffng 4 CAY 4.1 CAY VACAC KHAI NIEM CO BAN .131
4.1.1 Djnh nghTa 131
4.1.2 MQt so khai nipm ca ban 132
4.2 CAYNH1 PHAN 133
4.2.1 Djnh nghTa 133
4.2.2 Tinh chat .133
4.2.3 Bieu dien cay nhi phan 134
4.2.4 Phep duyet cay nhi phan .138
4.2.5 Cay nhj phan bi6u diin bieu thurc 140
4
Trang 73 CAY NHI PHAN l i\1 KIEM 142
4.3.1 Djnh nghTa 142
4.3.2 Cai dat cay nhj phan tim kiem 143
4.3.3 Cac thao tac ca ban tren cay nhj phan tim kiem .144
4.3.4 Thai gian thirc hien cac phep toan tren cay nhi phan tim kiem 157
4 CAY CAN BANG (AVL T R E E ) 158
4.4.1 Cay can bang hoan toan (CCBHT) .159
4.4.2 Cay can b a n g - 159
Al TAP CHU'ONG 4 .166
Chirffng 5 SAP XEP VA TiM KIEM I c A c PHU’ONG PHAP SAP X E P 169
5.1.1 Khai niem sap x e p 169
5.1.2 Ba plurang phap sap xep ca ban 170
5.1.3 Phircmg phap phan doan 184
5.1.4 Phutmg phap vun dong 191
5.1.5 Phirong phap trpn 201
5.1.6 Bai tap ap dung 211
ET LUAN CHUNG 216
.2 TiM KIEM 217
5.2.1 Bai toan tim kiem 217
5.2.2 Tim kiem tuan t p 217
5.2.3 Tim kiem nhj phan 221
5.2.4 Bai tap ap dpng 225
Al TAP CHU'ONG 5 229
Al I.If.UTHAM KHA O 231
5
Trang 9L O I N O I D A U
A lgdy nay cong nghe thong tin duqc ung dung rong rai trong moi ITnh
1 V vice cua ddi song xa hoi Viec xdy dung cac he thong phan mem ung dung de gidi quyet yeu cdu thay the cho con nguoi trd nen pho bien hon bao gia het Tuy nhien, day luon la mot viec het sue kho khan trong moi giai doqn phat trien, trong do co mot giai doan het sue quan trong do la thiet ke cdu true dir lieu he thong va cac gidi thuat gidi quyet cac yeu cdu.
Cuon gido trinh ‘Cau true dir lieu va giai tliuat " ra dai phdn nao giup sinh
vien, nhieng nha phat trien phdn mem trong tuomg lai co duqc nhung kien thicc co ban ban ddu cho van de lira chon, xay dung cdu true dir lieu cung nhu cac gidi thuat Gido trinh nay la tai lieu hoc tap cua mot mon hoc co so cung ten trong Chuong trinh ddo tao ky su cong nghe thong tin Noi dung gido trinh trinh bay nhieng kien thirc co ban ve cdu true dir lieu va ede gidi thuat xir ly lien quan, giup sinh vien nhqn thirc duqc van de thiet ke vd lua chon cdu true dir lieu vd cac gidi thuat, mot giai doan quan trong trong quy trinh phdt trien phdn mem.
De hoc tot mon hoc nay, doi hoi sinh vien phai thanh thao It nhat mot ngon ngir lap trinh co ban nhu Pascal, C/C++ thanh thao cac ky thuat lap trinh nhu: cdu true re nhanh, cdu true lap, ky thuat lap trinh don the (sic dung ham).
NOt dung gido trinh duqc chla lam 5 chuong:
• Chuong 1 Tong quan ve cdu true die lieu vd gidi thuat, bao gom cac
khdi niem ve cdu true dir lieu vd gidi thuat, moi quan he giua chung, van
de thiet ke cdu true dir lieu, thiet ke vd phdn tich gidi thuat, danh gia do phirc tap cua gidi thuat.
• Chuong 2 De quy vd gidi thuat de quy, mot phuong phap thiet ke gidi
thuat khd quan trong, nhat la vdi cac gidi thuat bieu dien cac thao tac xtir
iy cdu true die lieu dang cay.
7
Trang 10• Chuffng 3 Danh sach tuyen tinh, mot lo'ai cdu true dir lieu rat pho bien
trong cac bai loan tin hoc Trong chuong nay chung toi trinh bay cac phuong phap luu trie danh sdeh vd cac thao tac xic ly tuemg ung vdi moi loai danh sdeh.
• Chuffng 4 Cay, mot dang cdu true die lieu phi tuyen tinh, chuong nay
chu yeu noi ve cay nhi phdn vd cac ung dung cua chung.
• Chuffng 5 Sap xep vd tim kiem, tap trung vao van de mo ta, thiet ke vd
danh gia cac gidi thudt sap xep vd tim kiem thong dung, cung nhu van de cai dat cac gidi thudt nay trong bai toan ung dung.
Cac chuong trinh ung dung vd bai tap trong moi chuong da duoc chon loc
d mice do phu hop ddi vdi sinh vien, qua do sinh vien hieu sau sac them ve bai giang, cimg cd them ve ky thudt chi dat chuong trinh vd nam bat duoc mot so kien thirc khdng duoc true tiep gioi thieu trong gido trinh.
Trong qua trinh bien soan gido trinh nay, chung toi da nhan duoc rat nhieu
y kien dong gop ve noi dung tic phia ede dong nghiep Chung toi xin chan thanh cam on.
Mac dii da cd gang rat nhieu trong khi bien soan, nhung cung khdng the tranh khoi nhung thieu sot Chung toi mong muon nhan duoc nhung y kien dong gop, chinh sica de noi dung cua gido trinh duoc hoan thien hon trong nhung Ian tai ban sau.
Moi y kien dong gop xin giri ve Khoa Cong nghe thong tin - Truong Dai hoc
Cong nghiep Ha Noi, hoac giri vao hop thu dien tic: anvanminh 78@yahoo com.
NHOM TAC GIA
A n Van M inli - Tran Ilu n g Cirung
8
Trang 11Chmmg 1 TONG QUAN VE CAU TRUC DU LIEU
VA GIAI THUAT
Ghuang nay dua ra cac khai niem: Cau true dir lieu, giai thuat va moi quan
he giira chung Ben canh do ta cung dua ra ky thuat de danh gia do phuc tap cua thuat toan va giai thieu cac cau true dir lieu ca ban
,1 VAI TRO CUA VIEC XAY Dl/NG CAU TRUC DU' LIEU
Xay dung mot he thong phan mem la chuyen bai toan thuc te thanh bai toan
co the giai quyet tren may tinh Bat ky bai toan nao cung bao gom cac doi tugng du lieu va cac thao tac xu ly tren cac doi tuomg do Do do, de xay dung mot mo hinh tin hoc phan anh dugc bai toan thuc te can chu trong den hai van de:
Cac thanh phan du lieu thuc te rat da dang, phong phu va thuang chua dung nhung quan he nao do vai nhau Do do, trong mo hinh tin hoc cua bai toan, can phai bieu dien chung mot each thich hap nhat, de vira co the phan anh chinh xac cac du lieu thuc te nay, vira co the de dang dung may tinh de xu
ly Cong viec nay goi la xay d\mg can tn'ic dir lieu cho bai toAn
Tir nhung yeu cau xir ly trong thuc te, can tim ra cac giai phap tuang ung de giai quyet yeu cau, moi giai phap can phai xac dinh trinh tu cac thao tac may tinh can thi hanh de cho ra ket qua mong muon Day la buac xay dung giai thuat cho bai toan Giai thuat phan anh cac phep xu ly, con doi tugng xir
ly cua giai thuat lai la du lieu Chinh du lieu chua dung cac thong tin can thiet de thuc hien giai thuat De xac dinh dugc giai thuat phu hop ta can phai biet no tac dong den loai du lieu nao va khi lua chon cau true du lieu cung
9
Trang 12can phai hieu ro nhung thao tac nao tac dong len du lieu do Nhu vay trong mot chucrng trinh, cau true du lieu va giai thuat co moi quan he chat che veri nhau, dugc the hien qua cong thuc sau:
Cau true dir lieu + Giai thuat = Chirong trinh
Chang han khi dua ra khai niem tap hop thi ngucri ta dinh nghTa cac phep toan tren tap hop do (phep hop, phep giao, phep trir, ), hay khi dua ra khai niem menh de ta cung phai dinh nghTa cac phep toan: phep hoi, phep tuyen, keo theo, trong ngon ngu lap trinh cung tuang tu nhu vay: vi du khi djnh nghTa kieu nguyen thi ta phai chi ra pham vi bieu dien trong 2 byte vai mien gia tri tu -32768 den +32767 va cac thao tac tren kieu du lieu nay trong do
co phep chia lay du Tuy nhien khi dinh nghTa kieu so thuc thi lai khong co phep toan nay
Vai mot cau true dir lieu da chon, se co nhung giai thuat tuang ung, phu hap Khi cau true du lieu thay doi thuang giai thuat cung phai thay doi theo
de tranh viec xu ly gugng ep, thieu tu nhien tren mot cau true khong phu hap Han nua, mot cau true du lieu tot se giup giai thuat xu ly tren do co the phat huy tac dung tot han, vira nhanh vira tiet kiem, giai thuat cung don gian
va de hieu han
Vi du 1.1: Mot chuang trinh quan ly diem thi cua sinh vien can luu cac
diem so cua 3 sinh vien Do moi sinh vien co 4 diem so tuang ung vai 4 mon hoc khac nhau nen du lieu co dang nhu sau:
Bang 1.1 Bieu diin du lieu diem cua cac sinh vien
Xet thao tac xu ly la xuat diem so cac mon cua timg sinh vien
Gia sir co cac phuang an to chuc luu tr£r nhu sau:
Phuang an 1: Sit dung mang mot chieu:
Co tat ca 3(SV) * 4(Mon) = 12 diem so can luu tru, do do ta khai bao mang nhu sau:
0
Trang 13so tuang ung trong mang a:
Bang diem (dong i, cot j) => a[ i *so cot + j ]
Ngugc lai, vai mot phan tu bat ky trong mang, muon biet do la diem so cua sinh vien nao, mon gi, phai dung cong thuc xac dinh sau:
a[i] => bang diem (ddng(i/cot), cot (i % so cot))
Vai phuang an nay, giai thuat xir ly dugc cai dat nhu sau:
void xuat ( int a [])
for (i = 0; i < 12; i++)
1
sv = i / so_mon;
mon = i % so_mon;
cout<<"\nBiem mon: "«mon;
cout<<" cua sinh vien "«sv;
cout«" la: " « a[i]«endl;
1
1
Phuang an 2: Sir dung mang hai chieu:
Khai bao mang hai chieu a co kich thuac 3 dong * 4 cot nhu sau:
i n t a [ 3 ] [ 4 ] ;
Bang 1.2 Luu dir lifu diem sinh vien bang mang hai chieu
Dong 1 a[l][l] = 7 a[l][2] =9 a[l][3] = 7 a[l][4] = 5
Ddng 2 a[2][l]= 5 a[2][2] = 4 a[2][3] = 2 a[2][4] = 7
Dong 3 a[3][l] = 8 a[3][2] = 9 a[3][3] = 6 a[3][4] = 7
11
Trang 14Va truy xuat diem so mon j cua sinh vien i la phan tur tai dong i cot j trong bang cung chinh la phan tir d dong i cot j trong mang.
Bang diem (dong i, cot j) => a[ij]
Vdi phuang an nay, giai thuat xir ly dupe cai dat nhu sau:
void Xuat ( int a [4] [3])
{
int i, j, so_sv = 3, so_mon = 4;
for (i = 0; i <= so_sv; i++)
{
for (j = 0; j <= so_mon; j++)
cout«"\nDiem mon: "<<j;
cout«" cua sinh vien "«i;
cout<<" la: " « a [ i ] [j]«endl;
}}
1
Nhan xet:
Co the thay ro phuang an 2 cung cap mot cau true luu tru phu hop vdi du lieu thuc te han phuang an 1, va do vay giai thuat xu ly tren cau true du lieu ciia phuang an 2 cung dan gian han, tu nhien han
1.2 CAC TIEU CHUAN DANH GIA CAU TRUC Dff LIEU
Do tarn quan trong cua cau true du lieu da dupe trinh bay trong phan tren, nen nhat thiet phai chu trpng den viec lua chon mot phuang an to chirc du lieu thich hap cho bai toan Mot cau true du lieu tot phai thoa man cac tieu chuan sau:
* Phdn anh dung thuc te: Day la tieu chuan quan trpng nhat, quyet dinh
tinh dung dan cua toan bo bai toan Can xem xet ky luang cung nhu dir tru cac trang thai bien doi cua du lieu trong chu trinh song de co the lua chon cau true du lieu luu tru the hien chinh xac doi tuang thuc te
12
Trang 15Vi du: Mot so tinh huong sau chon cau true luu tru sai
- Chon bien so nguyen kieu int de liru tru tien thuang ban hang (dugc ti'nh theo cong thuc tien thuang ban hang = tri gia hang *5%), do vay khi lam tron moi gia tri tien thuang se gay thiet hai cho nhan vien ban hang
Truong hop nay phai sir dung bien so thuc de phan anh dung ket qua cua
cong thuc ti'nh thuc te
- Trong truang trung hoc, moi lop co the nhan toi da 25 hoc sinh Lap hien
co 20 hoc sinh, moi thang, moi hoc sinh dong hoc phi 15.000 dong Chon
mot bien so nguyen (kha nang luu tru -32768 + 32767) de luu tru tong so
hoc phi cua lap hoc trong thang, neu xay ra truang hap co them 5 hoc sinh nua vao lap thi gia tri tong hoc phi thu dugc la 375000 dong, vugt kha nang luu tru cua bien da chpn, gay ra tinh trang tran so va sai lech
qua cua bai toan, vi?c phat trien cac giai thuat dan gian, tu nhien han va chucmg trinh dat hieu qua cao han ve toe do xir ly
nguyen vira du de dam nhiem dugc chuc nang cua no Tieu chuan nay nen can nhac tuy vao tinh huong cu the khi thuc hien bai toan Neu to chuc sir dung bai toan can co nhung xir ly nhanh thi khi chon cau true du lieu yeu to tiet kiem thai gian xir ly phai dat nang han tieu chuan sir dung toi da bo nho, va ngugc lai
Vi du: Mot so tinh huong chon cau true luu tru lang phi
- Sir dung bien int de luu tru mot gia trj cho biet thang hien hanh Trong tinh huong nay ta chi can sir dung bien kieu byte la du.
- Be luu tru danh sach hoc vien trong mot lap, su dung mang 60 phan tir (giai han so hgc vien trong lap toi da la 80) Neu so lugng hpc vien that
su it han 60, thi gay lang phi bo nha Han nua, so hgc vien co the thay doi theo timg ky, timg nam Trong truang hop nay ta can co mot cau true
du lieu linh dong han mang, chang han danh sach moc noi
May tinh thuc su chi co the luu tru du lieu a dang nhi phan tho so NeU
muon phan anh dugc du lieu thuc te von rat da dang va phong phu, can phai
13
Trang 16xay dung nhung phep anh xa, nhung quy tac to chuc plu'rc tap che len tang
du lieu tho, nham dua ra nhung khai niem logic ve hinh thuc luu tru khac
nhau thucrng dugc goi la kieu die lieu Nhu da phan tich a phan dau, giua
hinh thuc luu tru va cac thao tac xir ly tren do co quan he mat thiet vdi nhau Tir do co the dua ra mot dinh nghia cho kieu du lieu nhu sau
1.3.1 Djnh nghTa kieu dll' lieu
Kieu du lieu T dugc xac djnh bai bo <V, 0> , vai :
- V: tap cac gia trj hop le ma doi tugng kieu T co the luu tru
- O: tap cac thao tac xir ly co the thi hanh tren doi tugng kieu T
Vi du:
- Kieu du lieu Ky tu alphabet = <VC, Oc> vai
Vc = {a -> z, A -> Z}
Oc = {Lay ma ASCII cua ky tu, bien doi ky tu thudng thanh ky tu hoa, }
- Kieu du lieu So nguyen = <Vj, Oj>
V, = {-32768 -> 32767}
Oj = {+, *, /, %, cac phep so sanh, .}
Nhu vay, muon su dung mot kieu du lieu can nam vung ca noi dung du lieu dugc phep luu tru va cac xu ly tac dong tren do
1.3.2 Cac thuoc tinh cua mot kieu du' lieu
Mot kieu du lieu bao gom cac thuoc tinh sau :
- Ten kieu dO lieu
- Mien gia trj
- Kich thude luu tru
- Tap cac toan tu tac dong len kieu du lieu
1.3.3 Cac kieu du' lieu cd ban
Thong thudng trong mot he kieu cua ngon ngu lap trinh se co mot so kieu du
lieu dugc goi la kieu die lieu dan hay kieu du lieu nguyen tic (atomic).
Thong thudng, cac kieu du lieu ca ban bao gom:
- Kieu co thu tu rdi rac: so nguyen, ky tu, liet ke
- Kieu khong rdi rac: so thuc
14
Trang 17Tuy timg ngon ngu lap trinh, cac kieu dir lieu dinh nghTa san nay co the khac nhau Chang han, vdi ngon ngir C/C++, cac kieu dir lieu nay chi gom so nguyen, so thuc, ky tu Va theo quan diem cua C/C++, kieu ky tu thirc chat cung la kieu so nguyen ve mat luu tru, chi khac ve each sir dung.
Bailg 1.3 He kieu ciia C/C++
Ten kieu Pham vi Kich thuoc Giai thich
(dau cham dong)
L.3.4 Cac kieu du" lieu co cau true
Khi giai quyet cac bai toan phirc tap, neu ta chi sir dung cac du ca sd la khdng du, do do phai can den cac kieu du lieu co cau true Chang han thong tin cua mot sinh vien bao gom: ma sinh vien (so nguyen), ho ten sinh vien (chuoi), nam sinh (sd nguyen), que quan (chuoi) Trong trudng hap nay ta khdng thd dung kieu du lieu ca ban dugc ma phai ket hop chung lai vdi nhau
de tao nen kieu du lieu cd cau true Mot cau true dir lieu bao gom mot tap
hop cac die lieu nguyen tic, cac thanh phan nay ket hop vdi nhau theo mot
phuang thuc dugc quy dinh bdi ngon ngu lap trinh Da sd cac ngon ngu lap
trinh ddu cai dat san mot sd kieu cd cau true ca ban nhu mang, chuoi, tap tin,
cdu true va cung cdp ca che cho ngudi lap trinh tu dinh nghTa kieu du lieu mdi
f.3.4.1 M ang m ot chieu
Trong C/C++ va trong nhieu ngon ngu thong dung khac cd mot each dan gian nhat de tao va moc noi cac ddi tugng trong mot tap hop, do la each sap xep cac doi tugng do thanh mot day Be luu tru day ddi tugng trong may tinh ngudi ta sir dung mang mot chieu Khi do ta cd mot cau true du lieu dugc goi la mang Nhu vay, cd the noi mot mang la mot cau true du lieu
15
Trang 18gom mot day xac dinh cac du lieu thanh phan cung mot kieu (mang so nguyen, mang so thuc, mang cac cau true , ).
Trong C/C++ viec khai bao mot mang kha dem gian, can chi ra kieu du lieu cua phan tu, ten mang, kich thuac mang, mau nhu sau:
<Kieu phan tu-> <ten mang> <[kich thiruc^;
Vi du: i n t a [ 10 ] ; //khai bao mang a chua 10 so nguyen.
I.3.4.2 Chudi
Trong C/C++, chuoi thuc chat la mot mang cac ky tu, tuy nhien co khac la trong chuoi co chua ky tu ket thuc ky hieu la ‘\0’ Viec nhap va hien thi chuoi cung don gian han mang, ta co the su dung cac ham nhap xuat chuan trong thu vien “stdio.h” nhu s c a n f ( ), gets(), c out«), puts (), C/C++ cung dinh nghTa mot so ham xu ly chuoi (thu vien string.h) nhu:
strstr ()
1.3.4.3 Mang nhieu chieu
Mang nhieu chieu dugc sir dung nhieu nhat la mang 2 chieu, co the hinh dung mang 2 chieu giong nhu mot bang gom cac dong va cac cot, chang han, bang ghi nhiet do trung binh trong 5 nam a nam thanh pho
Bang 1.4 Du- lifu tlioi tiet cic thanh pho
Cau true khai bao cua mang nhieu chieu dugc viet nhu sau:
<Kieu phan tu> <ten mang ><[kich thuac chieu 1 ], ,[kich thuac chieu n]>;Sau ten mang, moi cap ngoac vuong [ ] dugc tinh la mot chieu Chu so ghi trong c3p ngoac [ ] la so phan tu cua chieu do
Vi du: f l o a t B[5] [5] ; //mang 2 chieu B, kich thude 5x5 chua cac so
thuc
16
Trang 19Cau true la tap hop cac mau du lieu khac nhau cua mot doi tugng (cac mau
du lieu co the co kieu khac nhau) Cac mau dir lieu do dugc goi la thanh phan du lieu cua cau true Cac cau true co the dugc sir dung de tao nen cac kieu du lieu khac, chang han nhu mang cau true
Gia su Ti, T2, .,Tn la cac kieu da cho, va F1, F2, , Fn la cac ten thanh phan Khi do ta co the thanh lap kieu cau true vai n thanh phan du lieu, thanh phan thu i co ten la Fj va co kieu Ti vai i = 1,2, , n
Trong khai bao nay si, s2 la cac bien cau true, d la mot mang cau true gom
20 phan tir bat dau tir d[0] den d[ 19],
De truy nhap vao mot thanh phan du lieu cua mot cau true ta thuc hien theo
Trang 20C) day, p i , p2 la hai bien cau true liru tru mot phan so, con ps la mang luu tru mot day nhieu nhat la 100 phan so, ps dugc goi la mang cau true.
1.3.4.5 Kieu con tro
Mot phuang phap quan trong nua de kien tao cac cau true du lieu, do la sir dung con tro
Con tro la bien dugc su dung de luu dia chi cua mot bien khac
Con tro dugc khai bao theo mau: <kieu dir lieu> *<ten con tro> ;
V r d u r i n t *p, x = 30, y ;
p = &x; // p chua dia chi cua bien x, hay p tro vao x
y = *p; IITruy xuat den vung nha ma con tro p dang tro den (y = 5)
P
Hinh /./ Bieu dien con tro
Sau nay con tro dugc dung de tao ra kieu danh sach moc noi, hoac cay la cac cau true du lieu rat quan trgng, ta se tim hieu ky han each sir dung con tro trong chuang 3
1.3.4.6 Kieu file (tep tin)
Khac vai cac kieu du lieu truac day, so nguyen, so thuc, mang, chuoi du lieu dugc luu a bo nha trong Vi the, khi chuang trinh ket thuc, du lieu cung
bi xoa De khac phuc truang hgp nay, du lieu can dugc luu a bo nha ngoai,
do la cac tep tin
- Theo each luu tru nay, khi thao tac can mot ten tep tin (gom ca duong dan), mot con tro tep (FILE * ten_con_tro)
- Khi thao tac vai tep tin cung can cac ham xir ly, ban doc co the tim hieu trong cuon sach “Ngon ngu lap trinh C”, tac gia Quach Tuan Ngpc, Nha xuat ban Thong ke
x
30
18
Trang 21Nhu da noi a tren, vai moi kieu dir lieu ta chi co the thuc hien mot so phep
toan nhat dinh tren cac du lieu cua kieu Ta khong the ap dung mot so phep toan tren cac dir lieu thuoc kieu nay cho cac dir lieu thuoc kieu khac Cac phep toan rat quan trong, no la cong cu de thao tac du lieu Ta co the chia tap hap cac phep toan tren cac kieu dir lieu cua C/C++ thanh hai lap sau:
1.3.5.1 Cac phep toan truy cap
Phep toan nay dung de truy cap den cac thanh phan cua mot doi tugng dur lieu, chang han truy nhap den cac phan tir cua mot mang, den cac thanh phan du lieu cua cau true
1.3.5.2 Cac phep toan ket hop dir lieu
Ngon ngu lap trinh C/C++ co mot tap hgp phong phu cac phep toan ket hgp mot hoac nhieu du lieu da cho thanh du lieu mai Sau day la mot so nhom cac phep toan chinh
phep toan + , - , * , /, %, tren tap so nguyen
the thuc hien cac phep toan so sanh = = (bang), != (khac), < (nho han), > (Ian han) <= (nho han hogc bang) >= (Ion han ho?c bang) Can chu y rang, ket qua cua cac phep toan nay la mot gia tri logic (true/false)
• Cac phep todn logic: Do la cac phep toan &&, ||, !, dugc thuc hien tren
hai gia tri false va true Trong C/C++ khong co kieu logic, ma false la gia
tri bang khong, va true la gia tri khac khong
1.4 GIAI THUAT - PHAN TICH VA DANH GIA GIAI THUAT 1.4.1 Giai thuat
Giai thuat (algorithm) la mot trong nhung khai niem quan trong nhat trong tin hgc Giai thuat chi ra mot quy trinh de thuc hien mot cong viec Mot
1.3.5 Cac phep toan trong he kieu C/C+ +
19
Trang 22trong nhung giai thuat noi tieng nhat, co tir thdi co Hy Lap la giai thuat Euclid, tim udc so chung Ion nhat cua hai so nguyen Co the mo ta giai thuat nay nhu sau:
Gidi tliuat Euclid
Vao: m, n nguyen duong
Ra: d, udc chung Ion nhat cua m va n.
Phuang phdp
- Budc 1: Tim r, phan du cua phep chia m cho n
- Budc 2: N$u r = 0, thi d <- n (gan gia tri cua n cho d) va dung lai
Ngugc lai, thi m <— n, n <— r va quay lai buac 1
1.4.1.1 Khai niem
Giai thuat la mot day huu han cac buac, moi buac mo ta chinh xac cac phep toan hoac hanh dong can thuc hien de giai quyet van de dat ra
1.4.1.2 Dac trung cua giai thuat
Be hieu day du y nghTa cua giai thuat, chung ta neu ra 5 dac trung cua no:
i) Bo die lieu vao: Moi giai thuat can co mot so luong du lieu vao Do la
cac gia tri can dua vao khi giai thuat bat dau lam viec Cac du lieu nay can dugc lay tu cac tap hgp gia trj cu the nao do Chang han, trong giai thuat Euclid tren, m va n la cac du lieu vao lay tu tap cac so nguyen duang
ii) Dir lieu ra: Moi giai thuat can co mot hoac nhieu du lieu ra Do la cac
gia trj co quan he hoan toan xac djnh vdi cac du lieu vao va la ket qua cua s\r thgc hi$n giai thuat Trong giai thuat Euclid co mpt du lieu ra do
la d, khi thuc hien den budc 2 va phai dung lai (trudng hgp r = 0), gia trj cua d la udc chung ldn nhat cua m va n
Hi) Tinh xdc dinh: Moi budc cua giai thuat can phai dugc mo ta mot cac
chinh xac, chi cd mot each hieu duy nhat Day la mot doi hoi rat quan trgng Bdi vi, neu mot budc cd the hieu theo nhieu each khac nhau, thi cung mot du lieu vao, nhung ngudi thuc hien giai thuat khac nhau cd the dan den cac ket qua khac nhau Be dam bao dugc tinh xac djnh giai thuat can phai dugc mo ta trong cac ngon ngu lap trinh Trong cac ngon ngu nay, cac menh de dugc tao thanh theo quy tac cu phap nghiem ngat
va chi cd mot y nghTa duy nhat
20
Trang 23iv) Tinh kha thi: Tat ca cac phep toan co mat trong cac buac cua giai thuat
phai du dcm gian Dieu nay co nghia la, ngudi lap trinh co the thuc hien chi bang giay trang va but trong khoang thdi gian huu han Chang han, vai giai thuat Euclid, ta chi can thuc hien cac phep chia so nguyen, cac phep gan va phep so sanh de biet dugc r = 0 hay r * 0
v) Tinh dimg: Vai moi bo du lieu vao thoa man cac dieu kien cua du lieu
vao, giai thuat phai dung lai sau mot so huu han cac buac thuc hien Chang han, giai thuat Euclid thoa man dieu kien nay Bai vi, khi thuc hien buac 1 thi gia tri cua r nho han n, neu r * 0 thi gia tri cua n a buac
2 la gia tri cua r a buac trudc, ta co n > r = m> ri = n2 > r2 Day so nguyen duang giam dan can phai ket thuc d 0, do do sau mot so buac nao do gia tri cua r phai bang 0, giai thuat dung
4.2 Bieu dien giai thuat
Co nhieu phuang phap bieu dien giai thuat Co the bieu dien giai thuat bang danh sach cac budc, cac budc dugc dien dat bang ngon ngu tu nhien va cac
ky hieu toan hgc Cd the bieu dien bang so do khoi Tuy nhien, nhu da trinh bay, de dam bao tinh xac dinh cua giai thuat thi nen bieu dien no bang ngon ngu lap trinh
4.3 Phan tich giai thuat
Gia sir ddi vdi mot bai toan nao do chung ta cd mot so giai thuat giai Mot cau hoi dat ra la, chung ta can chon giai thuat nao trong sd giai thuat da cd
de giai bai toan mot each hieu qua nhat Sau day ta phan tich giai thuat va danh gia do phirc tap tinh toan cua no
.4.3.1 Tinh hieu qua cua giai thuat
Khi giai quyet mot van de, chung ta can chon trong sd cac giai thuat, mot giai thuat ma chung ta cho la tot nhat Vay ta can lua chpn giai thuat dua tren ca sd nao? Thong thudng ta dua tren hai tieu chuan sau day:
1 Giai thuat dan gian, de hieu, de cai dat (de viet chuang trinh)
2 Giai thuat sir dung tiet kiem nhat nguon tai nguyen cua may tinh va dac biet, chay nhanh nhat co the dugc
21
Trang 24Khi ta viet mot chucmg trinh chi de sir dung mot so it lan va chi phi cho thai gian viet chucmg trinh vugt xa chi phi cho viec chay chucmg trinh thi tieu chuan (1) la quan trong nhat Nhung co truang hop ta can viet cac chuang trinh d£ sir dung nhieu lan, cho nhieu nguai sir dung, khi do gia cua thai gian chay chuang trinh se vugt xa gia viet no Chang han, cac ham sap xep, tim kiem dugc sir dung rat nhieu lan, bai rat nhieu nguai trong cac bai toan khac nhau Trong truang hgp nay ta can dua tren tieu chuan (2) Ta se cai dat giai thuat co the rat phuc tap, mien la chuang trinh nhan dugc chay nhanh han cac giai thuat khac.
Tieu chuan (2) dugc xem la tinh hieu qua cua giai thuat Tinh hieu qua cua giai thuat bao gom hai nhan to ca ban:
- Dung lugng nha can thiet de luu giu cac dft lieu vao, cac ket qua tinh toan trung gian va cac ket qua cua giai thuat
- Thai gian can thiet de thuc hien giai thuat (ta goi la thai gian chay chuang trinh, thai gian nay khong phu thuoc vao cac yeu to vat ly cua may tinh nhu toe do xu ly cua may tinh, ngon ngft viet chuang trinh, )
Chung ta se chi quan tarn den thai gian thuc hien giai thuat Vi vay khi noi den danh gia do phuc tap cua giai thuat, co nghTa la ta noi den danh gia thai gian thuc hien Mot giai thuat co hieu qua dugc xem la giai thuat co thai gian chay it han cac giai thuat khac
1.4.3.2 Danh gia thdi gian thuc hien cua giai thuat
Co hai each tiep can de danh gia thai gian thuc hien cua mgt giai thuat
a Phuong phap thu- nghiem
Chuang trinh dugc viet va cho chay vai cac dft lieu vao khac nhau tren mgt may tinh nao do Thai gian chay chuang trinh phu thuoc vao cac yeu to sau day:
1 Cac dft ligu vao
2 Chuang trinh dich, de chuyen chuang trinh ma nguon thanh chuang trinh
ma may
3 Toe do thuc hien cac phep toan cua may tinh dugc su dung de chay chuang trinh
22
Trang 25Vi thai gian chay chuang trinh phu thuoc vao nhieu yeu to, nen ta khong the bieu dien chinh xac thai gian chay la bao nhieu dcm vj thdi gian chuan, chang han no la bao nhieu giay.
b Phuong phap !y thuyet
Ta coi thdi gian thuc hien cua giai thuat nhu la mot ham so cua kich thudc
du lieu vao Kich thudc cua du lieu vao la mot tham so dac trung cho du lieu vao, no co anh hudng quyet djnh den thdi gian thuc hien chuang trinh Dan vi tinh kich thudc cua du lieu vao phu thuoc vao cac giai thuat cu the Chang han, ddi vdi cac giai thuat sap xep mang, thi kich thudc cua du lieu vao la so thanh phan cua mang, doi vdi giai thuat giai he n phuang trinh tuyen tinh vdi n an, ta chon n la kich thudc Thong thudng du lieu vao la mot sd nguyen duang n Ta su dung ham sd T(n), trong do n la kich thudc dir lieu vao, de bieu dien thdi gian thuc hien cua mot giai thuat
Ta co the xac dinh thdi gian thuc hien T(n) la sd phep toan so cap can phai tien hanh khi thuc hien giai thuat Cac phep toan so cap la cac phep toan ma thdi gian thuc hien bi chan tren bdi mot hang sd chi phu thuoc vao each cai dat dugc sir dung Chang han cac phep toan sd hoc +, *, /, cac phep toan
so sanh =, != la cac phep toan so cap
.4.3.3 Danh gia do phuc tap tinh toan cua giai thuat
Khi danh gia thdi gian thuc hien bang phuong phap toan hoc, chung ta bo qua yeu to phu thuoc vao each cai dat, chi tap trung vao xac dinh do ldn cua thdi gian thuc hien T(n) Ky hieu toan hoc O (doc la o ldn) dugc sir dung de
mb ta do ldn cua ham T(n)
Gia sir n la sd nguyen khdng am, T(n) va f(n) la cac ham thyre khdng am Ta viet T(n) = 0(f(n)) (doc : T(n) la o ldn cua f(n)), neu va chi neu ton tai cac hang sd duong c va n0 sao cho T(n) < c.f(n), vdi V n > n0
Neu mot giai thuat co thdi gian thuc hien T(n) = 0(f(n)), chung ta se noi rang giai thuat co thdi gian thuc hien cap f(n)
Vi du 1.2: Gia sir T(n) = 10n2 + 4n + 4
Ta cd: T(n) < 10n2 + 4n“ + 4n“ = 12 n2 , vdi Vn > 1 Chon c = 12 va no = 1, khi do T(n) = 0 (n 2) Trong trudng hgp nay ta noi giai thuat cd do phuc tap (cd thdi gian thuc hien) cap n2
23
Trang 26Bang sau day cho ta cac cap thdi gian thuc hien giai thuat dugc sir dung rong rai nhat va ten goi thong thudng cua chung.
Bang 1.5 Ky hifu do phuc tap va ten goi
Ky hieu 6 Ion (O) Ten goi thong thudng
Bang 1.6 Thfri gian thyc hien cua htlm da thuc vit ham mu
n = 10 n = 20 s: II rn n = 40 n = 50 n = 60
n 0.0001 giay 0.0002 giay 0.0003 giay 0.0004 giay 0.0005 giay 0.0006 giay
I.4.3.4 Xac dinh do phuc tap tinh toan
Xac dinh do phuc tap ti'nh toan cua mot giai thuat bat ky co the dan den nhung bai toan phuc tap Tuy nhien, trong thuc te, doi vdi mot so giai thuat
ta cung co the phan tich dugc bang mot so quy tac don gian
a Quy tac tong
Gia su Tl(n) va T2(n) la thdi gian thuc hien cua hai giai doan chuang trinh
Pi va P2 ma T|(n) = 0(f(n); T2O1) = 0(g(n)) thi thdi gian thuc hien doan P| rdi P2 tiep theo se la T;(n) + T2(n) = 0(max(f(n),g(n)))
24
Trang 27Vi du 1.3: Trong mot chuang trinh co 3 buac thuc hien ma thdi gian thuc
hien tung buac lan luot la 0 (n 2), 0 (n 3) va 0(nlog2n) thi thdi gian thuc hien
2 budc diu la 0(max (n2, n3)) = 0 (n 3) Khi do thdi gian thuc hien chuang trinh se la 0 (max(n3,nlog2n)) = 0 (n 3)
b Quy tac nhan
Neu tuang ung vdi PI va P2 la Tl(n) = 0(f(n)), T2(n) = 0(g(n)) thi thdi gian thuc hien PI va P2 long nhau se la : Tl(n).T2(n) = 0(f(n).g(n))
Be danh gia thdi gian thuc hien giai thuat, ta can biet each danh gia thdi gian thuc hien cac cau lenh cua ngon ngu C Cac cau lenh trong ngon ngu C dugc dinh nghTa de quy nhu sau:
1 Cac phep gan, doc, viet, goto la cac cau lenh Cac lenh nay goi la lenh dan.
2 Neu Si, S2, , Sn la cac cau lenh dan thi
{Si, S2, , Sn}
dugc goi la mot lenh hgp thanh (hoac mot khoi lenh)
3 Neu S| va S2 la cac cau lenh va E la bieu thuc logic thi
if (E) Si; else S2 va if (E) S|
la cau lenh va dugc goi la lenh i f - lenh re nhdnh dieu kien.
4 Neu Si, S2, , Sn+i la cac cau lenh, E la bieu thuc co kieu thu tu dem dugc, va vi, v2, , v„ la cac gia tri cung kieu vdi E thi:
la cau lenh va dugc goi la lenh switch - lenh re nhdnh lua chon.
5 Neu S la cau lenh va E la bieu thuc logic thi
while (E) S;
la cau lenh va dugc goi la lenh while - vong lap.
25
Trang 286 Neu Sj, S2, , Sn la cac cau lenh, E la bieu thurc logic thi
do {Si, S2, , Sn} while (E) ;
la cau lenh va dugc goi la lenh do while — vong lap,
7 Vdi S la cau lenh, E| va E2 la cac bieu thuc co cung mot kieu thir tu demdirge, thi
for (i = Ei; i<— E 2; i++) S;
va
for (i = E2; i>= Ei; i — ) S;
Lenh nay dugc goi la lenh for - vdng lap.
Gia sir rang, cac lenh gan khdng chua cac ldi goi ham Khi do de danh gia thdi gian thuc hien mot chucmg trinh, ta co the ap dung phuong phap de quy sau:
1 Thdi gian thuc hien cac lenh don: gan, doc, viet la 0(1)
2 Lenh hop thanh: thdi gian thuc hien lenh hop thanh dugc xac djnh bdi luat tong
3 Lenh if: Gia sir thdi gian thuc hien cac lenh Si, S2 la 0(f(n)) va 0(g(n)) tuong ung Khi do thdi gian thuc hien lenh i f la 0(max (f(n), g(n)))
4 Lenh switch: Lenh nay dugc danh gia nhu lenh if
5 Lenh while: Gia sir thdi gian thuc hien lenh S (than ciia while) la 0(f(n)) va g(n) la so toi da cac lan thuc hien lenh S, khi do thdi gian thuc hien lenh while la 0(f(n).g(n))
6 Lenh do while: Gia sir thdi gian thuc hien khoi {S|, S2, .,Sn} la 0(f(n)) va g(n) la sd lan lap toi da Khi do thdi gian thuc hien lenh
Trang 29Trong ham nay, ki'ch thuac cua du lieu vao la n, gia sir thai gian thuc hien ham la T(n).
- Vai n = 1, chi can thuc hien lenh gan fact = 1, do do T (l) = 0(1)
- Vai n > 1, can thuc hien lenh gan fact = n * fact(n - 1) Do do thai gian T(n) la 0(1) (de thuc hien phep nhan va phep gan) cong vai T(n -1) (de thuc hien lai goi de quy fact(n - 1))
Tom lai, ta co quan he de quy sau:
do thai gian thuc hien cac lai goi de quy dugc danh gia thong qua cac buac sau:
27
Trang 30- Danh gia thai gian thuc hien T(no), vai no la ca du lieu vao nho nhat co the dugc (trong vi du tren, do la T(l)).
- Danh gia than cua ham theo quy tac 1 -7 (quy tac danh gia thai gian thuc hien cac cau lenh) ta se nhan dugc quan he de quy sau :
T(n) = F(T(mi), T(m2), , T(mk))Trong do mi, m2, , mk < n Giai phuang trinh de quy nay, ta se nhan dugc
su danh gia cua T(n)
1.4.4 Phan tich mot so giai thuat
Vi du 1.4: Phan tich giai thuat Euclid
int Euclid (int m, int n)
Thai gian thuc hien giai thuat phu thudc vao so nho nhat trong hai so m va
n Gia sir m > n > 0, khi do ca cua dir lifu vao la n Cac lenh (1) va (6) co thai gian thuc hien la 0(1) vi chung la cac cau lenh gan Do do thai gian thuc hien giai thuat la thdi gian thuc hien lenh while, ta danh gia thdi gian thuc hien cau lenh (2) Than cua lenh nay, la khoi gom ba lenh (3), (4) va (5) Moi lenh co thdi gian thuc hien la 0(1) Do do khdi co thdi gian thuc hien la 0(1) Ta con phai danh gia sd ldn nhat cac lan thuc hien lap khdi
T a c o : m = n.qi + n , 0 < ri < n
n = r :.q2 + r2 , 0 < r2 < ri Neu ri < n/2 thi r2 < n < n/2, do do r2 < n/2
28
Trang 31Neu ri > n/2 thi q2 = 1, tire la n = ri + r 2 , do do T 2 < n/2.
Tom lai, ta luon co T 2 < n/2
Nhu vay cir hai ldn thuc hien khoi lenh thi phan du r giam di con mot nua cua n Goi k la so nguyen lan nhat sao cho 2k < n Suy ra so lan lap toi da la 2k + 1 < 21og2n + 1 Do do thai gian thuc hien lenh while la 0(log2n) Do cung la thdi gian thuc hien cua giai thuat
Vi du 1.5: Giai thuat tinh gia trj cua ex tinh theo cong thuc gan dung
e* = 1 + x/1! + x2/2! + +x"/ n!, vdi x va n cho trude
Phirang an 1: Tinh tung phan tir sau do cong don lai
float Expl (int n, float x)
Vdi i = 1 thi cau lenh (5) dupe thuc hien 1 lan
Vdi i = 2 thi cau lenh nay dupe thuc hien 2 lan
Vdi i = n thi cau lenh nay dupe thuc hien n lan
29
Trang 32Suy ra tong so lan thirc hien cau lenh (5) la
float Exp2 (int n, float x)
Nhu vay, tu hai giai thuat tren ta cd the noi rang giai thuat thu hai tot han giai thuat thu nhat vdi n du ldn (vdi n nho thi thdi gian thuc hien hai giai thuat nay tuang duang nhau)
Vi du 1.6: Tim trong day so si, S2, , s„ mot phan tu co gia tri bang x cho trudc
Vao: Day si, S2, , s„ va khoa can tim x
Ra: Vi tri phan tu co khoa x hoac la n + 1 neu khdng tim thay.
30
Trang 33int linear_Search( int a[], int n, int x)
1 lan Do do thdi gian tinh tot nhat cua giai thuat la 0(1)
Neu x khong xuat hien trong day khoa da cho, thi cau lenh i = i + 1 dugc thuc hien n lan Vi the thdi gian tinh toi nhat la 0(n)
Cuoi cung ta tinh thdi gian tinh trung binh cua giai thuat Neu x dugc tim thay d vj tri thu i cua day thi cau lenh i = i + 1 phai thuc hien i lan(i = 0, 2 n-1), con neu x khong xuat hien trong day thi cau lenh i = i + 1phai thuc hien n lan
Tir do suy ra so lan trung binh phai thuc hien cau lenh i = i + 1 la
Trang 34Nhgn xet:
Viec xac djnh T(n) trong truang hap trung binh thuang gap nhieu kho khan
vi se phai dung tai cong cu toan dac biet, han nua ti'nh trung binh co nhieu each quan niem Trong cac truang hop ma T(n) trung binh thuang kho xac dinh nguai ta thuang danh gia giai thuat qua gia tri xau nhat cua T(n) Han nua, trong mot so lop giai thuat, viec xac dinh truang hap xau nhat la rat quan trong
KET LUAN CHUNG
Nhu vay qua chuang nay chung ta vira tim hieu mot so khai niem: giai thuat, cau true du lieu va moi quan he mat thiet giira chung Noi tai CTDL khong the khong de cap den giai thuat va ngugc lai Moi quan he nay dugc the hien bang cong thuc:
Chinrng trinh = Cau true dir lieu + giai thuat
Ta dua ra khai niem chu O lan de danh gia do phuc tap cua thuat toan Can
cu tren danh gia nay de co the lua chon giai thuat phu hgp cho bai toan Trong chuang nay ta thay rang giai doan thiet ke hoac lua chgn cac cau true
du lieu va cac giai thuat khi phat trien du an phan mem la het sue quan trpng, no quyet dinh mot phan su thanh bai cua mot du an tin hgc Chat lugng cua du an cung phu thugc vao viec danh gia cac cau true du lieu va cac giai thuat khi chung dugc thiet ke va lua chgn
BAI TAP CHU'O'NG 1
Bai 1 Neu khai niem thuat toan, cac dac trung va cac phuang phap bieu dien
thu&t loan Cho vf dp minh hoa
Bai 2 Tim them cac vi du minh hoa moi quan he giua cau true du lieu va giai
thuat
Bai 3 Phan biet cau true luu tru va cau true du lieu Cho vi du minh hga.
Bai 4 Neu nguyen tac phan tich top-down Cho vi du minh hga.
Bai 5 Chung minh rang neu T(n) = O(n) thi T(n) = 0(n2).
Bai 6 Chung minh rang lg n! = O(nlgn).
Bai 7 Cho f(x) = anxn + an-ixn'' + + aix + ao (a„ * 0) Chung minh rang f(x) =
0 (x n)
32
Trang 35Bai ? Cho cac doan chuang trinh dudi day Hay xac dinh thcxi gian thuc hien cua
giai thuat bang ky phap chu O Ion
Trang 36Chuong 2
DE QUY VA GIAI THUAT DE QUY
2.1 KHAI NIEM VE DE QUY
Ta noi mot doi tirong la de quy neu no bao gom chinh no nhu mot bo phan hoac no dugc djnh nghTa dudri dang cua chinh no
Vi du 2.1: Trong toan hoc ta gap cac dinh nghTa de quy sau:
So ly nhien:
- 1 la so tu nhien
- n la so tu nhien neu n-1 la so tu nhien
Ham n giai thira: n!
- 0! = 1
- Neu n > 0 thi n! = n(n-l)!
2.2 GIAI THUAT DE QUY VA HAM OE QUY
2.2.1 Giai thuat de quy
Neu ldi giai cua mot bai toan T dugc giai bang lai giai cua mot bai toan T|,
co dang giong nhu T, thi lai giai do dugc ggi la lai giai de quy Giai thuat tuang ung vai lai giai de quy goi la giai thuat de quy
O day Ti co dang giong T nhung theo mot nghTa nao do Ti phai “nho” han T Chang han vai bai toan tinh n!, thi tinh n! la bai toan T con tinh (n-1)! la bai toan Ti ta thay Ti cung dang vai T nhung nho han (n-1 < n)
Vi du 2.2: Vdi bai toan tim mot tir trong quyen tir dien Co the neu giai
thuat nhu sau:
if (tu dien la mot trang)
tim tii trong trang nay ;
34
Trang 37{ Mo tu dien vao trang "giua"
Xac dinh xem nira nao cua tu dien chua til can tim;
if (tii do nam d nua trudc)
tim tu do 6 nua trudc.
Ta thay cd Ita i diem chin It can lint y:
1 Sau moi lan tir dien dugc tach lam doi thi mot nua thich hgp se tiep tuc dugc tim bang mot chien thuat nhu da dung trudc do (nua nay lai dugc tach doi)
2 Cd mot trudng hgp dac biet, do la sau nhieu lan tach ddi tur dien chi con mot trang Khi do viec tach doi ngirng lai va bai toan trd thanh du nho de
ta cd the tim tir mong muon bang each tim tuan tu Trudng hgp nay goi la
truang hap suy bien.
2.2 Ham de quy
Vi du 2.3: Vdi giai thuat tim tir trong tir dien d tren ta viet mot ham tuang
ung nhu sau:
void Search(diet, word) //Tim tu word trong tu dien diet
1
if (Tir dien chi con la mgt trang)
tim tii word trong trang nay;
else
xac dinh xem nua nao cua tu dien chua tu word;
return Search(dict\{nua sau}, word);
Trang 381 Trong ham de quy co lai goi den chinh ham do Cu the trong ham
Search co lai goi ddn chinh no Search (lai goi nay dugc goi la lai goi
de quy)
2 Sau moi lan co lai goi de quy thi kich thuac cua bai toan dugc thu nho hom trudc Cu the khi co lai goi Search thi kich tir dien chi con bang mgt nua so vdi trudc do
3 Cd mot trudng hgp dac biet, trudng hgp suy bien la khi ldi goi Search
vdi tu didn diet chi con la mot trang Khi trudng hgp nay xay ra thi bai toan con lai se dugc giai quyet theo mot each khac han (tim tu word trong trang do bang each tim kiem tuan tu) va viec goi de quy cung ket thuc Chinh tinh trang kich thudc bai toan giam dan sau moi lan goi de quy, dan tdi trudng hgp suy bien
Neu ham de quy chua ldi goi den chinh no thi ggi la de quy true tiep Cung
co trudng hgp ham chua ldi goi den ham khac ma d ham nay lai chua ldi ggi den no Trudng hgp nay ggi la de quy gian tiep
2.3 THIET KE GIAI THUAT DE QUY
Khi bai toan dang xet hoac du lieu dang xir ly dugc djnh nghTa dudi dang de quy thi viec thiet ke cac giai thuat de quy to ra rat thuan lgi Hau nhu no phan anh rat sat noi dung cua dinh nghTa do
Khong co giai thuat de quy van nang cho tat ca cac bai toan de quy, nghTa la moi bai toan can thiet ke mot giai thuat de quy rieng
Ta xet mot so bai toan sau:
2.3.1 Ham n!
Ham nay dugc dinh nghTa nhu sau:
Factorial(n) = 1 nd'u n= 0
n*F actorial(n-l) neu n> 0Giai thuat de quy dugc viet dudi dang ham dudi day:
int Factorial (int n)
Trang 39Trong ham tren truang hap suy bien dugc thuc hien trong menh de i f , con phan de quy tire la phan goi den chinh no nam a menh de e ls e Moi lan goi de quy den Factorial, thi gia tri cua n giam di 1 Vi du, Factorial(4) goi den Factorial(3), goi den Factorial(2), goi den Factorial(l), goi den Factorial(O) day la trudng hgp suy bien, no dugc tinh theo each dac biet Factorial(O) = 1.
2.3.2 Bai toan day so FIB O N A C C I
Day so Fibonacci bat nguon tir bai toan co ve viec sinh san cua cac cap tho Bai toan dugc dat ra nhu sau:
- Cac con tho khong bao gid chet
- Flai thang sau khi ra ddi mot cap tho mdi se sinh ra mot cap tho con
- Khi da sinh, thi cur sau moi thang chung lai sinh dugc mot cap con mdi.Gia sir bat dau tir mot cap mdi sinh, hoi den thang thu n se cd bao nhieu cap?
Vi du: Vdi n = 6, ta thay.
Thang thir 1: 1 cap (cap ban dau)
Thang thu 2: 1 cap (cap ban dau van chua sinh con)
Thang thu 3: 2 cap (da cd them 1 cap con do cap ban dau sinh ra) Thang thu 4: 3 cap (cap ban dau van sinh them)
Thang thu 5: 5 cap (cap con bat dau sinh)
Thang thu 6: 8 cap (cap con van sinh tiep)
Dat F(n) la so cap tho d thang thu n Ta thay chi nhung cap tho da cd d thang thu n-2 mdi sinh con d thang thu n, do do so cap tho d thang thir n la: F(n) = F(n-2) + F(n-l) vi vay F(n) cd the dugc tinh nhu sau:
[F(n - 2) + F(n -1) neu n > 2Day so the hien F(n) ung vdi cac gia tri cua n = 1, 2, 3, 4 , cd dang:
1 1 2 3 5 8 13 21 34 55 dugc ggi la day
so Fibonacci No la mo hinh cua rat nhieu hien tugng tu nhien va cung dugc sir dung nhieu trong tin hgc
Sau day la giai thuat de quy dang ham the hien viec tinh F(n)
37
Trang 40Nhung khong phai luc nao tinh de quy trong each giai bai toan cung the hien
ro net va don gian nhu vay Ma viec thiet ke mot giai thuat de quy doi hoi phai giai dap dugc cac cau hoi sau:
- Co the djnh nghTa dugc bai toan dudi dang mot bai toan cung loai, nhung nho han nhu the nao?
- Nhu the nao la kich thudc cua bai toan dugc giam di d moi lan ggi de quy?
- Trudng hep dac biet nao cua bai toan dugc ggi la trudng hop suy bien?Sau day ta xet them bai toan phuc tap hon
2.3.3 Bai toan "Thap Ha Noi"
Bai toan nay mang tinh chat la mot tro choi, noi dung nhu sau:
Cd n dTa, kich thudc nho dan, moi dTa cd 16 d giua Cd the xep chong chung len nhau xuyen qua mgt coc, dTa to d dudi, dTa nho d tren de cuoi cung cd mot chong dTa dang hinh thap nhu hinh 2.1
Hinh 2.1 Chong dTa truoc khi chuyen
Chuyen chong dTa tu ege A sang ege khac, chang han ege C, theo dieu kien:
- Moi lan chi dugc chuyen mot dTa
- Khong khi nao cd tinh huong dTa to d tren dTa nho (du la tarn thdi)
38