SlideShare a Scribd company logo
1 of 43
Môn học:

Phân tích và Thiết kế Giải thuật
Số tín chỉ: 3

BÀI GIẢNG ĐIỆN TỬ
Biên soạn bởi: PGS.TS. Dương Tuấn Anh
Khoa Khoa Học và Kỹ Thuật Máy Tính
Trường Đ.H. Bách Khoa
Đại học Quốc Gia Tp Hồ Chí Minh

1
Tài liệu tham khảo
[1] Cormen, T. H., Leiserson, C. E, and Rivest, R. L.,
Introduction to Algorithms, The MIT Press, 1997.
[2] Levitin, A., Introduction to the Design and Analysis
of Algorithms, Addison Wesley, 2003
[3] Sedgewick, R., Algorithms in C++, AddisonWesley, 1998
[4] Weiss, M.A., Data Structures and Algorithm
Analysis in C, TheBenjamin/Cummings Publishing,
1993

2
Đề cương Môn học
1. Các khái niệm căn bản
2. Chiến lược chia-để-trị
3. Chiến lược giảm-để-trị
4. Chiến lược biến thể-để-trị
5. Qui hoạch động và giải thuật tham lam
6. Giải thuật quay lui
7. Vấn đề NP-đầy đủ
8. Giải thuật xấp xỉ

3
Nội dung
1.
2.
3.
4.
5.
6.

Đệ quy và hệ thức truy hồi
Phân tích độ phức tạp giải thuật
Phân tích giải thuật lặp
Phân tích giải thuật đệ quy
Chiến lược thiết kế giải thuật
Thiết kế giải thuật kiểu “trực tiếp” (bruce-force)

5
1. Đệ quy
Hệ thức truy hồi
Thí dụ 1: Hàm tính giai thừa
N! = N.(N-1)!
với N ≥ 1
0! = 1
Những định nghĩa hàm đệ quy mà chứa những đối số nguyên
được gọi là những hệ thức truy hồi (recurrence relation).
function factorial (N: integer): integer;
begin
if N = 0
then factorial: = 1
else factorial: = N*factorial (N-1);
end;
6
Hệ thức truy hồi
Thí dụ 2: Số Fibonacci
Hệ thức truy hồi:
FN = FN-1 + FN-2

for N ≥ 2
F0 = F1 = 1
1, 1, 2, 3, 5, 8, 13, 21, …

function fibonacci (N: integer): integer;
begin
if N <= 1
then fibonacci: = 1
else fibonacci: = fibonacci(N-1) +
fibonacci(N-2);
end;
7
Số Fibonacci – Cây đệ quy

computed

Có nhiều tính toán dư thừa
khi tính số Fibonacci bằng
hàm đệ quy.
8
Một cách khác: Ta có thể dùng một mảng để chứa những trị số
đi trước trong khi tính hàm fibonacci. Ta có một giải thuật
không đệ quy.
procedure fibonacci;
const max = 25;
var i: integer;
F: array [0..max] of integer;
begin
F[0]: = 1; F[1]: = 1;
for i: = 2 to max do
F[i]: = F[i-1] + F[i-2]
end;

Giải thuật không đệ quy
thường làm việc hữu hiệu
và dễ kiểm soát hơn 1 giải
thuật đệ quy.
Nhờ vào sử dụng stack, ta
có thể chuyển đổi một giải
thuật đệ quy thành một giải
thuật lặp tương đương.

9
2. Phân tích độ phức tạp giải thuật
Với phần lớn các bài toán, thường có nhiều giải thuật khác
nhau để giải một bài toán.
Làm cách nào để chọn giải thuật tốt nhất để giải một bài
toán?
Làm cách nào để so sánh các giải thuật cùng giải được một
bài toán?
Phân tích độ phức tạp của một giải thuật: dự đoán các tài
nguyên mà giải thuật đó cần.
Tài nguyên:

Chỗ bộ nhớ
Thời gian tính toán

Thời gian tính toán là tài nguyên quan trọng nhất.
10
Hai cách phân tích
Thời gian tính toán của một giải thuật thường là
một hàm của kích thước dữ liệu nhập.
Chúng ta quan tâm đến:
• Trường hợp trung bình (average case): thời gian
tính toán mà một giải thuật cần đối với một “dữ
liệu nhâp thông thường” (typical input data).
• Trường hợp xấu nhất (worst case): thời gian tính
toán mà một giải thuật cần đối với một “dữ liệu
nhâp xấu nhất”
11
Khung thức của sự phân tích
♦ Bước 1: Đặc trưng hóa dữ liệu nhập và quyết định kiểu
phân tích thích hợp.
Thông thường, ta tập trung vào việc
- chứng minh rằng thời gian tính toán luôn nhỏ hơn một “cận
trên” (upper bound), hay
- dẫn xuất ra thời gian chạy trung bình đối với một dữ liệu
nhập ngẫu nhiên.
♦ Bước 2: nhận dạng thao tác trừu tượng (abstract operation)
mà giải thuật dựa vào đó làm việc.
Thí dụ: thao tác so sánh trong giải thuật sắp thứ tự.
Tổng số thao tác trừu tượng thường tùy thuộc vào một vài đại
lượng.
♦ Bước 3: thực hiện phân tích toán học để tìm ra các giá trị
trung bình và giá trị xấu nhất của các đại lượng quan trọng.
12
Hai trường hợp phân tích
• Thường thì không khó để tìm ra cận trên của thời
gian tính toán của một giải thuật.
• Nhưng phân tích trường hợp trung bình thường đòi
hỏi một sự phân tích toán học cầu kỳ, phức tạp.
• Về nguyên tắc, một giải thuật có thể được phân tích
đến một mức độ chính xác rất chi li. Nhưng trong
thực tế, chúng ta thường chỉ tính ước lượng
(estimating) mà thôi
• Tóm lại, chúng ta tìm kiếm một ước lượng thô về thời
gian tính toán của một giải thuật (nhằm mục đích
phân lớp độ phức tạp).
13
Phân lớp độ phức tạp
Hầu hết các giải thuật thường có một thông số chính, N, số
mẩu dữ liệu nhập mà được xử lý.
Thí dụ:
Kích thước của mảng (array) được sắp thứ tự hoặc tìm kiếm.
Số nút của một đồ thị.
Giải thuật có thể có thời gian tính toán tỉ lệ với
1. Nếu tác vụ chính được thực thi một vài lần.
⇒ thời gian tính toán là hằng số.
log2N ≡ lgN

2. lgN (logarithmic)
Giải thuật tăng chậm hơn sự tăng của N.
14
3. N (linear)
4. NlgN
5. N2 (quadratic)

khi giải thuật là vòng lặp lồng hai

6. N3 (cubic)

khi giải thuật là vòng lặp lồng ba

7. 2N

một số giải thuật có thời gian chạy luỹ thừa.

Một vài giải thuật khác có thể có thời gian chạy
N3/2, N1/2 , (lgN)2 …

15
16
Độ phức tạp tính toán
Chúng ta tập trung vào phân tích trường hợp xấu nhất. Khi
phân tích, bỏ qua những thừa số hằng số để xác định sự phụ
thuộc hàm của thời gian tính toán đối với kích thước dữ liệu
nhập.
Thí dụ: Thời gian tính toán của sắp thứ tự bằng phương pháp
trộn (mergesort ) là tỉ lệ với NlgN.
Khái niệm “tỉ lệ với” (proportional to)
Công cụ toán học để làm chính xác khái niệm này là
ký hiệu – O (O-notation).
Định nghĩa: Một hàm g(N) được gọi là O(f(N)) nếu tồn tại hai
hằng số c0 và N0 sao cho g(N) nhỏ hơn c0f(N) với mọi
N > N0.
17
Ký hiệu O
Ký hiệu O là một cách hữu ích để phát biểu cận trên về thời
gian tính toán mà độc lập đối với đặc tính dữ liệu nhập và
chi tiết hiện thực hóa.
Chúng ta cố gắng tìm cả “cận trên” lẫn “cận dưới” của thời
gian tính toán trong phân tích trường hợp xấu nhất.
Nhưng cận dưới (lower-bound ) thì thường khó xác định.

18
Phân tích trường hợp trung bình
Với kiểu phân tích này, ta phải
- đặc trưng hóa dữ liệu nhập của giải thuật
- tính giá trị trung bình của số lần một phát biểu được
thực thi.
- tính thời gian tính toán trung bình của toàn giải
thuật.
Nhưng thường thì khó
- xác định thời gian chạy của mỗi phát biểu.
- đặc trưng hóa chính xác dữ liệu nhập trong thực tế.

19
Các kết quả tiệm cận và xấp xỉ
Kết quả của một sự phân tích toán học thường mang tính xấp
xỉ (approximate): nó có thể là một biểu thức gồm một chuỗi
những số hạng giảm dần tầm quan trọng.
Ta thường để ý đến các số hạng dẫn đầu trong biểu thức toán
học.
Thí dụ: Thời gian tính toán trung bình của một chương trình
là:
a0NlgN + a1N + a2
Ta có thể viết lại là:
a0NlgN + O(N)
Với N lớn, ta không cần tìm giá trị của a1 hay a2.
20
Các kết quả xấp xỉ
Ký hiệu O cho ta một cách tìm ra kết quả xấp xỉ khi N
lớn.
Do đó, thông thường chúng ta có thể bỏ qua một số đại
lượng khi có tồn tại một số hạng dẫn đầu trong biểu
thức.
Example: nếu biểu thức là N(N-1)/2, chúng ta có thể bảo
rằng nó khoảng chừng N2/2.

21
3.Phân tích một giải thuật lặp
Thí dụ 1 Cho một giải thuật tìm phần tử lớn nhất trong

một mảng 1 chiều.
procedure MAX(A, n, max)
/* Set max to the maximum of A(1:n) */
begin
integer i, n;
max := A[1];
for i:= 2 to n do
if A[i] > max then max := A[i]
end

Nếu C(n) là độ phức tạp tính toán của giải thuật được tính
theo thao tác so sánh (A[i]> max). Hãy xác định C(n)
trong trường hợp xấu nhất.
22
Phân tích một giải thuật lặp (tt.)
Thao tác căn bản của thủ tục MAX là thao tác so sánh.
Tổng số thao tác so sánh của thủ tục MAX chính là số lần
thân vòng lặp được thực thi:
(n-1).
Vậy độ phức tạp tính toán của giải thuật là O(n).
Đây là độ phức tạp của cả hai trường hợp trung bình và xấu
nhất.
Ghi chú: Nếu thao tác căn bản là phát biểu gán (max := A[i])
thì O(n) là độ phức tạp trong trường hợp xấu nhất.

23
Phân tích một giải thuật lặp (tt.)
Thí dụ 2: Giải thuật kiểm tra xem có phải mọi phần tử trong
mảng 1 chiều là khác biệt nhau.
function UniqueElements(A, n)
begin
for i:= 1 to n –1 do
for j:= i + 1 to n do
if A[i] = A[j] return false
return true
end
Trong trường hợp xấu nhất, mảng không hề có hai phần tử
nào bằng nhau hoặc mảng có hai phần tử cuối cùng bằng
nhau. Lúc đó một sự so sánh diễn ra mỗi khi thân vòng lặp
trong được thực hiện.
24
i=1
i=2
i = n -2
i = n -1

j chạy từ 2 cho đến n tức n – 1 lần so sánh
j chạy từ 3 cho đến n tức n – 2 lần so sánh
.
.
j chạy từ n-1 cho đến n tức 2 lần so sánh
j chạy từ n cho đến n tức 1 lần so sánh

Tóm lại, tổng số lần so sánh là:
1 + 2 + 3 + … + (n-2) + (n-1) = n(n-1)/2
Vậy độ phức tạp tính toán của giải thuật trong trường hợp xấu
nhất là O(n2).

25
Phân tích một giải thuật lặp (tt.)
Thí dụ 3 (So trùng dòng ký tự - string matching): Tìm tất cả
những sự xuất hiện của một khuôn mẫu (pattern) trong một
văn bản (text).
Văn bản là một mảng T[1..n] gồm n ký tự và kiểu mẫu là một
mảng P[1..m] gồm m ký tự.
Kiểu mẫu P xuất hiện với độ dịch chuyển (shift) s trong văn
bản T (tức là, P xuất hiện bắt đầu từ vị trí s+1 trong văn bản
T) nếu 1 ≤ s ≤ n – m và T[s+1..s+m] = P[1..m].

26
Một giải thuật đơn giản nhất để tìm tất cả những sự xuất
hiện của P trong T sẽ dùng một vòng lặp mà kiểm tra điều
kiện P[1..m] = T[s+1..s+m] với mỗi trị trong n – m + 1 trị có
thể có của s.
procedure NATIVE-STRING-MATCHING(T,P);
begin
n: = |T|; m: = |P|;
for s:= 0 to n – m do
if P[1..m] = T[s+1,..,s+m] then
print “Pattern occurs with shift” s;
end

27
procedure NATIVE-STRING-MATCHING(T,P);
begin
n: = |T|; m: = |P|;
for s:= 0 to n – m do
begin
exit:= false; k:=1;
while k ≤ m and not exit do
if P[k] ≠ T[s+k] then exit := true
else k:= k+1;
if not exit then
print “Pattern occurs with shift” s;
end
end
28
Giải thuật NAIVE STRING MATCHER có hai
vòng lặp lồng nhau:
- vòng lặp ngoài lặp n – m + 1 lần.
- vòng lặp trong lặp tối đa m lần.
Do đó, độ phức tạp của giải thuật trong trường hợp
xấu nhất là:
O((n – m + 1)m).

29
4. Phân tích giải thuật đệ quy: các công thức
truy hồi căn bản
Có một phương pháp căn bản để phân tích độ phức tạp của
các giải thuật đệ quy.
Tính chất của một giải thuật đệ quy ⇒ thời gian chạy đối
với bộ dữ liệu nhập kích thước N tùy thuộc vào thời gian
chạy của những bộ dữ liệu nhập nhỏ hơn.
Tính chất này được mô tả bằng một công thức toán học được
gọi là hệ thức truy hồi (recurrence relation).
Để dẫn xuất ra độ phức tạp của một giải thuật đệ quy, chúng
ta phải giải hệ thức truy hồi này.
30
Phân tích giải thuật đệ quy bằng phương pháp lặp
Công thức 1: Một chương trình đệ quy mà lặp qua bộ dữ liệu
nhập để loại đi một phần tử. Hệ thức truy hồi của nó như sau:
CN = CN-1 + N
N≥ 2
C1 = 1
Cách suy ra độ phức
tạp bằng phương
pháp lặp:

CN = CN-1 + N
= CN-2 + (N – 1) + N
= CN-3 + (N – 2) + (N – 1) + N
.
.
.
= C1 + 2 + … + (N – 2) + (N – 1) + N
= 1 + 2 + … + (N – 1) + N
= N(N-1)/2
= N2/2
31
Thí dụ 2
Công thức 2: Một chương trình đệ quy mà tách đôi bộ dữ
liệu nhập trong một bước làm việc. Hệ thức truy hồi là:
CN = CN/2 + 1
N≥ 2
C1 = 0
Cách suy ra độ phức tạp:
Giả sử N = 2n
C(2n) = C(2n-1) + 1
= C(2n-2 )+ 1 + 1
= C(2n-3 )+ 3
.

..

= C(20 ) + n
= C1 + n = n
CN = n = lgN
CN ≈ lgN
32
Thí dụ 3
Công thức 3. Một chương trình đệ quy mà tách đôi bộ dữ liệu
nhập trong một bước làm việc nhưng phải xem xét từng phần tử
trong dữ liệu nhập. Hệ thức truy hồi là
CN = 2CN/2 + N
for N ≥ 2
C1 = 0
Cách suy ra độ phức tạp:

Assume
N = 2n
C(2n) = 2C(2n-1) + 2n
C(2n)/2n = C(2n-1)/ 2n-1 + 1
= C(2n-2)/ 2n-2 + 1 +1
.
.
=n
⇒ C(2n ) = n.2n
CN = NlgN
CN ≈ NlgN
33
Thí dụ 4
Công thức 4. Một chương trình đệ quy mà tách đôi dữ liệu nhập
thành hai nửa trong một bước làm việc . Hệ thức truy hồi là

C(N) = 2C(N/2) + 1

for N ≥ 2
C(1) = 0

Cách suy ra độ phức tạp:

Giả sử N = 2n.
C(2n) = 2C(2n-1) + 1
C(2n)/ 2n = 2C(2n-1)/ 2n + 1/2n
=C(2n-1)/ 2n-1 + 1/2n
=[C(2n-2)/ 2n-2 + 1/2n-1 ]+ 1/2n
.
.
.
=C(2n-i)/ 2n -i + 1/2n – i +1 + … + 1/2n
34
Cuối cùng, khi i = n -1, ta được:
C(2n)/2n = C(2)/2 + ¼ + 1/8 + …+ 1/2n
= ½ + ¼ + ….+1/2n
≈1
⇒ C(2n) = 2n
C(N) ≈ N
Một số hệ thức truy hồi có vẻ giống nhau nhưng mức độ
khó khi giải chúng để tìm độ phức tạp thì có thể rất
khác nhau.
35
Nguyên tắc phân tích độ phức tạp trung bình
Để tính độ phức tạp trung bình của một giải thuật A, ta phải làm
một số bước:
1. Quyết định một không gian lấy mẫu (sampling space) để diễn tả
những dữ liệu đầu vào (kích thước n) có thể có. Giả sử không
gian lấy mẫu là S = { I1, I2,…, Ik}
2. Ta phải định nghĩa một phân bố xác xuất p trên S mà biểu diễn
mức độ chắc chắn mà dữ liệu đầu vào đó có thể xảy ra.
3. Ta phải tính tổng số tác vụ căn bản được giải thuật A thực hiện
để xử lý một trường hợp mẫu. Ta dùng v(Ik) ký hiệu tổng số tác
vụ được thực hiện bởi A khi dữ liệu đầu vào thuộc trường hợp
Ik.

36
Phân tích độ phức tạp trung bình (tt.)
4. Ta tính trị trung bình của số tác vụ căn bản bằng cách tính kỳ
vọng sau:
Cavg(n) = v(I1).p(I1) + v(I2).p(I2) + …+v(Ik).p(Ik).

Thí dụ: Cho một mảng A có n phần tử. Tìm kiếm vị trí mà trị
X xuất hiện trong mảng A.
begin
i := 1;
while i <= n and X <> A[i] do
i := i+1;
end
37
Thí dụ: Tìm kiếm tuần tự
Giả sử X có xuất hiện trong mảng và giả định rằng xác xuất
để nó xuất hiện tại một vị trí bất kỳ trong mảng là đều nhau
và xác xuất để mỗi trường hợp xảy ra là p = 1/n.
Số lần so sánh để tìm thấy X nếu nó xuất hiện tại vị trí 1 là 1
Số lần so sánh để tìm thấy X nếu nó xuất hiện tại vị trí 2 là 2
…
Số lần so sánh để tìm thấy X nếu nó xuất hiện tại vị trí n là n
Tổng số tác vụ so sánh trung bình là:
C(n) = 1.(1/n) + 2.(1/n) + …+ N.(1/n)
= (1 + 2 + …+ n).(1/n)
= (1+2+…+n)/n = n(n+1)/2.(1/n) = (n+1)/2.
38
Vài chuỗi số thông dụng
Có một vài chuỗi số thông dụng trong việc phân tích độ
phức tạp giải thuật.
• Chuỗi số cọng
S1 = 1 + 2 + 3 + … + n
S1 = n(n+1)/2 ≈ n2/2
S2 = 1 + 22 + 32 + …+ n2
S2 = n(n+1)(2n+1)/6 ≈ n3/3
• Chuỗi số nhân
S = 1 + a + a 2 + a3 + … + a n
S = (an+1 -1)/(a-1)
If 0< a < 1, then
S ≤ 1/(1-a)
Và khi n → ∞, S tiến về 1/(1-a).

39
Vài chuỗi số thông dụng (tt.)
• Tổng chuỗi số điều hoà (Harmonic sum)
Hn = 1 + ½ + 1/3 + ¼ +…+1/n
Hn = loge n + γ
γ ≈ 0.577215665 được gọi là hằng số Euler.
Một chuỗi số khác cũng rất thông dụng khi phân tích các
thao tác làm việc trên cây nhị phân:
1 + 2 + 4 +…+ 2m-1 = 2m -1
40
5. Chiến lược thiết kế giải thuật




Một chiến lược thiết kế giải thuật (Algorithm Design
Strategy) là một cách tiếp cận tổng quát để giải
quyết vấn đề bằng giải thuật mà có thể áp dụng cho
nhiều bài toán khác nhau trong nhiều lãnh vực khác
nhau.
Việc học những chiến lược thiết kế này hết sức
quan trọng vì những lý do sau:




Chúng cung cấp những chỉ dẫn để thiết kế giải thuật cho những
bài toán mới.
Giải thuật đóng một vai trò quan trọng trong khoa học máy tính.
Dựa vào các chiến lược thiết kế giải thuật, ta có thể phân loại
giải thuật dựa vào ý tưởng thiết kế nền tảng của chúng.

41
Chiến lược thiết kế giải thuật (tt.)








“Chia-để-trị” là một ví dụ điển hình của một
chiến lược thiết kế giải thuật.
Ngoài ra còn có nhiều chiến lược thiết kế giải
thuật nổi tiếng khác
Tập hợp những chiến lược thiết kế giải thuật tạo
thành một bộ công cụ rất mạnh có sẵn giúp
chúng ta nghiên cứu và xây dựng giải thuật.
Một chiến lược thiết kế giải thuật sẽ được đề
cập ngay trong chương này là chiến lược thiết
kế kiểu “trực tiếp” (bruce-force)
42
Chiến lược thiết kế giải thuật “trực tiếp”
(bruce-force approach)










Thiết kế giải thuật theo lối “trực tiếp” là thiết kế giải
thuật một cách đơn giản, chân phương dựa trực tiếp
vào sự phát biểu bài toán và những định nghĩa về
các khái niệm liên quan.
“Just do it” là một cách khác để mô tả chiến lược
thiết kế này.
Giải thuật thiết kế theo lối “trực tiếp” là loại giải
thuật dễ hiểu nhất và dễ hiện thực nhất.
Tìm kiếm tuần tự (sequential search) là thí dụ điển
hình của kiểu thiết kế bruce-force.
Selection sort, NAÏVE-STRING-MATCHER (so trùng
dòng ký tự) là những thí dụ khác của lối thiết kế
bruce-force.
43


Mặc dù đơn sơ và không tinh xảo, nhưng những
giải thuật thuộc loại bruce-force vẫn không nên
xem thường, hoặc bỏ qua vì những lý do sau:








Giải thuật bruce-force thường có khả năng áp dụng
rộng rãi.
Với một số bài toán quan trọng, những giải thuật
bruce-force có những giá trị thực tế nhất định.
Những giải thuật tinh xảo thường khó hiểu và khó hiện
thực hơn những giải thuật bruce-force.
Giải thuật bruce-force có ích trong việc giảng dạy,
dùng làm thước đo để đánh giá những cách khác hữu
hiệu hơn để giải cùng một vấn đề.

44

More Related Content

What's hot

Giáo trình Phân tích và thiết kế giải thuật - CHAP 3
Giáo trình Phân tích và thiết kế giải thuật - CHAP 3Giáo trình Phân tích và thiết kế giải thuật - CHAP 3
Giáo trình Phân tích và thiết kế giải thuật - CHAP 3Nguyễn Công Hoàng
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 4
Giáo trình Phân tích và thiết kế giải thuật - CHAP 4Giáo trình Phân tích và thiết kế giải thuật - CHAP 4
Giáo trình Phân tích và thiết kế giải thuật - CHAP 4Nguyễn Công Hoàng
 
Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Do Ngoc Tuan
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2Nguyễn Công Hoàng
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 6
Giáo trình Phân tích và thiết kế giải thuật - CHAP 6Giáo trình Phân tích và thiết kế giải thuật - CHAP 6
Giáo trình Phân tích và thiết kế giải thuật - CHAP 6Nguyễn Công Hoàng
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 5
Giáo trình Phân tích và thiết kế giải thuật - CHAP 5Giáo trình Phân tích và thiết kế giải thuật - CHAP 5
Giáo trình Phân tích và thiết kế giải thuật - CHAP 5Nguyễn Công Hoàng
 
Quy hoạch động
Quy hoạch độngQuy hoạch động
Quy hoạch độnghana_dt
 
Chương 9 quy hoachdong
Chương 9 quy hoachdong Chương 9 quy hoachdong
Chương 9 quy hoachdong hoangnguyentien
 
Tính toán khoa học - Chương 8: Quy hoạch tuyến tính
Tính toán khoa học - Chương 8: Quy hoạch tuyến tínhTính toán khoa học - Chương 8: Quy hoạch tuyến tính
Tính toán khoa học - Chương 8: Quy hoạch tuyến tínhChien Dang
 
Phương pháp nhánh cận
Phương pháp nhánh cậnPhương pháp nhánh cận
Phương pháp nhánh cậnDiên Vĩ
 
Math educare] toan a1-giai tich ham mot bien_giai tich ham nhieu bien_phuong ...
Math educare] toan a1-giai tich ham mot bien_giai tich ham nhieu bien_phuong ...Math educare] toan a1-giai tich ham mot bien_giai tich ham nhieu bien_phuong ...
Math educare] toan a1-giai tich ham mot bien_giai tich ham nhieu bien_phuong ...Nguyen Vietnam
 

What's hot (20)

Giáo trình Phân tích và thiết kế giải thuật - CHAP 3
Giáo trình Phân tích và thiết kế giải thuật - CHAP 3Giáo trình Phân tích và thiết kế giải thuật - CHAP 3
Giáo trình Phân tích và thiết kế giải thuật - CHAP 3
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 4
Giáo trình Phân tích và thiết kế giải thuật - CHAP 4Giáo trình Phân tích và thiết kế giải thuật - CHAP 4
Giáo trình Phân tích và thiết kế giải thuật - CHAP 4
 
Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4
 
Timkiem&sapxep
Timkiem&sapxepTimkiem&sapxep
Timkiem&sapxep
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
Giáo trình Phân tích và thiết kế giải thuật - CHAP 2
 
Chuong 3
Chuong 3Chuong 3
Chuong 3
 
Chuong 2
Chuong 2Chuong 2
Chuong 2
 
Đệ Quy, Quay Lui, Nhánh Cận
Đệ Quy, Quay Lui, Nhánh CậnĐệ Quy, Quay Lui, Nhánh Cận
Đệ Quy, Quay Lui, Nhánh Cận
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 6
Giáo trình Phân tích và thiết kế giải thuật - CHAP 6Giáo trình Phân tích và thiết kế giải thuật - CHAP 6
Giáo trình Phân tích và thiết kế giải thuật - CHAP 6
 
Giáo trình Phân tích và thiết kế giải thuật - CHAP 5
Giáo trình Phân tích và thiết kế giải thuật - CHAP 5Giáo trình Phân tích và thiết kế giải thuật - CHAP 5
Giáo trình Phân tích và thiết kế giải thuật - CHAP 5
 
Thuat Toan 2
Thuat Toan 2Thuat Toan 2
Thuat Toan 2
 
Ch08
Ch08Ch08
Ch08
 
Quy hoạch động
Quy hoạch độngQuy hoạch động
Quy hoạch động
 
Thuat Toan
Thuat ToanThuat Toan
Thuat Toan
 
Chương 9 quy hoachdong
Chương 9 quy hoachdong Chương 9 quy hoachdong
Chương 9 quy hoachdong
 
Phương pháp tham lam
Phương pháp tham lamPhương pháp tham lam
Phương pháp tham lam
 
Tính toán khoa học - Chương 8: Quy hoạch tuyến tính
Tính toán khoa học - Chương 8: Quy hoạch tuyến tínhTính toán khoa học - Chương 8: Quy hoạch tuyến tính
Tính toán khoa học - Chương 8: Quy hoạch tuyến tính
 
Đề tài: Xây dựng bài thí nghiệm xử lý tín hiệu số trên Matlab
Đề tài: Xây dựng bài thí nghiệm xử lý tín hiệu số trên MatlabĐề tài: Xây dựng bài thí nghiệm xử lý tín hiệu số trên Matlab
Đề tài: Xây dựng bài thí nghiệm xử lý tín hiệu số trên Matlab
 
Phương pháp nhánh cận
Phương pháp nhánh cậnPhương pháp nhánh cận
Phương pháp nhánh cận
 
Math educare] toan a1-giai tich ham mot bien_giai tich ham nhieu bien_phuong ...
Math educare] toan a1-giai tich ham mot bien_giai tich ham nhieu bien_phuong ...Math educare] toan a1-giai tich ham mot bien_giai tich ham nhieu bien_phuong ...
Math educare] toan a1-giai tich ham mot bien_giai tich ham nhieu bien_phuong ...
 

Viewers also liked

Chuong 2 phan tich cac thuat toan sap xep va tim kiem
Chuong 2  phan tich cac thuat toan sap xep va tim kiemChuong 2  phan tich cac thuat toan sap xep va tim kiem
Chuong 2 phan tich cac thuat toan sap xep va tim kiemgaconne1985
 
Bai giang-ctdl
Bai giang-ctdlBai giang-ctdl
Bai giang-ctdlPhong Vân
 
Chuong 4 tin 11
Chuong 4 tin 11Chuong 4 tin 11
Chuong 4 tin 11Sunkute
 
Kiểu mảng_Tìm kiếm tuần tự
Kiểu mảng_Tìm kiếm tuần tựKiểu mảng_Tìm kiếm tuần tự
Kiểu mảng_Tìm kiếm tuần tựVõ Tâm Long
 
Bai toan va thuat toan
Bai toan va thuat toanBai toan va thuat toan
Bai toan va thuat toanHữu Duy Duy
 
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPTBài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPTMasterCode.vn
 
Baigiang - bai4. Bài Toán Và Thuật Toán
Baigiang - bai4. Bài Toán Và Thuật ToánBaigiang - bai4. Bài Toán Và Thuật Toán
Baigiang - bai4. Bài Toán Và Thuật ToánVan Vo
 

Viewers also liked (8)

Book
BookBook
Book
 
Chuong 2 phan tich cac thuat toan sap xep va tim kiem
Chuong 2  phan tich cac thuat toan sap xep va tim kiemChuong 2  phan tich cac thuat toan sap xep va tim kiem
Chuong 2 phan tich cac thuat toan sap xep va tim kiem
 
Bai giang-ctdl
Bai giang-ctdlBai giang-ctdl
Bai giang-ctdl
 
Chuong 4 tin 11
Chuong 4 tin 11Chuong 4 tin 11
Chuong 4 tin 11
 
Kiểu mảng_Tìm kiếm tuần tự
Kiểu mảng_Tìm kiếm tuần tựKiểu mảng_Tìm kiếm tuần tự
Kiểu mảng_Tìm kiếm tuần tự
 
Bai toan va thuat toan
Bai toan va thuat toanBai toan va thuat toan
Bai toan va thuat toan
 
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPTBài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
 
Baigiang - bai4. Bài Toán Và Thuật Toán
Baigiang - bai4. Bài Toán Và Thuật ToánBaigiang - bai4. Bài Toán Và Thuật Toán
Baigiang - bai4. Bài Toán Và Thuật Toán
 

Similar to Chap1 new (tran dai's conflicted copy 2013 04-02)

Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Do Ngoc Tuan
 
BoiDuongHSGTin_DuyetToanBoVaCacPhuongPhapCaiTien.pptx
BoiDuongHSGTin_DuyetToanBoVaCacPhuongPhapCaiTien.pptxBoiDuongHSGTin_DuyetToanBoVaCacPhuongPhapCaiTien.pptx
BoiDuongHSGTin_DuyetToanBoVaCacPhuongPhapCaiTien.pptxHongNgcCnh2
 
Tuan1_GioiThieu.pdf
Tuan1_GioiThieu.pdfTuan1_GioiThieu.pdf
Tuan1_GioiThieu.pdfNguynVnTun74
 
CSLTNNL01.pdf
CSLTNNL01.pdfCSLTNNL01.pdf
CSLTNNL01.pdfThAnhonc
 
Bai3 timkiem sapxep
Bai3 timkiem sapxepBai3 timkiem sapxep
Bai3 timkiem sapxepHồ Lợi
 
Bai3 timkiemsapxep
Bai3 timkiemsapxepBai3 timkiemsapxep
Bai3 timkiemsapxepnhà tôi
 
Chuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfChuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfHngTrn365275
 
Chuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfChuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfnguyenkaka2
 
304686218-Chia-đoi-tập-vdgdhợp-2.docx
304686218-Chia-đoi-tập-vdgdhợp-2.docx304686218-Chia-đoi-tập-vdgdhợp-2.docx
304686218-Chia-đoi-tập-vdgdhợp-2.docxNguynAnThch
 
Ctdl va gt_hồ_sĩ_đàm
Ctdl va gt_hồ_sĩ_đàmCtdl va gt_hồ_sĩ_đàm
Ctdl va gt_hồ_sĩ_đàmvinhduchanh
 

Similar to Chap1 new (tran dai's conflicted copy 2013 04-02) (20)

Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4Ctdl+va+gt chuong+1 4
Ctdl+va+gt chuong+1 4
 
Ch08
Ch08Ch08
Ch08
 
Gt de quy_2
Gt de quy_2Gt de quy_2
Gt de quy_2
 
Gt de quy
Gt de quyGt de quy
Gt de quy
 
BoiDuongHSGTin_DuyetToanBoVaCacPhuongPhapCaiTien.pptx
BoiDuongHSGTin_DuyetToanBoVaCacPhuongPhapCaiTien.pptxBoiDuongHSGTin_DuyetToanBoVaCacPhuongPhapCaiTien.pptx
BoiDuongHSGTin_DuyetToanBoVaCacPhuongPhapCaiTien.pptx
 
Quy hoạch động
Quy hoạch độngQuy hoạch động
Quy hoạch động
 
Quy Hoach Dong
Quy Hoach DongQuy Hoach Dong
Quy Hoach Dong
 
Hoán vị lặp tổ hợp
Hoán vị lặp tổ hợpHoán vị lặp tổ hợp
Hoán vị lặp tổ hợp
 
Tuan1_GioiThieu.pdf
Tuan1_GioiThieu.pdfTuan1_GioiThieu.pdf
Tuan1_GioiThieu.pdf
 
CSLTNNL01.pdf
CSLTNNL01.pdfCSLTNNL01.pdf
CSLTNNL01.pdf
 
Bai3 timkiem sapxep
Bai3 timkiem sapxepBai3 timkiem sapxep
Bai3 timkiem sapxep
 
Bai3 timkiemsapxep
Bai3 timkiemsapxepBai3 timkiemsapxep
Bai3 timkiemsapxep
 
pttt 01
pttt 01pttt 01
pttt 01
 
MATMAT- Chuong1
MATMAT- Chuong1MATMAT- Chuong1
MATMAT- Chuong1
 
Cơ sở thuật toán
Cơ sở thuật toánCơ sở thuật toán
Cơ sở thuật toán
 
Chuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfChuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdf
 
Chuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdfChuong 1 Matlab co ban.pdf
Chuong 1 Matlab co ban.pdf
 
Olympiad help
Olympiad helpOlympiad help
Olympiad help
 
304686218-Chia-đoi-tập-vdgdhợp-2.docx
304686218-Chia-đoi-tập-vdgdhợp-2.docx304686218-Chia-đoi-tập-vdgdhợp-2.docx
304686218-Chia-đoi-tập-vdgdhợp-2.docx
 
Ctdl va gt_hồ_sĩ_đàm
Ctdl va gt_hồ_sĩ_đàmCtdl va gt_hồ_sĩ_đàm
Ctdl va gt_hồ_sĩ_đàm
 

More from Loc Tran

đạI học quốc gia thành phố hồ chí minh
đạI học quốc gia thành phố hồ chí minhđạI học quốc gia thành phố hồ chí minh
đạI học quốc gia thành phố hồ chí minhLoc Tran
 
Chap4 new (tran dai's conflicted copy 2013 04-02)
Chap4 new (tran dai's conflicted copy 2013 04-02)Chap4 new (tran dai's conflicted copy 2013 04-02)
Chap4 new (tran dai's conflicted copy 2013 04-02)Loc Tran
 
Chap2 new (tran dai's conflicted copy 2013 04-02)
Chap2 new (tran dai's conflicted copy 2013 04-02)Chap2 new (tran dai's conflicted copy 2013 04-02)
Chap2 new (tran dai's conflicted copy 2013 04-02)Loc Tran
 
Appendix b 2
Appendix b 2Appendix b 2
Appendix b 2Loc Tran
 
Appendix a 2
Appendix a 2Appendix a 2
Appendix a 2Loc Tran
 
Chap8 part ii
Chap8 part iiChap8 part ii
Chap8 part iiLoc Tran
 

More from Loc Tran (13)

đạI học quốc gia thành phố hồ chí minh
đạI học quốc gia thành phố hồ chí minhđạI học quốc gia thành phố hồ chí minh
đạI học quốc gia thành phố hồ chí minh
 
Chap8 new
Chap8 newChap8 new
Chap8 new
 
Chap7 new
Chap7 newChap7 new
Chap7 new
 
Chap6 new
Chap6 newChap6 new
Chap6 new
 
Chap5 new
Chap5 newChap5 new
Chap5 new
 
Chap4 new
Chap4 newChap4 new
Chap4 new
 
Chap4 new (tran dai's conflicted copy 2013 04-02)
Chap4 new (tran dai's conflicted copy 2013 04-02)Chap4 new (tran dai's conflicted copy 2013 04-02)
Chap4 new (tran dai's conflicted copy 2013 04-02)
 
Chap3 new
Chap3 newChap3 new
Chap3 new
 
Chap2 new
Chap2 newChap2 new
Chap2 new
 
Chap2 new (tran dai's conflicted copy 2013 04-02)
Chap2 new (tran dai's conflicted copy 2013 04-02)Chap2 new (tran dai's conflicted copy 2013 04-02)
Chap2 new (tran dai's conflicted copy 2013 04-02)
 
Appendix b 2
Appendix b 2Appendix b 2
Appendix b 2
 
Appendix a 2
Appendix a 2Appendix a 2
Appendix a 2
 
Chap8 part ii
Chap8 part iiChap8 part ii
Chap8 part ii
 

Recently uploaded

30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
cac-cau-noi-tthcm.pdf-cac-cau-noi-tthcm-
cac-cau-noi-tthcm.pdf-cac-cau-noi-tthcm-cac-cau-noi-tthcm.pdf-cac-cau-noi-tthcm-
cac-cau-noi-tthcm.pdf-cac-cau-noi-tthcm-KhnhHuyn546843
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...Nguyen Thanh Tu Collection
 
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIGIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIĐiện Lạnh Bách Khoa Hà Nội
 
Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...
Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...
Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...hoangtuansinh1
 
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfChuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfhoangtuansinh1
 
Kiểm tra cuối học kì 1 sinh học 12 đề tham khảo
Kiểm tra cuối học kì 1 sinh học 12 đề tham khảoKiểm tra cuối học kì 1 sinh học 12 đề tham khảo
Kiểm tra cuối học kì 1 sinh học 12 đề tham khảohoanhv296
 
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfCampbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfTrnHoa46
 
powerpoint mẫu họp phụ huynh cuối kì 2 học sinh lớp 7 bgs
powerpoint mẫu họp phụ huynh cuối kì 2 học sinh lớp 7 bgspowerpoint mẫu họp phụ huynh cuối kì 2 học sinh lớp 7 bgs
powerpoint mẫu họp phụ huynh cuối kì 2 học sinh lớp 7 bgsNmmeomeo
 
CD21 Exercise 2.1 KEY.docx tieng anh cho
CD21 Exercise 2.1 KEY.docx tieng anh choCD21 Exercise 2.1 KEY.docx tieng anh cho
CD21 Exercise 2.1 KEY.docx tieng anh chonamc250
 
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdf
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdfBỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdf
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdfNguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...Nguyen Thanh Tu Collection
 
kinh tế chính trị mác lênin chương hai và hàng hoá và sxxhh
kinh tế chính trị mác lênin chương hai và hàng hoá và sxxhhkinh tế chính trị mác lênin chương hai và hàng hoá và sxxhh
kinh tế chính trị mác lênin chương hai và hàng hoá và sxxhhdtlnnm
 
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
PHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢI
PHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢIPHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢI
PHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢImyvh40253
 
Nhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptx
Nhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptxNhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptx
Nhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptxhoangvubaongoc112011
 
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoáCác điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoámyvh40253
 

Recently uploaded (20)

30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
cac-cau-noi-tthcm.pdf-cac-cau-noi-tthcm-
cac-cau-noi-tthcm.pdf-cac-cau-noi-tthcm-cac-cau-noi-tthcm.pdf-cac-cau-noi-tthcm-
cac-cau-noi-tthcm.pdf-cac-cau-noi-tthcm-
 
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 7 GLOBAL SUCCESS (2 CỘ...
 
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIGIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
 
Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...
Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...
Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...
 
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdfChuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
Chuong trinh dao tao Su pham Khoa hoc tu nhien, ma nganh - 7140247.pdf
 
Kiểm tra cuối học kì 1 sinh học 12 đề tham khảo
Kiểm tra cuối học kì 1 sinh học 12 đề tham khảoKiểm tra cuối học kì 1 sinh học 12 đề tham khảo
Kiểm tra cuối học kì 1 sinh học 12 đề tham khảo
 
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdfCampbell _2011_ - Sinh học - Tế bào - Ref.pdf
Campbell _2011_ - Sinh học - Tế bào - Ref.pdf
 
powerpoint mẫu họp phụ huynh cuối kì 2 học sinh lớp 7 bgs
powerpoint mẫu họp phụ huynh cuối kì 2 học sinh lớp 7 bgspowerpoint mẫu họp phụ huynh cuối kì 2 học sinh lớp 7 bgs
powerpoint mẫu họp phụ huynh cuối kì 2 học sinh lớp 7 bgs
 
CD21 Exercise 2.1 KEY.docx tieng anh cho
CD21 Exercise 2.1 KEY.docx tieng anh choCD21 Exercise 2.1 KEY.docx tieng anh cho
CD21 Exercise 2.1 KEY.docx tieng anh cho
 
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdf
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdfBỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdf
BỘ LUYỆN NGHE VÀO 10 TIẾNG ANH DẠNG TRẮC NGHIỆM 4 CÂU TRẢ LỜI - CÓ FILE NGHE.pdf
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...
TÀI LIỆU BỒI DƯỠNG HỌC SINH GIỎI KỸ NĂNG VIẾT ĐOẠN VĂN NGHỊ LUẬN XÃ HỘI 200 C...
 
kinh tế chính trị mác lênin chương hai và hàng hoá và sxxhh
kinh tế chính trị mác lênin chương hai và hàng hoá và sxxhhkinh tế chính trị mác lênin chương hai và hàng hoá và sxxhh
kinh tế chính trị mác lênin chương hai và hàng hoá và sxxhh
 
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
PHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢI
PHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢIPHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢI
PHƯƠNG THỨC VẬN TẢI ĐƯỜNG SẮT TRONG VẬN TẢI
 
Nhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptx
Nhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptxNhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptx
Nhiễm khuẩn tiêu hóa-Tiêu chảy do vi khuẩn.pptx
 
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoáCác điều kiện bảo hiểm trong bảo hiểm hàng hoá
Các điều kiện bảo hiểm trong bảo hiểm hàng hoá
 

Chap1 new (tran dai's conflicted copy 2013 04-02)

  • 1. Môn học: Phân tích và Thiết kế Giải thuật Số tín chỉ: 3 BÀI GIẢNG ĐIỆN TỬ Biên soạn bởi: PGS.TS. Dương Tuấn Anh Khoa Khoa Học và Kỹ Thuật Máy Tính Trường Đ.H. Bách Khoa Đại học Quốc Gia Tp Hồ Chí Minh 1
  • 2. Tài liệu tham khảo [1] Cormen, T. H., Leiserson, C. E, and Rivest, R. L., Introduction to Algorithms, The MIT Press, 1997. [2] Levitin, A., Introduction to the Design and Analysis of Algorithms, Addison Wesley, 2003 [3] Sedgewick, R., Algorithms in C++, AddisonWesley, 1998 [4] Weiss, M.A., Data Structures and Algorithm Analysis in C, TheBenjamin/Cummings Publishing, 1993 2
  • 3. Đề cương Môn học 1. Các khái niệm căn bản 2. Chiến lược chia-để-trị 3. Chiến lược giảm-để-trị 4. Chiến lược biến thể-để-trị 5. Qui hoạch động và giải thuật tham lam 6. Giải thuật quay lui 7. Vấn đề NP-đầy đủ 8. Giải thuật xấp xỉ 3
  • 4. Nội dung 1. 2. 3. 4. 5. 6. Đệ quy và hệ thức truy hồi Phân tích độ phức tạp giải thuật Phân tích giải thuật lặp Phân tích giải thuật đệ quy Chiến lược thiết kế giải thuật Thiết kế giải thuật kiểu “trực tiếp” (bruce-force) 5
  • 5. 1. Đệ quy Hệ thức truy hồi Thí dụ 1: Hàm tính giai thừa N! = N.(N-1)! với N ≥ 1 0! = 1 Những định nghĩa hàm đệ quy mà chứa những đối số nguyên được gọi là những hệ thức truy hồi (recurrence relation). function factorial (N: integer): integer; begin if N = 0 then factorial: = 1 else factorial: = N*factorial (N-1); end; 6
  • 6. Hệ thức truy hồi Thí dụ 2: Số Fibonacci Hệ thức truy hồi: FN = FN-1 + FN-2 for N ≥ 2 F0 = F1 = 1 1, 1, 2, 3, 5, 8, 13, 21, … function fibonacci (N: integer): integer; begin if N <= 1 then fibonacci: = 1 else fibonacci: = fibonacci(N-1) + fibonacci(N-2); end; 7
  • 7. Số Fibonacci – Cây đệ quy computed Có nhiều tính toán dư thừa khi tính số Fibonacci bằng hàm đệ quy. 8
  • 8. Một cách khác: Ta có thể dùng một mảng để chứa những trị số đi trước trong khi tính hàm fibonacci. Ta có một giải thuật không đệ quy. procedure fibonacci; const max = 25; var i: integer; F: array [0..max] of integer; begin F[0]: = 1; F[1]: = 1; for i: = 2 to max do F[i]: = F[i-1] + F[i-2] end; Giải thuật không đệ quy thường làm việc hữu hiệu và dễ kiểm soát hơn 1 giải thuật đệ quy. Nhờ vào sử dụng stack, ta có thể chuyển đổi một giải thuật đệ quy thành một giải thuật lặp tương đương. 9
  • 9. 2. Phân tích độ phức tạp giải thuật Với phần lớn các bài toán, thường có nhiều giải thuật khác nhau để giải một bài toán. Làm cách nào để chọn giải thuật tốt nhất để giải một bài toán? Làm cách nào để so sánh các giải thuật cùng giải được một bài toán? Phân tích độ phức tạp của một giải thuật: dự đoán các tài nguyên mà giải thuật đó cần. Tài nguyên: Chỗ bộ nhớ Thời gian tính toán Thời gian tính toán là tài nguyên quan trọng nhất. 10
  • 10. Hai cách phân tích Thời gian tính toán của một giải thuật thường là một hàm của kích thước dữ liệu nhập. Chúng ta quan tâm đến: • Trường hợp trung bình (average case): thời gian tính toán mà một giải thuật cần đối với một “dữ liệu nhâp thông thường” (typical input data). • Trường hợp xấu nhất (worst case): thời gian tính toán mà một giải thuật cần đối với một “dữ liệu nhâp xấu nhất” 11
  • 11. Khung thức của sự phân tích ♦ Bước 1: Đặc trưng hóa dữ liệu nhập và quyết định kiểu phân tích thích hợp. Thông thường, ta tập trung vào việc - chứng minh rằng thời gian tính toán luôn nhỏ hơn một “cận trên” (upper bound), hay - dẫn xuất ra thời gian chạy trung bình đối với một dữ liệu nhập ngẫu nhiên. ♦ Bước 2: nhận dạng thao tác trừu tượng (abstract operation) mà giải thuật dựa vào đó làm việc. Thí dụ: thao tác so sánh trong giải thuật sắp thứ tự. Tổng số thao tác trừu tượng thường tùy thuộc vào một vài đại lượng. ♦ Bước 3: thực hiện phân tích toán học để tìm ra các giá trị trung bình và giá trị xấu nhất của các đại lượng quan trọng. 12
  • 12. Hai trường hợp phân tích • Thường thì không khó để tìm ra cận trên của thời gian tính toán của một giải thuật. • Nhưng phân tích trường hợp trung bình thường đòi hỏi một sự phân tích toán học cầu kỳ, phức tạp. • Về nguyên tắc, một giải thuật có thể được phân tích đến một mức độ chính xác rất chi li. Nhưng trong thực tế, chúng ta thường chỉ tính ước lượng (estimating) mà thôi • Tóm lại, chúng ta tìm kiếm một ước lượng thô về thời gian tính toán của một giải thuật (nhằm mục đích phân lớp độ phức tạp). 13
  • 13. Phân lớp độ phức tạp Hầu hết các giải thuật thường có một thông số chính, N, số mẩu dữ liệu nhập mà được xử lý. Thí dụ: Kích thước của mảng (array) được sắp thứ tự hoặc tìm kiếm. Số nút của một đồ thị. Giải thuật có thể có thời gian tính toán tỉ lệ với 1. Nếu tác vụ chính được thực thi một vài lần. ⇒ thời gian tính toán là hằng số. log2N ≡ lgN 2. lgN (logarithmic) Giải thuật tăng chậm hơn sự tăng của N. 14
  • 14. 3. N (linear) 4. NlgN 5. N2 (quadratic) khi giải thuật là vòng lặp lồng hai 6. N3 (cubic) khi giải thuật là vòng lặp lồng ba 7. 2N một số giải thuật có thời gian chạy luỹ thừa. Một vài giải thuật khác có thể có thời gian chạy N3/2, N1/2 , (lgN)2 … 15
  • 15. 16
  • 16. Độ phức tạp tính toán Chúng ta tập trung vào phân tích trường hợp xấu nhất. Khi phân tích, bỏ qua những thừa số hằng số để xác định sự phụ thuộc hàm của thời gian tính toán đối với kích thước dữ liệu nhập. Thí dụ: Thời gian tính toán của sắp thứ tự bằng phương pháp trộn (mergesort ) là tỉ lệ với NlgN. Khái niệm “tỉ lệ với” (proportional to) Công cụ toán học để làm chính xác khái niệm này là ký hiệu – O (O-notation). Định nghĩa: Một hàm g(N) được gọi là O(f(N)) nếu tồn tại hai hằng số c0 và N0 sao cho g(N) nhỏ hơn c0f(N) với mọi N > N0. 17
  • 17. Ký hiệu O Ký hiệu O là một cách hữu ích để phát biểu cận trên về thời gian tính toán mà độc lập đối với đặc tính dữ liệu nhập và chi tiết hiện thực hóa. Chúng ta cố gắng tìm cả “cận trên” lẫn “cận dưới” của thời gian tính toán trong phân tích trường hợp xấu nhất. Nhưng cận dưới (lower-bound ) thì thường khó xác định. 18
  • 18. Phân tích trường hợp trung bình Với kiểu phân tích này, ta phải - đặc trưng hóa dữ liệu nhập của giải thuật - tính giá trị trung bình của số lần một phát biểu được thực thi. - tính thời gian tính toán trung bình của toàn giải thuật. Nhưng thường thì khó - xác định thời gian chạy của mỗi phát biểu. - đặc trưng hóa chính xác dữ liệu nhập trong thực tế. 19
  • 19. Các kết quả tiệm cận và xấp xỉ Kết quả của một sự phân tích toán học thường mang tính xấp xỉ (approximate): nó có thể là một biểu thức gồm một chuỗi những số hạng giảm dần tầm quan trọng. Ta thường để ý đến các số hạng dẫn đầu trong biểu thức toán học. Thí dụ: Thời gian tính toán trung bình của một chương trình là: a0NlgN + a1N + a2 Ta có thể viết lại là: a0NlgN + O(N) Với N lớn, ta không cần tìm giá trị của a1 hay a2. 20
  • 20. Các kết quả xấp xỉ Ký hiệu O cho ta một cách tìm ra kết quả xấp xỉ khi N lớn. Do đó, thông thường chúng ta có thể bỏ qua một số đại lượng khi có tồn tại một số hạng dẫn đầu trong biểu thức. Example: nếu biểu thức là N(N-1)/2, chúng ta có thể bảo rằng nó khoảng chừng N2/2. 21
  • 21. 3.Phân tích một giải thuật lặp Thí dụ 1 Cho một giải thuật tìm phần tử lớn nhất trong một mảng 1 chiều. procedure MAX(A, n, max) /* Set max to the maximum of A(1:n) */ begin integer i, n; max := A[1]; for i:= 2 to n do if A[i] > max then max := A[i] end Nếu C(n) là độ phức tạp tính toán của giải thuật được tính theo thao tác so sánh (A[i]> max). Hãy xác định C(n) trong trường hợp xấu nhất. 22
  • 22. Phân tích một giải thuật lặp (tt.) Thao tác căn bản của thủ tục MAX là thao tác so sánh. Tổng số thao tác so sánh của thủ tục MAX chính là số lần thân vòng lặp được thực thi: (n-1). Vậy độ phức tạp tính toán của giải thuật là O(n). Đây là độ phức tạp của cả hai trường hợp trung bình và xấu nhất. Ghi chú: Nếu thao tác căn bản là phát biểu gán (max := A[i]) thì O(n) là độ phức tạp trong trường hợp xấu nhất. 23
  • 23. Phân tích một giải thuật lặp (tt.) Thí dụ 2: Giải thuật kiểm tra xem có phải mọi phần tử trong mảng 1 chiều là khác biệt nhau. function UniqueElements(A, n) begin for i:= 1 to n –1 do for j:= i + 1 to n do if A[i] = A[j] return false return true end Trong trường hợp xấu nhất, mảng không hề có hai phần tử nào bằng nhau hoặc mảng có hai phần tử cuối cùng bằng nhau. Lúc đó một sự so sánh diễn ra mỗi khi thân vòng lặp trong được thực hiện. 24
  • 24. i=1 i=2 i = n -2 i = n -1 j chạy từ 2 cho đến n tức n – 1 lần so sánh j chạy từ 3 cho đến n tức n – 2 lần so sánh . . j chạy từ n-1 cho đến n tức 2 lần so sánh j chạy từ n cho đến n tức 1 lần so sánh Tóm lại, tổng số lần so sánh là: 1 + 2 + 3 + … + (n-2) + (n-1) = n(n-1)/2 Vậy độ phức tạp tính toán của giải thuật trong trường hợp xấu nhất là O(n2). 25
  • 25. Phân tích một giải thuật lặp (tt.) Thí dụ 3 (So trùng dòng ký tự - string matching): Tìm tất cả những sự xuất hiện của một khuôn mẫu (pattern) trong một văn bản (text). Văn bản là một mảng T[1..n] gồm n ký tự và kiểu mẫu là một mảng P[1..m] gồm m ký tự. Kiểu mẫu P xuất hiện với độ dịch chuyển (shift) s trong văn bản T (tức là, P xuất hiện bắt đầu từ vị trí s+1 trong văn bản T) nếu 1 ≤ s ≤ n – m và T[s+1..s+m] = P[1..m]. 26
  • 26. Một giải thuật đơn giản nhất để tìm tất cả những sự xuất hiện của P trong T sẽ dùng một vòng lặp mà kiểm tra điều kiện P[1..m] = T[s+1..s+m] với mỗi trị trong n – m + 1 trị có thể có của s. procedure NATIVE-STRING-MATCHING(T,P); begin n: = |T|; m: = |P|; for s:= 0 to n – m do if P[1..m] = T[s+1,..,s+m] then print “Pattern occurs with shift” s; end 27
  • 27. procedure NATIVE-STRING-MATCHING(T,P); begin n: = |T|; m: = |P|; for s:= 0 to n – m do begin exit:= false; k:=1; while k ≤ m and not exit do if P[k] ≠ T[s+k] then exit := true else k:= k+1; if not exit then print “Pattern occurs with shift” s; end end 28
  • 28. Giải thuật NAIVE STRING MATCHER có hai vòng lặp lồng nhau: - vòng lặp ngoài lặp n – m + 1 lần. - vòng lặp trong lặp tối đa m lần. Do đó, độ phức tạp của giải thuật trong trường hợp xấu nhất là: O((n – m + 1)m). 29
  • 29. 4. Phân tích giải thuật đệ quy: các công thức truy hồi căn bản Có một phương pháp căn bản để phân tích độ phức tạp của các giải thuật đệ quy. Tính chất của một giải thuật đệ quy ⇒ thời gian chạy đối với bộ dữ liệu nhập kích thước N tùy thuộc vào thời gian chạy của những bộ dữ liệu nhập nhỏ hơn. Tính chất này được mô tả bằng một công thức toán học được gọi là hệ thức truy hồi (recurrence relation). Để dẫn xuất ra độ phức tạp của một giải thuật đệ quy, chúng ta phải giải hệ thức truy hồi này. 30
  • 30. Phân tích giải thuật đệ quy bằng phương pháp lặp Công thức 1: Một chương trình đệ quy mà lặp qua bộ dữ liệu nhập để loại đi một phần tử. Hệ thức truy hồi của nó như sau: CN = CN-1 + N N≥ 2 C1 = 1 Cách suy ra độ phức tạp bằng phương pháp lặp: CN = CN-1 + N = CN-2 + (N – 1) + N = CN-3 + (N – 2) + (N – 1) + N . . . = C1 + 2 + … + (N – 2) + (N – 1) + N = 1 + 2 + … + (N – 1) + N = N(N-1)/2 = N2/2 31
  • 31. Thí dụ 2 Công thức 2: Một chương trình đệ quy mà tách đôi bộ dữ liệu nhập trong một bước làm việc. Hệ thức truy hồi là: CN = CN/2 + 1 N≥ 2 C1 = 0 Cách suy ra độ phức tạp: Giả sử N = 2n C(2n) = C(2n-1) + 1 = C(2n-2 )+ 1 + 1 = C(2n-3 )+ 3 . .. = C(20 ) + n = C1 + n = n CN = n = lgN CN ≈ lgN 32
  • 32. Thí dụ 3 Công thức 3. Một chương trình đệ quy mà tách đôi bộ dữ liệu nhập trong một bước làm việc nhưng phải xem xét từng phần tử trong dữ liệu nhập. Hệ thức truy hồi là CN = 2CN/2 + N for N ≥ 2 C1 = 0 Cách suy ra độ phức tạp: Assume N = 2n C(2n) = 2C(2n-1) + 2n C(2n)/2n = C(2n-1)/ 2n-1 + 1 = C(2n-2)/ 2n-2 + 1 +1 . . =n ⇒ C(2n ) = n.2n CN = NlgN CN ≈ NlgN 33
  • 33. Thí dụ 4 Công thức 4. Một chương trình đệ quy mà tách đôi dữ liệu nhập thành hai nửa trong một bước làm việc . Hệ thức truy hồi là C(N) = 2C(N/2) + 1 for N ≥ 2 C(1) = 0 Cách suy ra độ phức tạp: Giả sử N = 2n. C(2n) = 2C(2n-1) + 1 C(2n)/ 2n = 2C(2n-1)/ 2n + 1/2n =C(2n-1)/ 2n-1 + 1/2n =[C(2n-2)/ 2n-2 + 1/2n-1 ]+ 1/2n . . . =C(2n-i)/ 2n -i + 1/2n – i +1 + … + 1/2n 34
  • 34. Cuối cùng, khi i = n -1, ta được: C(2n)/2n = C(2)/2 + ¼ + 1/8 + …+ 1/2n = ½ + ¼ + ….+1/2n ≈1 ⇒ C(2n) = 2n C(N) ≈ N Một số hệ thức truy hồi có vẻ giống nhau nhưng mức độ khó khi giải chúng để tìm độ phức tạp thì có thể rất khác nhau. 35
  • 35. Nguyên tắc phân tích độ phức tạp trung bình Để tính độ phức tạp trung bình của một giải thuật A, ta phải làm một số bước: 1. Quyết định một không gian lấy mẫu (sampling space) để diễn tả những dữ liệu đầu vào (kích thước n) có thể có. Giả sử không gian lấy mẫu là S = { I1, I2,…, Ik} 2. Ta phải định nghĩa một phân bố xác xuất p trên S mà biểu diễn mức độ chắc chắn mà dữ liệu đầu vào đó có thể xảy ra. 3. Ta phải tính tổng số tác vụ căn bản được giải thuật A thực hiện để xử lý một trường hợp mẫu. Ta dùng v(Ik) ký hiệu tổng số tác vụ được thực hiện bởi A khi dữ liệu đầu vào thuộc trường hợp Ik. 36
  • 36. Phân tích độ phức tạp trung bình (tt.) 4. Ta tính trị trung bình của số tác vụ căn bản bằng cách tính kỳ vọng sau: Cavg(n) = v(I1).p(I1) + v(I2).p(I2) + …+v(Ik).p(Ik). Thí dụ: Cho một mảng A có n phần tử. Tìm kiếm vị trí mà trị X xuất hiện trong mảng A. begin i := 1; while i <= n and X <> A[i] do i := i+1; end 37
  • 37. Thí dụ: Tìm kiếm tuần tự Giả sử X có xuất hiện trong mảng và giả định rằng xác xuất để nó xuất hiện tại một vị trí bất kỳ trong mảng là đều nhau và xác xuất để mỗi trường hợp xảy ra là p = 1/n. Số lần so sánh để tìm thấy X nếu nó xuất hiện tại vị trí 1 là 1 Số lần so sánh để tìm thấy X nếu nó xuất hiện tại vị trí 2 là 2 … Số lần so sánh để tìm thấy X nếu nó xuất hiện tại vị trí n là n Tổng số tác vụ so sánh trung bình là: C(n) = 1.(1/n) + 2.(1/n) + …+ N.(1/n) = (1 + 2 + …+ n).(1/n) = (1+2+…+n)/n = n(n+1)/2.(1/n) = (n+1)/2. 38
  • 38. Vài chuỗi số thông dụng Có một vài chuỗi số thông dụng trong việc phân tích độ phức tạp giải thuật. • Chuỗi số cọng S1 = 1 + 2 + 3 + … + n S1 = n(n+1)/2 ≈ n2/2 S2 = 1 + 22 + 32 + …+ n2 S2 = n(n+1)(2n+1)/6 ≈ n3/3 • Chuỗi số nhân S = 1 + a + a 2 + a3 + … + a n S = (an+1 -1)/(a-1) If 0< a < 1, then S ≤ 1/(1-a) Và khi n → ∞, S tiến về 1/(1-a). 39
  • 39. Vài chuỗi số thông dụng (tt.) • Tổng chuỗi số điều hoà (Harmonic sum) Hn = 1 + ½ + 1/3 + ¼ +…+1/n Hn = loge n + γ γ ≈ 0.577215665 được gọi là hằng số Euler. Một chuỗi số khác cũng rất thông dụng khi phân tích các thao tác làm việc trên cây nhị phân: 1 + 2 + 4 +…+ 2m-1 = 2m -1 40
  • 40. 5. Chiến lược thiết kế giải thuật   Một chiến lược thiết kế giải thuật (Algorithm Design Strategy) là một cách tiếp cận tổng quát để giải quyết vấn đề bằng giải thuật mà có thể áp dụng cho nhiều bài toán khác nhau trong nhiều lãnh vực khác nhau. Việc học những chiến lược thiết kế này hết sức quan trọng vì những lý do sau:   Chúng cung cấp những chỉ dẫn để thiết kế giải thuật cho những bài toán mới. Giải thuật đóng một vai trò quan trọng trong khoa học máy tính. Dựa vào các chiến lược thiết kế giải thuật, ta có thể phân loại giải thuật dựa vào ý tưởng thiết kế nền tảng của chúng. 41
  • 41. Chiến lược thiết kế giải thuật (tt.)     “Chia-để-trị” là một ví dụ điển hình của một chiến lược thiết kế giải thuật. Ngoài ra còn có nhiều chiến lược thiết kế giải thuật nổi tiếng khác Tập hợp những chiến lược thiết kế giải thuật tạo thành một bộ công cụ rất mạnh có sẵn giúp chúng ta nghiên cứu và xây dựng giải thuật. Một chiến lược thiết kế giải thuật sẽ được đề cập ngay trong chương này là chiến lược thiết kế kiểu “trực tiếp” (bruce-force) 42
  • 42. Chiến lược thiết kế giải thuật “trực tiếp” (bruce-force approach)      Thiết kế giải thuật theo lối “trực tiếp” là thiết kế giải thuật một cách đơn giản, chân phương dựa trực tiếp vào sự phát biểu bài toán và những định nghĩa về các khái niệm liên quan. “Just do it” là một cách khác để mô tả chiến lược thiết kế này. Giải thuật thiết kế theo lối “trực tiếp” là loại giải thuật dễ hiểu nhất và dễ hiện thực nhất. Tìm kiếm tuần tự (sequential search) là thí dụ điển hình của kiểu thiết kế bruce-force. Selection sort, NAÏVE-STRING-MATCHER (so trùng dòng ký tự) là những thí dụ khác của lối thiết kế bruce-force. 43
  • 43.  Mặc dù đơn sơ và không tinh xảo, nhưng những giải thuật thuộc loại bruce-force vẫn không nên xem thường, hoặc bỏ qua vì những lý do sau:     Giải thuật bruce-force thường có khả năng áp dụng rộng rãi. Với một số bài toán quan trọng, những giải thuật bruce-force có những giá trị thực tế nhất định. Những giải thuật tinh xảo thường khó hiểu và khó hiện thực hơn những giải thuật bruce-force. Giải thuật bruce-force có ích trong việc giảng dạy, dùng làm thước đo để đánh giá những cách khác hữu hiệu hơn để giải cùng một vấn đề. 44