Bài giảng Cấu trúc dữ liệu và thuật toán - Chương 1: Các kiến thức cơ bản - Nguyễn Đức Nghĩa

CẤU TRÚC DỮ LIỆU  
VÀ THUẬT TOÁN  
Data Structures and Algorithms  
NguyN ĐỨC NGHĨA  
Bộ môn Khoa học Máy tính  
Đại học Bách khoa Hà nội  
Tel: 0438696121 (Off), 0903210111 (Mob)  
Chương 1  
CÁC KIẾN THỨC CƠ BẢN  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
NỘI DUNG  
1.1. Ví dụ mở đầu  
1.2. Thuật toá n độ phức tạp  
1.3. Ký hiệu tiệm cận  
1.4. Giả ngô n ngữ  
1.5. Một số kĩ thuật phâ n tí ch thuật toá n  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
dụ mở đầu  
• Bài toá n tì m dã y con lớn nhất:  
Cho dãy số  
a1, a2, … , an  
Dãy số ai, ai+1 , …, aj với 1 i j n được gọi dãy con của dãy  
đã cho và jk=i ak được gọi trọng lượng của dãy con này  
Bài toán đặt ra là: Hãy tìm trọng lượng lớn nhất của các dãy con, tức  
là tìm cực đại giá trị ∑jk=i ak. Để đơn giản ta gọi dãy con có trọng  
lượng lớn nhất dãy con lớn nhất.  
dụ: Nếu dãy đã cho là -2, 11, -4, 13, -5, 2 thì cần đưa ra  
câu trả lời là 20 (là trọng lượng của dãy con 11, -4, 13)  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Thuật toá n trực tiếp  
Thuật toán đơn giản đầu tiên có thể nghĩ để giải bài toán đặt ra  
là: Duyệt tất cả các dãy con có thể  
ai, ai+1 , …, aj với 1 i j n  
và tính tổng của mỗi dãy con để tìm ra trọng lượng lớn nhất.  
Trước hết nhận thấy rằng, tổng số các dãy con có thể của dãy đã  
cho là  
C(n,2) + n = n2/2 + n/2 .  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Thuật toá n trực tiếp  
Thuật toán này có thể cài đặt trong đoạn chương trình sau:  
int maxSum = 0;  
for (int i=0; i<n; i++) {  
for (int j=i; j<n; j++) {  
int sum = 0;  
for (int k=i; k<=j; k++)  
sum += a[k];  
if sum > maxSum  
maxSum = sum;  
}
}
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Thuật toá n trực tiếp  
Phâ n tí ch thuật toá n: Ta sẽ tí nh số lượng phé p cộng  
thuật toá n phải thực hiện, tức đếm xem dò ng lệnh  
Sum += a[k]  
phải thực hiện bao nhiêu lần. Số lượng phé p cộng sẽ là  
n1 n1  
n1  
n1 (n i)(n i 1)  
( j i 1) (12 ...(n i))   
  
2
i0 ji  
i0  
i0  
n
n
n
1
1
2
1 n(n 1)(2n 1) n(n 1)  
k(k 1)   
k2 k   
2   
   
2
6
2
k1  
k1  
k1  
   
n3 n2  
n
6
2
3
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Thuật toá n nhanh hơn  
Để ý rằng tổng cá c số hạng từ i đến j thể thu được  
từ tổng của cá c số hạng từ i đến j-1 bởi 1 phé p cộng, cụ  
thể là ta có :  
j
j1  
a[k] a[ j]a[k]  
ki  
ki  
Nhận xé t này cho phé p rút bớt vò ng lặp for trong cùng.  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Thuật toá n nhanh hơn  
• Ta thể cài đặt như sau  
int maxSum = a[0];  
for (int i=0; i<n; i++) {  
int sum = 0;  
for (int j=i; j<n; j++) {  
sum += a[j];  
if sum > maxSum  
maxSum = sum;  
}
}
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Thuật toá n nhanh hơn  
Phân tích thuật toán. Ta lại tính số lần thực hiện phép cộng  
và thu được kết quả sau:  
n2  
n
n1  
(n i) n (n 1) ...1  
2 2  
i0  
Để ý rằng số này là đúng bằng số lượng dãy con. Dường như  
thuật toán thu được rất tốt, vì ta phải xét mỗi dãy con đúng 1  
lần.  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Thuật toá n đệ qui  
• Ta cò n có thể xâ y dựng thuật toá n tốt hơn nữa! Ta sẽ sử  
dụng kỹ thuật chia để trị. Kỹ thuật này bao gồm cá c  
bước sau:  
– Chia bài toán cần giải ra thành các bài toán con cùng dạng  
Giải mỗi bài toán con một cách đệ qui  
Tổ hợp lời giải của các bài toán con để thu được lời giải của bài toán  
xuất phát.  
• Á p dụng kỹ thuật này đối với bài toá n tì m trọng lượng  
lớn nhất của cá c dã y con: Ta chia dã y đã cho ra thành 2  
dã y sử dụng phần tử ở chí nh giữa và thu được 2 dã y số  
(gọi tắt là dã y bên trá i và dã y bên phải) với độ dài giảm  
đi một nửa.  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Thuật toá n đệ qui  
Để tổ hợp lời giải, nhận thấy rằng chỉ thể xảy ra một  
trong 3 trường hợp:  
– Dãy con lớn nhất nằm ở dãy con bên trái (nửa trái)  
– Dãy con lớn nhất nằm ở dãy con bên phải (nửa phải)  
– Dãy con lớn nhất bắt đầu ở nửa trái và kết thúc ở nửa phải (giữa).  
• Do đó, nếu hiệu trọng lượng của dã y con lớn nhất ở  
nửa trá i là wL, ở nửa phải là wR ở giữa là wM thì  
trọng lượng cần tì m sẽ là  
max(wL, wR, wM).  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Thuật toá n đệ qui  
Việc tì m trọng lượng của dã y con lớn nhất ở nửa trá i  
(wL) và nửa phải (wR) có thể thực hiện một cá ch đệ qui  
Để tì m trọng lượng wM của dã y con lớn nhất bắt đầu ở  
nửa trá i kết thúc ở nửa phải ta thực hiện như sau:  
– Tính trọng lượng của dãy con lớn nhất trong nửa trái kết  
thúc ở điểm chia (wML) và  
– Tính trọng lượng của dãy con lớn nhất trong nửa phải bắt  
đầu ở điểm chia (wMR).  
– Khi đó wM = wML + wMR.  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Thuật toá n đệ qui  
m điểm chia của dãy trái, m+1 là điểm chia của dãy phải  
a1, a2,…,am, am+1, am+2,…,an  
Tính WML của dãy con  
lớn nhất trong nửa trái  
kết thúc tại am  
Tính WMR của dãy con  
lớn nhất trong nửa phải  
bắt đầu từ am+1  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Thuật toá n đệ qui  
Để tính trọng lượng của dãy con lớn nhất ở nửa trái (từ  
a[i] đến a[j]) kết thúc ở a[j] ta dùng thuật toán sau:  
MaxLeft(a, i, j);  
{
maxSum = -; sum = 0;  
for (int k=j; k>=i; k--) {  
sum = sum+a[k];  
maxSum = max(sum, maxSum);  
}
return maxSum;  
}
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Thuật toá n đệ qui  
Để tính trọng lượng của dãy con lớn nhất ở nửa phải (từ  
a[i] đến a[j]) bắt đầu từ a[i] ta dùng thuật toán sau:  
MaxRight(a, i, j);  
{
maxSum = -; sum = 0;  
for (int k=i; k<=j; k++){  
sum = sum+a[k];  
maxSum = max(sum, maxSum);  
}
return maxSum;  
}
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Thuật toá n đệ qui  
Sơ đồ của thuật toá n đệ qui có thể tả như sau:  
MaxSub(a, i, j);  
{
if (i = j) return a[i]  
else  
{
m = (i+j)/2;  
wL = MaxSub(a, i, m);  
wR = MaxSub(a, m+1, j);  
wM = MaxLeft(a, i, m)+  
MaxRight(a, m+1, j);  
return max(wL, wR, wM);  
}
}
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Thuật toá n đệ qui  
Phâ n tí ch thuật toá n:  
Ta cần tính xem lệnh gọi MaxSub(a,1,n) để thực hiện thuật  
toán đòi hỏi bao nhiêu phép cộng?  
Truớc hết nhận thấy MaxLeft và MaxRight đòi hỏi  
n/2 + n/2 = n phép cộng  
• Vì vậy, nếu gọi T(n) là số phép cộng cần tìm, ta có công thức  
đệ qui sau:  
0
n 1  
n 1  
T(n)   
n  
n
n
T( ) T( ) n 2T( ) n  
2  
2
2
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Thuật toá n đệ qui  
• Ta khẳng định rằng T(2k) = k.2k. Ta chứng minh bằng qui nạp  
Cơ sở qui nạp: Nếu k=0 thì T(20) = T(1) = 0 = 0.20.  
Chuyển qui nạp: Nếu k>0, giả sử rằng T(2k-1) = (k-1)2k-1 là  
đúng. Khi đó  
T(2k) = 2T(2k-1)+2k = 2(k-1).2k-1 + 2k = k.2k.  
• Quay lại với hiệu n, ta có  
T(n) = n log n .  
Kết quả thu được tốt hơn thuật toán thứ hai !  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
So sá nh cá c thuật toá n  
• Cùng một bài toá n ta đã đề xuất 3 thuật toá n đòi hỏi số  
lượng phé p toá n khá c nhau và vì thế sẽ đòi hỏi thời gian  
tí nh khá c nhau.  
• Cá c bảng trì nh bày dưới đây cho thấy thời gian tí nh với  
giả thiết má y tí nh có thể thực hiện 108 phé p cộng trong 1  
giâ y  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Thời gian tí nh  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Thời gian tí nh  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Bảng qui đổi thời gian  
Bảng sau đây dùng để tí nh thời gian thực hiện  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Bài toá n mở đầu  
Với n nhỏ thời gian tính là không đáng kể.  
Vấn đề trở nên nghiêm trọng hơn khi n > 106. Lúc  
đó chỉ thuật toán thứ ba là có thể áp dụng được  
trong thời gian thực.  
Còn có thể làm tốt hơn nữa không?  
thể đề xuất thuật toán chỉ đòi hỏi n phép cộng!  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Thuật toá n Quy hoạch động  
Việc phát triển thuật toán dựa trên DP bao gồm 3 giai đoạn:  
1. Phân rã: Chia bài toán cần giải thành những bài toán con nhỏ  
hơn có cùng dạng với bài toán ban đầu.  
2. Ghi nhận lời giải: Lưu trữ lời giải của các bài toán con vào  
một bảng.  
3. Tổng hợp lời giải: Lần lượt từ lời giải của các bài toán con  
kích thước nhỏ hơn tìm cách xây dựng lời giải của bài toán  
kích thước lớn hơn, cho đến khi thu được lời giải của bài toán  
xuất phát (là bài toán con có kích thước lớn nhất).  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Thuật toá n QHĐ  
Ph©n r·. Gäi si lµ trng lượng cña d·y con lín nhÊ t  
trong d·y a1, a2, ..., ai , i = 1, 2, ..., n.  
Râ rµng sn lµ gi¸ trÞ cÇn t×m.  
Tæng hîp l i gii.  
Tr-íc hÕt, ta cã  
s1 = a1.  
– Gi¶ i > 1 sk ®· biÕt víi k = 1, 2, ..., i-1. Ta cÇn tÝnh si lµ  
trng lượng ca d·y con lín nhÊ t cña d·y  
a1, a2, ..., ai-1, ai .  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Thuật toá n QHĐ  
• Do dãy con lớn nhất của dãy này hoặc là có chứa phần tử ai hoặc là không  
chứa phần tử ai, nên nó chỉ thể một trong hai dãy:  
Dãy con lớn nhất của dãy a1, a2, ..., ai-1  
– Dãy con lớn nhất của dãy a1, a2, ..., ai kết thúc tại ai.  
Từ đó suy ra  
si = max {si-1, ei}, i = 2, …, n.  
trong đó ei là trọng lượng của dãy con lớn nhất của dãy a1, a2, ..., ai kết  
thúc tại ai.  
Để tính ei, ta cũng có thể sử dụng công thức đệ qui sau:  
e1 = a1;  
ei = max {ai, ei-1 + ai}, i = 2, ..., n.  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Thuật toá n QHĐ  
MaxSub(a);  
{
smax = a[1];  
(* smax – trng lượng cña d·y con lín nhÊ t *)  
maxendhere = a[1]; (* maxendhere – trọng lượng của dãy con lớn nhất kết thúc tại a[i] *)  
imax = 1;  
for i = 2 to n {  
(* imax - vÞ trÝ kÕt thóc cña d·y con lín nhÊ t *)  
u = maxendhere + a[i];  
v = a[i];  
if (u > v) maxendhere = u  
else maxendhere = v;  
if (maxendhere > smax)then {  
smax := maxendhere;  
imax := i;  
}
}
}
Phân tích thuật toán:  
Dễ thấy số phép toán cộng phải thực hiện trong thuật toán (số lần thực  
hiện câu lệnh u = maxendhere + a[i];) là n.  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
NỘI DUNG  
1.1. Ví dụ mở đầu  
1.2. Thuật toá n độ phức tạp  
1.3. Ký hiệu tiệm cận  
1.4. Giả ngô n ngữ  
1.5. Một số kĩ thuật phâ n tí ch thuật toá n  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Khá i niệm bài toá n tí nh toá n  
§Þnh nghÜa. Bµi to¸n tÝnh to¸n F lµ ¸nh x¹ tõ tËp c¸c x©u nhÞ ph©n ®é dµi  
h÷u h¹n vµo tËp c¸c x©u nhÞ ph©n ®é dµi h÷u h¹n:  
F : {0, 1}* {0, 1}*.  
VÝ dô:  
– Mçi sè nguyªn x ®Òu cã thÓ biÓu diÔn d-íi d¹ng x©u nhÞ ph©n lµ c¸ch  
viÕt trong hÖ ®Õm nhÞ ph©n cña nã.  
– HÖ ph-¬ng tr×nh tuyÕn tÝnh Ax = b cã thÓ biÓu diÔn d-íi d¹ng x©u lµ  
ghÐp nèi cña c¸c x©u biÓu diÔn nhÞ ph©n cña c¸c thµnh phÇn cña ma  
trËn A vµ vect¬ b.  
– §a thøc mét biÕn P(x) = a0 + a1 x + ... + an xn hoµn toµn x¸c ®Þnh bëi  
d·y sè n, a0, a1, ..., an, mµ ®Ó biÓu diÔn d·y sè nµy chóng ta cã thÓ sö  
dông x©u nhÞ ph©n.  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Khá i niệm thuật toá n  
§Þnh nghÜa. Ta hiÓu thuËt to¸n gi¶i bµi to¸n ®Æt ra lµ mét thñ tôc x¸c ®Þnh  
bao gåm mét d·y h÷u h¹n c¸c b-íc cÇn thùc hiÖn ®Ó thu ®-îc ®Çu ra cho  
mét ®Çu vµo cho tr-íc cña bµi to¸n.  
ThuËt to¸n cã c¸c ®Æc tr-ng sau ®©y:  
§Çu vµo (Input): ThuËt to¸n nhËn d÷ liÖu vµo tõ mét tËp nµo ®ã.  
§Çu ra (Output): Víi mçi tËp c¸c d÷ liÖu ®Çu vµo, thuËt to¸n ®-a ra c¸c d÷ liÖu  
t-¬ng øng víi lêi gi¶i cña bµi to¸n.  
ChÝnh x¸c (Precision): C¸c b-íc cña thuËt to¸n ®-îc m« t¶ chÝnh x¸c.  
H÷u h¹n (Finiteness): ThuËt to¸n cÇn ph¶i ®-a ®-îc ®Çu ra sau mét sè h÷u h¹n  
(cã thÓ rÊt lín) b-íc víi mäi ®Çu vµo.  
§¬n trÞ (Uniqueness): C¸c kÕt qu¶ trung gian cña tõng b-íc thùc hiÖn thuËt  
to¸n ®-îc x¸c ®Þnh mét c¸ch ®¬n trÞ vµ chØ phô thuéc vµo ®Çu vµo vµ c¸c kÕt qu¶  
cña c¸c b-íc tr-íc.  
Tæng qu¸t (Generality): ThuËt to¸n cã thÓ ¸p dông ®Ó gi¶i mäi bµi to¸n cã d¹ng  
®· cho.  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Giải bài toá n là gì ?  
What is Problem Solving?  
• Problem solving  
– Là quá trình đặt bài toán và phát triển chương trình máy tính để giải bài  
toán đặt ra  
Lời giải bài toá n bao gồm:  
Thuật toán (Algorithms)  
Algorithm: là dãy các bước cần thực hiện để từ dữ liệu vào (input) đưa ra  
kết quả đầu ra (output) của bài toán trong thời gian hữu hạn.  
Cấu trúc dữ liệu:  
Cách tổ chức lưu trữ dữ liệu vào - ra  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Vò ng đời của phần mềm  
The Life Cycle of Software  
• Vò ng đời của phần mềm  
– Là một quá trình dài và liên tục  
Đòi hỏi để phát triển một phần mềm chất lượng tốt  
Lập trình viên có thể di chuyển từ một pha trong vòng đời  
sang bất kỳ pha nào còn lại  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Vò ng đời của phần mềm  
The Life Cycle of Software  
Vò ng đời của phần mềm như một bá nh lá i thể quay từ một pha đến một pha  
khá Nc bgut kyễn Đức Nghĩa - Bộ  
1-35  
Cấu trúmc dôlinệu KvàHthuMật tTnĐ- NH.ĐB. NKghĩHa. BNmô n KHMT  
Vò ng đời của phần mềm  
The Life Cycle of Software  
9 pha:  
• Phase 1: Chỉ đặc điểm kỹ thuật (Specification) (đặc tả)  
• Phase 2: Thiết kế (Design)  
• Phase 3: Phâ n tí ch rủi ro (Risk Analysis)  
• Phase 4: Kiểm thử (Verification)  
• Phase 5: Lập trì nh (Coding)  
• Phase 6: Test thử (Testing)  
• Phase 7: Tinh chế lời giải (Refining the Solution)  
• Phase 8: Sản xuất (Production)  
• Phase 9: Bảo trì (Maintenance)  
Nguyễn Đức Nghĩa - Bộ  
1-36  
Cấu trúmc dôlinệu KvàHthuMật tTnĐ- NH.ĐB. NKghĩHa. BNmô n KHMT  
Vò ng đời của phần mềm  
The Life Cycle of Software  
• Phase 1: Đặc tả (Specification)  
– Các khía cạnh của bài toán cần chỉ rõ:  
Dữ liệu đầu vào là gì (What is the input data?)  
Dữ liệu nào là đúng đắn, là không đúng đắn?  
Ai là người sử dụng phần mềm và giao diện người dùng cần được  
thiết kế như thế nào?  
Cần phát hiện những lỗi gì và cần thông báo như thế nào về chúng?  
thể có các giả thiết nào?  
những trường hợp đặc biệt nào?  
Dạng của dữ liệu đưa ra như thế nào?  
Cần có các tài liệu gì?  
Cái gì cần phát triển trong tương lai?  
Chương trình mẫu (Chương trình mô phỏng dáng điệu của một phần  
của sản phẩm phần mềm cần phát triển)  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Vò ng đời của phần mềm  
The Life Cycle of Software  
• Phase 2: Thiết kế (Design). Quá trì nh thiết kế  
bao gồm:  
– Chia chương trình ra thành các modules (Modules:  
là các đơn vị chương trình độc lập)  
Chỉ mục đích của mỗi module  
Chỉ rõ dòng dữ liệu trong các modules  
– Xác định giao diện (Interfaces - Cơ cấu giao tiếp  
giữa các mô đun)  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Vò ng đời của phần mềm  
The Life Cycle of Software  
• Phase 3: Phâ n tí ch rủi ro (Risk Analysis)  
• Phase 4: Kiểm thử (Verification)  
Chứng minh tính đúng đắn của thuật toán bằng các phương pháp hình thức, …  
• Phase 5: Cài đặt (Coding)  
– Liên quan đến việc chuyển thiết kế sang một ngôn ngữ lập trình cụ thể  
Loại trừ các lỗi ngữ pháp  
• Phase 6: Test thử (Testing)  
– Liên quan đến việc loại bỏ các lỗi logic  
Dữ liệu test phải bao gồm:  
Dữ liệu đúng đắn với kết quả biết trước  
Dữ liệu không đúng đắn  
Dữ liệu ngẫu nhiên  
Dữ liệu thực tế  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Vò ng đời của phần mềm  
The Life Cycle of Software  
• Phase 7: Tinh chế lời giải (Refining the Solution)  
– Do chương trình được phát triển với những giả thiết nhất định nên cần  
tìm cách giảm nhẹ các giả thiết được bổ sung đối với đầu vào, đầu ra  
Bổ sung thêm các chức năng  
Tăng các biện pháp kiểm tra lỗi  
• Phase 8: Xuất xưởng (Production)  
– Bàn giao sản phẩm cho người dùng.  
Người dùng sử dụng phần mềm  
• Phase 9: Bảo trì (Maintenance)  
Sửa chữa các lỗi do người sử dụng phát hiện.  
Bổ sung thêm chức năng.  
Cải tiến một số bộ phận để đáp ứng yêu cầu của người dùng tốt hơn  
Cấu trúc dữ liệu và thuật toá n - N.Đ. Nghĩa. Bộ mô n KHMT  
Tải về để xem bản đầy đủ
pdf 50 trang Thùy Anh 26/04/2022 5740
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Cấu trúc dữ liệu và thuật toán - Chương 1: Các kiến thức cơ bản - Nguyễn Đức Nghĩa", để 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:

  • pdfbai_giang_cau_truc_du_lieu_va_thuat_toan_chuong_1_cac_kien_t.pdf