Professional Documents
Culture Documents
CTDL C1
CTDL C1
Nội dung
Các khái niệm
Giảithuật
Cấu trúc dữ liệu
Giải thuật
– Một thủ tục 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 đầu vào
cho trước của một bài toán
Giải thuật
Chương trình là một thể hiện của Giải thuật trong một
ngôn ngữ lập trình nào đó
– Mục tiêu của việc xác định thời gian thực hiện
một giải thuật:
z Để ước lượng một chương trình sẽ thực hiện trong bao
lâu
z Để ước lượng kích thước dữ liệu đầu vào lớn nhất có
thể cho một giải thuật
z Để so sánh hiệu quả của các giải thuật khác nhau, từ đó
lựa chọn ra một giải thuật thích hợp cho một bài toán
z Để giúp tập trung vào đoạn giải thuật được thực hiện
với thời gian lớn nhất
z Cách thức
– Xác định độ phụ thuộc của thời gian tính của
thuật toán vào kích thước của dữ liệu đầu vào
– Các phương pháp thực hiện
z Phương pháp thực nghiệm
z Phương pháp phân tích dựa trên mô hình lý thuyết
return currentMax
End.
Function AVERAGE(A,n)
Begin
{A là một mảng gồm n phần tử là số nguyên. Giải thuật trả ra giá trị
trung bình của các giá trị trong mảng}
1. sum = 0;
2. {Duyệt mảng} for I = 1 to n do
sum = sum + A[i];
3. average = sum/n
4. return(average)
End.
T(n) ≈ cop*C(n)
5 ms worst-case
4 ms
3 ms
}
average-case?
best-case
2 ms
1 ms
A B C D E F G
Input
a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10] a[11] a[12]
4 8 7 10 21 14 22 36 62 91 77 81
– 7n -2
z 7n-2 là O(n)
tìm c > 0 và n0 ≥ 1 sao cho 7n-2 ≤ c*n với n ≥ n0
điều này đúng với c = 7 và n0 = 1
– 3n3 + 20n2 + 5
z 3n3 + 20 n2 + 5 là O(n3)
tìm c > 0 và n0 ≥ 1 sao cho 3n3 + 20n2 + 5 ≤ c*n3 vơi n ≥ n0
điều này đúng với c = 4 và n0 = 21
– 3 log n + 5
z 3 log n + 5 là O(log n)
cần c > 0 và n0 ≥ 1 sao cho 3 log n + 5 ≤ c*log n với n ≥ n0
ta xác định được c = 8 và n0 = 2
z n ≥ 10/(c − 2) n
z Lấy c = 3 và n0 = 10 100
10
1
1 10 100 1,000
n
for i = 1 to n
begin
P; {đoạn giải thuật với thời
gian thực hiện T}
end
i: = 1
while (i <= n) do
begin
P; {đoạn giải thuật với thời
gian thực hiện T}
i: = i+2;
end
i := 1
while (i<= n) do
begin
P; {đoạn giải thuật với thời
gian thực hiện T}
i:= i *2;
end
i :=n
while (i >= 1) do
begin
P; {đoạn giải thuật với thời
gian thực hiện T}
i:= i/2
end
i=1
while (i <= n) do
begin
j := 1 ;
while (j <= n) do
begin
P ; {đoạn giải thuật với
thời gian thực hiện T}
j := j × 2;
end
i =: i + 1;
end
z Ví dụ
i=1
while (i <= n) do
begin
j := 1 ;
while (j <= n) do
begin
P;
j := j +1;
end
i =: i + 1;
end
- Big- Omega
z t(n) được coi là Ω(g(n)) nếu tồn tại một hằng số c >0 và
một số nguyên n0 ≥ 1 sao cho T(n) ≥ c*g(n) với mọi n ≥
n0
t(n) ∈ Ω(g(n))
– Big-Theta
z t(n) đựoc coi là Θ(g(n)) nếu tồn tại hai hằng số c’ > 0 và
c’’ > 0 và một số nguyên n0 ≥ 1 sao cho c’*g(n) ≤ T(n) ≤
c’’*g(n) với mọi n ≥ n0
t(n) ∈ Θ(g(n))