Giáo trình Cấu trúc dữ liệu và giải thuật - Trường Đại học Hàng Hải

Bài ging môn hc: Cu trúc Dliu và Gii thut  
Chương 1. Thut toán và các khái nim 4  
1.1. Khái nim thut toán (gii thut)  
4
1.2. Cách biu din thut toán  
1.3. Độ phc tp thut toán 7  
4
1.3.1. Các tiêu chí đánh giá thut toán  
1.3.2. Các lp thut toán  
1.4. Cu trúc dliu  
1.5. Các chiến lược thiết kế thut toán. 11  
1.5.1. Chiến lược vét cn (Brute force)  
1.5.2. Chiến lược quay lui (Back tracking)  
16  
1.5.3. Chiến lược chia để tr(Divide and Conquer)  
1.5.4. Chiến lược tham lam (Greedy) 14  
11  
26  
1.5.5. Quy hoch động (Dynamic Programming)  
Chương 2. Tìm kiếm (Searching) 29  
2.1. Bài toán tìm kiếm.  
29  
2.2. Tìm kiếm tun t(SEQUenTIAL search). 29  
2.3. Tìm kiếm nhphân (binary search) 29  
2.4. Mt sví dụ  
Chương 3. Sp xếp. 29  
3.1. Bài toán sp xếp.  
29  
3.2. Các phương pháp sp xếp cơ bn. 29  
3.2.1. Sp xếp chn ( Selection Sort)  
3.2.2. Sp xếp chèn (insertion sort)  
29  
31  
3.2.3. Sp xếp nhphân (binary insertion sort) 31  
3.2.4. Sp xếp ni bt (Bubble Sort) 33  
3.3. Các thut toán nâng cao 35  
Bmôn KHMT – Khoa CNTT – ĐHHH Vit Nam  
1
Bài ging môn hc: Cu trúc Dliu và Gii thut  
3.3.1. Quick_Sort 35  
3.3.2. Sp xếp bng trn (Merge Sort) 41  
3.3.2.1. Thut toán trn  
3.3.2.2. Sp xếp trn  
41  
41  
3.3.3. Sp xếp vun đống (heap Sort)  
3.3.3.1. Khái nim Heap. 44  
41  
3.3.3.2. Sp xếp vung đống (Heap Sort) 46  
.3.4. Mt sví dáp dng  
Chương 4. các cu trúc dliu cơ bn 58  
4.1. Khái nim cu trúc dliu 58  
4.2. Kiu dliu mng  
4.3. Ngăn xếp (Stack)  
4.3.1. Định nghĩa  
60  
4.3.2. Cài đặt ngăn xếp bng mng  
4.3.3. Mt số ứng dng ca ngăn xếp  
4.4. Hàng đợi (Queue)  
4.4.1. Định nghĩa  
4.4.2. Cài đặt hàng đợi bng mng  
4.4.3. Mt số ứng dng ca hàng đợi  
4.5. Danh sách liên kết (Linked List)  
4.5.1. Định nghĩa  
4.5.2. Cài đặt danh sách liên kết đơn bng mng  
4.5.3. Cài đặt danh sách liên kết đơn bng con trỏ  
4.5.4. Mt số ứng dng ca danh sách liên kết  
4.5.5. Cài đặt ngăn xếp và hàng đợi sdng danh sách liên kết  
4.5.6. Các loi danh sách liên kết khác  
Bmôn KHMT – Khoa CNTT – ĐHHH Vit Nam  
2
Bài ging môn hc: Cu trúc Dliu và Gii thut  
Chương 5. Cây (Tree)  
5.1. Định nghĩa  
5.2. Cây tìm kiếm nhphân (Binary Search Tree)  
5.2.1. Cây nhphân  
5.2.2. Các thao tác trên cây tìm kiếm nhphân  
5.2.2.1. Các phương pháp duyt cây  
5.2.2.2. Thêm mt nút vào cây  
5.2.2.3. Xóa mt nút khi cây  
5.2.2.4. Tìm kiếm  
5.2.3. Cài đặt cây tìm kiếm nhphân  
5.2.3. ng dng ca cây tìm kiếm nhphân  
5.3. Cây cân bng  
Bmôn KHMT – Khoa CNTT – ĐHHH Vit Nam  
3
Bài ging môn hc: Cu trúc Dliu và Gii thut  
CHƯƠNG 1. THUT TOÁN VÀ CÁC KHÁI NIM  
Khái nim thut toán (gii thut)  
Khái nim không hình thc (trc giác): thut toán là mt dãy hu hn các qui tc  
cho ra kết quca mt bài toán.  
Khái nim hình thc: thut toán được hiu như mt máy Turing.  
Đặc trưng ca thut toán: Thut toán có mt số đặc trưng sau  
+ Tính dng: Gii thut phi kết thúc sau mt shu hn bước.  
+ Tính xác định: mi bước các thao tác phi rõ ràng, không gây nhp nhng,  
ln ln. Nói cách khác, ti mi bước ca thut toán chi có mt kết quduy nht.  
+ Đại lượng vào (Input): Mi gii thut có thcó mt hoc nhiu đại lượng vào  
gi là dliu vào.  
+ Đại lượng ra (Output): Sau khi gii thut được thc hin, tutheo chc năng  
mà gii thut đảm nhim ta có ththu được mt số đại lượng ra xác định gi là  
dliu ra.  
+ Tính hiu qu: Mt bài toán có thcó nhiu gii thut khác nhau. Mt gii  
thut tt phi đơn gin, dhiu, tiết kim bnhvà thi gian.  
+ Tính phdng: Gii thut được xem là phdng nếu nó có thgii bt kì bài  
toán nào trong mt lp các bài toán.  
Nhn xét: Bn tính cht đầu là các tính cht bt buc ca thut toán, hai tính  
cht sau là hai tính cht không bt buc.  
Cách biu din thut toán  
Có nhiu cách để biu din thut toán, sau đây là mt scách chính hay dùng  
trong thc tế.  
+ Lit kê tng bước: Ví dbài toán tìm UCLN ca hai snguyên a, b.  
Bài toán: Cho hai stnhiên a, b. Hãy tìm ước schung ln nht ca chúng.  
Input: Hai stnhiên a, b;  
Output: Ước schung ln nht ca a, b.  
Thut toán:  
Bước 1: Nếu a=b thì USCLN(a, b)=a (hoc =b).  
Bước 2: Nếu a > b thì tìm USCLN ca a-b và b, quay li bước 1;  
Bmôn KHMT – Khoa CNTT – ĐHHH Vit Nam  
4
Bài ging môn hc: Cu trúc Dliu và Gii thut  
Bước 3: Nếu a < b thì tìm USCLN ca a và b-a, quay li bước 1;  
+ Din tbng lưu đồ: Công cgiúp biu din thut toán mt cách trc quan  
gm 4 khi cơ bn.  
1
Begin  
A
3
T
4
B
2
End  
F
Khi 1: Khi Begin, bt đầu thut toán, chcó duy nht mt đường ra;  
Khi 2: Khi End, kết thúc thut toán, có thcó nhiu đường vào;  
Khi 3: Thc hin công vic A (có thlà mt hoc nhiu câu lnh); gm mt  
đường vào và mt đường ra;  
Khi 4: Rnhánh, kim tra biu thc logic B (biu thc Boolean), nếu B đúng  
thut toán sẽ đi theo nhánh T (True), nếu B sai thut toán sẽ đi theo nhánh F  
(False).  
+ Các cu trúc điu khin: Sdng mt schương trình điu khin như tun t,  
rnhánh, lp để biu din. Các cu trúc này có thể được viết dưới dng mt ngôn  
ngbt kì (tnhiên, lp trình).  
Phân tích thut toán.  
Tính hiu quả  
Có hai tiêu chun để la chn:  
+ Thut toán đơn gin, dhiu, dcài đặt.  
Bmôn KHMT – Khoa CNTT – ĐHHH Vit Nam  
5
Bài ging môn hc: Cu trúc Dliu và Gii thut  
+ Thut toán sdng tiết kim nht các ngun tài nguyên máy tính, đặc bit là  
thi gian thc hin bài toán.  
Tuvào tng bài toán cthmà xác định tính cht nào quan trng hơn.  
Tính cht sau được xem là tính hiu quca thut toán. Bao gm hai nhân tcơ  
bn:  
a) Dung lượng không gian nhcn thiết để lưu trcác dliu vào, ra, trung gian.  
b) Thi gian cn thiết để thc hin thut toán ( Thi gian chy )  
Chquan tâm đến thi gian thc hin ca thut toán Thut toán có hiu qulà  
thut toán có thi gian chy ít hơn các thut toán khác.  
Đánh giá thi gian thc hin thut toán  
+ Thi gian chy chương trình phthuc vào các yếu tố  
1) Các dliu vào.  
2) Chương trình dch chuyn mt chương trình sang mã máy  
3) Tc độ thc hin các phép toán ca máy tính được sdng để chy chương  
trình.  
+ Khái nim độ phc tp dliu vào da trên hai quan nim  
. Quan nim 1 : Độ phc tp ca dliu vào là slượng dliu vào ca bài  
toán.  
d: . Bài toán sp xếp mng thì dliu vào có slượng là sthành phn ca  
mng  
. Bài toán tìm sln nht có dliu vào là n+2  
Đây là phương pháp dùng để đánh giá sơ b.  
. Quan nim 2 : Coi dung lượng nhớ để ghi toàn bdliu vào ( Qui ra mt đơn  
vcth: bit ) là độ phc tp dliu  
d: Tìm sln nht ca mng có n phn tx1,x2,…,xn  
Mt snguyên xi cn sbít để cha nó là log2xi+1  
n
log 2xi + n + log 2n + 1  
i=1  
Tng dliu nhcn thiết là  
Thi gian thc hin thut toán không chphthuc vào độ phc tp ca dữ  
liu mà còn phthuc vào dliu cá bit  
Bmôn KHMT – Khoa CNTT – ĐHHH Vit Nam  
6
Bài ging môn hc: Cu trúc Dliu và Gii thut  
dbài toán tìm max vi dliu khác nhau  
Độ phc tp thut toán  
+ Là tiêu chun để đánh giá mt thut toán và quan tâm đến hai khái nim:  
Độ phc tp trong trường hp xu nht: Là chi phí được trnhiu nht có thể  
trong mi bdliu có thvtài nguyên (bnhvà thi gian).  
Độ phc tp trung bình: Là chi phí trung bình phi trtrong mi bdliu có  
th.  
Chi phí trung bình khó xây dng hơn trong trường hp ti nht  
Chquan tâm đến chi phí trong trường hp ti nht  
+Theo quan đim 1 ta có công thc tính toán như sau:  
- VbnhLA(n) = Max lA(e) : || e|| n  
Trong đó: A: Thut toán A  
|| e || Độ phc tp dliu vào  
- Vthi gian TA(n) = Max tA(e) : || e|| n  
+Theo quan đim 2 có 2 mô hình toán  
- Mô hình lý lun: Máy Turing  
- Mô hình ng dng: Các máy tính cththeo nguyên lý Von Newman  
1) Máy Turing đề xut năm 1930 là mt dãy các chth, mnh lnh cho ta kết  
quả  
Cu to máy Turing gm:  
- 1 băng có nhiu ô nh, mi ô có thcha mt kí tự  
- 1 bộ điu khin trng thái  
- 1 đầu đọc viết  
. Ti mt thi đim t trng thái là p, đầu đọc chvào x: (p, x)  
. Thi đim t+1 bộ điu khin chuyn sang trng thái q, đầu đọc ghi hoc đọc dữ  
liu tmt ô  
- Đầu bnhlà mt ô nhớ để cha mt tín hiu cơ sở  
- Chi phí vbnhchính là sô nh(cn sdng) được sdng trong quá trình  
tính toán  
Bmôn KHMT – Khoa CNTT – ĐHHH Vit Nam  
7
Bài ging môn hc: Cu trúc Dliu và Gii thut  
- Đơn vthi gian: Thi gian để chuyn mt bước chuyn hình trng  
- Chi phí vthi gian: Là sbước chuyn hình trng trong mt quá trình tính  
toán.  
2) Máy tính theo nguyên lý Von Newman  
+ Chương trình gm 5 phn . Bnhớ  
. Bnhshc và lôgic  
. Bxlí phép tính shc và lôgic  
. Bộ điu khin để chhuy thc hin chương trình  
. Bvào/ra  
- Đơn vnh: Chui min nhcha dliu  
- Chi phí bnh: Sbiến dùng trong chương trình  
- Đơn vthi gian: Thi gian để thc hin 1 phép tính sơ cp như +, -, *, /, and,  
or, not.  
- Chi phí vthi gian: Sphép tính sơ cp đã làm trong chương trình  
Định lý: Nếu thut toán thc hin trên mô hình lý thuyết có độ phc tp vthi  
gian là đa thc thì thut toán trên mô hình ng dng tương ng cũng có độ phc  
tp đa thc. Chiu ngược li không có (Khi thêm điu kin: Trên mô hình ng  
dng là đa thc, độ phc tp ca dliu vào là đa thc, các phép tính sdng là  
sơ cp (không có lutha) thì xy ra chiu ngược li).  
Nói chung vic đánh giá thut toán chquan tâm đến đánh giá thi gian thc hin  
thut toán.  
Ký hiu O (ô ln) và đánh giá thi gian thc hin thut toán  
- Khi đánh giá thi gian thc hin bng phương pháp toán hc chúng ta sbqua  
nhân tphthuc vào cách cài đặt, chtp trung vào xác định độ ln ca thi  
gian thc hin T(n) – n: kích thước dliu vào  
- Ký hiu O được sdng để mô tả độ ln ca hàm T(n). Gisn là snguyên  
không âm, T(n), f(n) là các hàm thc không âm. Ta viết T(n) = O(f(n)) nếu và  
chnếu tn ti các hng sdương c và n0 sao cho T(n) c*f(n) n n0 nghĩa là  
T(n) bchn trên bi mt hng snhân vi f(n) vi mi giá trn tmt thi đim  
nào đó  
Bmôn KHMT – Khoa CNTT – ĐHHH Vit Nam  
8
Bài ging môn hc: Cu trúc Dliu và Gii thut  
Nếu mt thut toán có thi gian thc hin T(n) = O (f(n)) ta nói rng thut toán  
có thi gian thc hin cp f(n).  
d:  
GisT(n) = 3*n+5*n + 4  
Ta có 3*n+5*n + 43*n+5* n+ 4 n=12 n∝ ∀ n1  
( c = 12, n0 = 1)  
Vy T(n) = 0( n) hay thut toán có thi gian thc hin cp n∝  
- Nhn xét:  
1) Nếu T(n) = θ ( n) và f(n) = 0(f1(n)) thì T(n) =θ(f1(n))  
Chng minh : Vì T(n) = θ (f1(n)) ⇒∃ c0, n0 để T(n) c0*f(n) n n0 và  
f(n) = θ (f1(n)) ⇒∃ c1, n1 để f(n) c1*f1(n) n n1  
T(n) c0*c1*f1(n) n mã(n0 ,n1)  
2) Mi thut toán có thi gian chy là đa thc là mt thut toán tt  
3) Chia các thut toán thành các lp  
- Lp các thut toán có thi gian chy là đa thc. Tc là tn ti 1 đa thc f(n) để  
T(n) c* f(n) n n0 gi là lp P.  
- Lp các thut toán có thi gian chy là hàm mũ, gi là NP  
Bmôn KHMT – Khoa CNTT – ĐHHH Vit Nam  
9
Bài ging môn hc: Cu trúc Dliu và Gii thut  
Thi  
gian  
tăng  
Tên  
θ(n)  
Hng  
θ(1)  
Mt squi tc xác định độ phc tp  
thut toán:  
Logarit  
Tuyến tính  
θ(log2n)  
θ(n)  
- Qui tc tng: GisT1(n) và  
T1(n) là thi gian thc hin ca hai  
đon chương trình P1 và P2 và  
T1(n) = θ(f(n)) ; T2(n) =θ(g(n)). Khi  
đó thi gian thc hin P1 ri đến P2  
θ(n  
nlogn  
log2n)  
là T1(n)+T2(n)  
(f(n),g(n))).  
=
θ
(max  
Bình  
θ(n2)  
θ(n3)  
θ(2n)  
phương  
- Qui tc tích: Gisnhư trên. Khi  
đó thi gian thc hin P1 và P2 lng  
nhau là T1(n)*T2(n) = θ (f(n),g(n)).  
Lp phương  
Mũ(2n,  
nn, n!)  
Ví d:  
Câu lnh gán x:=x+1 có thi gian thc hin là θ(1)  
Câu lnh For i:=1 to n do x:=x+1 có thi gian thc hin là θ(n.1) = θ(n)  
* Chú ý: 1) Khi đánh giá thut toán chcn chú ý ti các phép toán tích cc, đó là  
các phép toán thuc gii thut mà thi gian thc hin nó không ít hơn thi gian  
thc hin các phép khác (có thcó nhiu).  
ví d:  
Tính:  
n
+ x2 +...+ x  
x
x = 1+  
e
1! 2!  
n!  
Vi x, n cho trước .  
1) Read(x); S:=1;  
2) For i:=1 to n do  
Begin  
P:=1  
For j:=1 to i do P:=P*x/j;  
S:=S+p;  
Bmôn KHMT – Khoa CNTT – ĐHHH Vit Nam  
10  
Bài ging môn hc: Cu trúc Dliu và Gii thut  
End;  
- Phép toán tích cc P:=P*x/j;  
Thi gian thc hin là 1 + 2 + .. . + n = n*(n+1)/2  
Thi gian T(n) = θ(n2)  
Cách hai:  
1) Read(x) ; S:=1; P:=1;  
2) For i:=1 to n do  
Begin  
P:=P*x/i;  
S:=S+P;  
End;  
Thi gian T(n) = θ(n) vì phép toán tích cc chthc hin n ln  
2) Có nhng trường hp thi gian thc hin gii thut còn phthuc vào tình  
trng dliu (ngoài phthuc vào kích thước)  
dbài toán sp xếp khi dliu đã được sp xếp và dliu có thtngược li.  
Các chiến lược thiết kế thut toán.  
- Không có chiến lược hay phương pháp vn năng nào có thgiúp thiết kế được  
thut toán gii quyết mi vn đề. Nhưng người ta đã chra mt sphương pháp  
thiết kế cơ bn gi là các chiến lược thiết kế thut toán. Mi phương pháp này có  
tháp dng để gii quyết mt phm vi khá rng các bài toán.  
Chia để tr.  
- Ý tưởng: Chia bài toán cn gii thành các bài toán con. Các bài toán con li  
tiếp tc phân chia thành các bài toán con nhhơn, cthế tiếp tc cho ti khi ta  
nhn được các bài toán con đã có gii thut hoc là có thddàng đưa ra thut  
gii. Sau đó ta tìm cách kết hp các nghim ca các bài toán con để nhn được  
nghim ca bài toán con ln hơn,.. . cnhư vy cui cùng nhn được bài toán  
con cn gii.  
Bmôn KHMT – Khoa CNTT – ĐHHH Vit Nam  
11  
Bài ging môn hc: Cu trúc Dliu và Gii thut  
- Thông thường các bài toán con nhn được trong quá trình phân tích là cùng  
dng vi bài toán ban đầu, chcó cca chúng là nhhơn. Trong các trường  
hp như vy thut toán tìm được có thbiu din tnhiên bi thtc đệ qui.  
Lược đồ phương pháp đệ quy:  
Procedure Divice Conquer (A, x); {Tìm nghim x ca bài toán A}  
Begin  
If A đủ nhThen Solve (A)  
Else  
begin  
- Phân A thành các bài toán con A1, A2, …,Am;  
- For i:=1 to m do Divice Conquer(Ai,,xi);  
xi (i = 1,m)  
- Kết hp các nghim ca các bài toán:  
ca bài toán  
ca Ai để được nghim x  
end  
End;  
Trong đó Solve (A) là thut gii bài toán A trong trường hp A có cchữ đủ nh.  
- ng dng: - Thut toán tìm kiếm nhphân.  
- Thut toán tìm kiếm Quicksort  
- Minh ho:  
+ Phát biu bài toán: Cho mng A[1,n] tìm phn tln nht và nhnht ca  
mng này  
+ ý tưởng: Chia mng A[1..n] thành hai mng con A[1..k] và A[k+1..n] (k=n/2)  
Nếu tìm được MAX và MIN ca các mng con A[1..k] và A[k+1..n] ta ddàng  
xác định được MAX và MIN trên A[1..n]  
Để tìm được MAX và MIN trên các mng con ta tiếp tc chia đôi chúng. Quá  
trình dng li khi ta nhn được các mng con chcó mt hoc hai phn t, khi đó  
MAX và MIN được xác định mt cách ddàng.  
+ Thtc  
Procedure MaxMin(i, j, fmax, fmin);  
Bmôn KHMT – Khoa CNTT – ĐHHH Vit Nam  
12  
Bài ging môn hc: Cu trúc Dliu và Gii thut  
{Tìm Max, min trên mng A[1..n], i, j [1..n], ban đầu gi thtc i = 1, j = n}  
Begin  
If i = j then  
begin  
fmax:=a[i];  
fmin:=a[i];  
end  
else  
if j=i+1 then  
if A[i] < A[j] then  
begin  
fmax:=a[j] ;  
fmin:=a[i];  
end  
else  
begin  
fmax:=a[i] ;  
fmin:=a[j];  
end  
else  
begin  
mid := (i+j) div 2 ;  
MaxMin(i, mid, gmax, gmin);  
MaxMin(mid-1, j, hmax, hmin);  
if gmax < hmax then fmax := hmax  
else fmax := gmax;  
if gmin < hmin then fmin := gmin  
else fmin := hmin;  
Bmôn KHMT – Khoa CNTT – ĐHHH Vit Nam  
13  
Bài ging môn hc: Cu trúc Dliu và Gii thut  
end;  
End;  
Tham ăn:  
Dùng để gii quyết các bài toán ti ưu. Nhiu vn đề cn thiết gii quyết có thể  
qui vvn đề sau:  
Cho trước mt tp A các đối tượng nào đó đòi hi phi chn mt tp con S các  
đối tượng thomãn mt số điu kin nào đó. Bt kì mt tp con S nào đó ca A  
thomãn các yêu cu đã đặt ra được gi là nghim chp nhn được ca bài toán.  
Mt hàm mc tiêu gn mi nghim chp nhn được ca bài toán. Mt hàm mc  
tiêu gn mi nghim chp nhn được vi mt giá trnào đó. Mt nghim chp  
nhn được mà ti đó hàm mc tiêu có giá trln nht (hoc nhnht) được gi là  
nghim ti ưu.  
Ý tưởng: Ta xây dng tp S dn dn tng bước. Khi đầu S rng. Ti mi bước  
ta schn mt phn ttt nht trong các phn tcòn li ca A để đưa vào S.  
Vic la chn 1 phn tnhư thế ti mi bước được hướng dn bi hàm chn.  
Phn tử đưc chn sbloi khi A. Nếu khi thêm phn tử được chn vào S mà  
S vn còn thomãn các điu kin ca bài toán thì ta mrng S bng cách thêm  
vào phn tử đưc chn.  
- Lược đồ:  
Procedure Greedy(A,S);  
{A:Tp ng cviên, S là nghim}  
Begin  
S ← ∅ ;  
While A <> do  
begin  
- x select (A) ;  
- A A – {x};  
- If S {x} chp nhn được then S S {x}  
end;  
End;  
Bmôn KHMT – Khoa CNTT – ĐHHH Vit Nam  
14  
Bài ging môn hc: Cu trúc Dliu và Gii thut  
- Select (A) là hàm chn, cho phép chn ra ttp A mt phn ttt nht, nhiu  
ha hn nht là thành viên ca nghim.  
- ng dng: Thut toán Dijkstra tìm đường đi ngn nht từ đỉnh ngun đến các  
đỉnh còn li trong đồ th, thut toán Prim tìm cây bao trùm trong đồ th.  
- Bài toán minh ho:  
- Phát biu bài toán : G = <X, U> là mt đồ thvô hướng. Hãy tìm cách sơn các  
đỉnh ca đồ thG sao cho 2 đỉnh knhau sơn bi 2 mu khác nhau và smu là  
ít nht.  
- Ý tưởng: Sdng 1 màu được sơn, chn mt đỉnh chưa sơn và sơn đỉnh đó.  
Sau đó, mi đỉnh chưa sơn nếu nó không kvi các đỉnh được sơn bi mu đang  
sdng thì ta sơn nó bi mu đó.  
Khi không còn đỉnh nào có thsơn được bi mu đó thì ta dùng mu mi để sơn  
và áp dng cách như trên.  
Tiếp tc cho ti khi sơn hết đồ th.  
- Thtc  
+ GisX là tp hp các đỉnh ca đồ thị  
Gi X0 là tp hp các đỉnh chưa được sơn, X1 là tp hp các đỉnh được sơn vi  
màu mi. Các màu được mã hoá bi các snguyên k = 1, 2, .. .  
Gii thut như sau:  
Procedure Coloring;  
Begin  
k := 0;  
X0 := X;  
While X0 <> do  
begin  
- k:= k+1;  
- Chn x X0 và sơn bi màu k;  
- X1 = {x}  
- For each u X0 do  
Bmôn KHMT – Khoa CNTT – ĐHHH Vit Nam  
15  
Bài ging môn hc: Cu trúc Dliu và Gii thut  
If u không kvi mi ω ∈ x1 then  
begin  
+ Sơn u bi màu k  
+ X1 := X1 {u};  
end;  
- X0 = X0 – X1;  
end;  
End;  
*) Chú ý: Trong mt sbài toán nếu xây dng được hàm chn thích hp có thể  
cho nghim ti ưu. Trong nhiu bài toán, thut toán tham ăn chcho nghim gn  
11  
9
17  
19  
10  
7
1
2
8
18  
5
6
13  
12  
14  
12  
3
15  
16  
4
đúng vi nghim ti ưu.  
d: Hãy tô mu đồ thtrên.  
Chiến lược quay lui (Back tracking / try and error)  
Là mt trong nhng kthut quan trng nht. Nó có tháp dng để thiết kế thut  
toán tìm ra mt nghim hay tt ccác nghim ca bài toán.  
- Trong nhiu vn đề, vic tìm nghim có thquy vvic tìm mt véc tơ hu hn  
(x1, x2, . . ., xn, . . .) nhưng độ dài vectơ có thkhông xác định trước. Véctơ này  
cn phi thomãn mt số điu kin nào đó tuthuc vào vn đề cn gii quyết.  
Các thành phn xi ca vectơ được chn ra tmt tp hu hn Ai (i = 1 .. n)  
Bmôn KHMT – Khoa CNTT – ĐHHH Vit Nam  
16  
Bài ging môn hc: Cu trúc Dliu và Gii thut  
- Ý tưởng phương pháp quay lui: Xây dng vectơ nghim dn tng bước, bt đầu  
tvectơ không. Thành phn đầu tiên X1 được chn ttp Si = A. Khi đã chn  
được các thành phn x1, x2, . . . , xi-1 thì tcác điu kin bài toán ta sxác định  
được tp Si các ng cviên có thchn làm thành phn xi.  
- Tp Si là tp con ca tp Ai và phthuc vào các thành phn x1, x2, . . ., xi-1  
đã chn. Chn mt phn txi tSi ta mrng nghim mt phn (x1, x2, . . , xi-  
1) đến nghim mt phn (x1, x2,. . ., xi).  
- Lp li quá trình trên để tiếp tc mrng nghim mt phn (x1,x2,…,xi). Nếu  
không thchn được thành phn xi+1 ( khi Si+1 = ) thì ta quay lui chn phn  
tkhác ca Si làm xi. Nếu không còn phn tnào để chn làm xi thì ta quay li  
chn mt phn tkhác ca Si-1 làm xi-1 và cthế tiếp tc.  
- Trong quá trình mrng nghim ta phi kim tra nghim mt phn có là  
nghim ca bài toán hay không. Nếu chcn tìm mt nghim thì khi gp nghim  
ta dng li. Còn tìm mi nghim thì quá trình dng li khi mi khnăng chn  
các thành phn ca các vectơ đã được xét hay vét cn (phân tích top-down, phân  
tích bottom-up).  
- Lược đồ:  
Procedure Backtrack;  
Begin  
S1 = A1;  
k:=1;  
While k >0 do  
begin  
+ While Sk <> do  
begin  
- Chn xk Sk ;  
- Sk = Sk – { xk };  
- if (x1, x2, . . . , xk) là nghim then viết ra nghim;{xlý}  
- k := k+1;  
- xác định Sk;  
Bmôn KHMT – Khoa CNTT – ĐHHH Vit Nam  
17  
Bài ging môn hc: Cu trúc Dliu và Gii thut  
end;  
+ k:=k-1; {Quay lui}  
end;  
End;  
- Khi áp dng lược đồ tng quát ca phương pháp quay lui cho các bài toán cụ  
th, cn chú ý 3 đim:  
+ Tìm cách biu din nghim ca bài toán dưới dng mt dãy các đối tượngđược  
chn dn tng bước (x1, x2,. . ., xi, . . .)  
+ Xác định các tp Si các ng cviên được chon làm thành phn thi ca vec tơ  
nghim. Chn cách thích hp để biu din Si.  
+ Tìm các điu kin để mt véctơ đã chn là nghim ca bài toán  
ng dng: Thut toán tìm kiếm theo độ sâu trên cây không gian thông tin.  
- Minh ho: Mã thăm bàn c, tám hu.  
Bài toán 1: Mã thăm bàn c(Knight tour)  
Phát biu:  
Input : + Cho bàn cn*n ô  
+ Vtrí xut phát ca con mã  
+ Lut đi ca con mã  
Out put: Tìm đường đi để sau n2-1 ln con mã đi thăm kín bàn cờ  
21  
16  
11  
6
10  
5
15  
20  
1
4
19  
14  
3
1
6
15  
20  
7
10  
5
21  
16  
11  
4
9
14  
19  
8
9
22  
17  
12  
18  
13  
2
2
22  
17  
12  
24  
7
8
13  
18  
24  
3
23  
25  
25  
23  
Bmôn KHMT – Khoa CNTT – ĐHHH Vit Nam  
18  
Bài ging môn hc: Cu trúc Dliu và Gii thut  
- Ý tưởng ca gii thut:  
+ Vét cn mi nước đi có thcó ca mã.  
+ Quay lui (ln ngược th& sai)  
- Gii thut:  
Procedure thnước đi tiếp;  
Begin  
+ Khi động vic chn nước đi;  
+Repeat  
- Chn nước đi tiếp tdanh sách ng cử  
- if chp nhn được then  
begin  
- Ghi nhnước đi  
- If bàn cchưa kín then  
begin  
- Thnước đi tiếp  
- If không thành then xoá ghi nhtrước  
end;  
end;  
Until ( nước đi thành công) or (không còn danh sách ng c);  
End;  
+ Xây dng cu trúc dliu  
- Sdng ma trn h để biu din bàn cờ  
h[x,y] = 0 : ô (x,y) chưa được mã ghé thăm  
h[x,y] = i : ô (x,y) được mã ghé thăm nước đi thi (i n2)  
- q : true thành công  
false tht bi  
-(u,v) chp nhn khi 1 u,v u ; h[u,v]=0 (ô (u,v) nm trong bàn cvà chưa  
được mã đi).  
Bmôn KHMT – Khoa CNTT – ĐHHH Vit Nam  
19  
Bài ging môn hc: Cu trúc Dliu và Gii thut  
- Gii thut mn bước mt ( nhcó biu din dliu bước mt)  
Procedure Try( i, x, y :integer; var q : boolean);  
Var u,v : integer; q1 : boolean;  
Begin  
- Khi động vic chn nước đi; // Đặt quân mã ban đầu ở đâu.  
- Repeat  
+ Chn nước đi (u, v) tdanh sách được ng c.  
+ If (1 u,v u) and ( h[u,v]=0 ) then  
begin  
h[u,v] := i;  
if (i<n2) then  
begin  
Try (i+1, u, v, q1) ;  
If not q1 then h[u,v] = 0 ;  
end  
else q1 := true;  
end;  
until q1 or không còn nước đi trong danh sách ng c;  
q :=q1;  
End;  
Chn cu trúc dliu biu din đường đi ca quân mã:  
a[1] := 2; b[1] := 1;  
a[2] := 1; b[2] := 2;  
a[3] := -1; b[3] := 2;  
a[4] := -2; b[4] := 1;  
a[5] := -2; b[5] := -1;  
a[6] := -1; b[6] := -2;  
a[7] := 1; b[7] := -2;  
Bmôn KHMT – Khoa CNTT – ĐHHH Vit Nam  
20  
Tải về để xem bản đầy đủ
pdf 90 trang Thùy Anh 04/05/2022 6260
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Cấu trúc dữ liệu và giải thuật - Trường Đại học Hàng Hải", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfgiao_trinh_cau_truc_du_lieu_va_giai_thuat_truong_dai_hoc_han.pdf