Độ phức tạp của thuật toán mô tả mức độ khó khăn khi thực hiện thuật toán, gồm hai loại: •Độ phức tạp thời gian: thời gian cần thiết để thực hiện được thuật toán với kích thước đầu vào
Trang 1complexity & correctness
độ phức tạp & tính đúng đắn
complexity & correctness
Thuật toán
Algorithm
Thuật toán
Algorithm
Trang 5Khái niệm big-O được sử dụng để đánh giá số phép
toán cần dùng để giải một bài toán theo một thủ tục hoặc một thuật toán cụ thể Các hàm số cơ bản thường được dùng để so sánh là:
1, log(log(n)), log(n), log k (n), n 1/k , n, nlog(n), n k , a n , n!, n n
mũ
0 10 20 30 40 50
log(n) n^2 2^n n!
Big-O
Trang 6• f ∈ O(g) ∧ g ∈ O(h) → f ∈ O(h)
• af, f 1-b, (logb f) a ∈ O(f) với mọi a, b ∈ R và b ≥ 0
• f1∈O(g1) ∧ f2∈O(g2) → f1 f2 ∈ O(g1g2)
• f1∈O(g1) ∧ f2∈O(g2) → f1+f2 ∈ O(g1+g2)
• O(g1+g2) = O(max(g1,g2)) = O(g1) nếu g2∈O(g1)
• a n x n + a n -1 x n -1 + …+ a1x + a0 ∈ O(x n ) (a0, a1, …, a n là các số thực)
• f ∈ O(g) ∧ g ∈ O(h) → f ∈ O(h)
• af, f 1-b, (logb f) a ∈ O(f) với mọi a, b ∈ R và b ≥ 0
• f1∈O(g1) ∧ f2∈O(g2) → f1 f2 ∈ O(g1g2)
• f1∈O(g1) ∧ f2∈O(g2) → f1+f2 ∈ O(g1+g2)
• O(g1+g2) = O(max(g1,g2)) = O(g1) nếu g2∈O(g1)
Tính chất
Trang 7= n
i
i n
= n2 n
∈ O(n2)hoặc ∈ n2/2 + O(n)
) ( log
)
Tính chất
Trang 8BIG-Khi f ∈ O(g) thì hàm f bị chặn trên bởi g Dưới đây cung
cấp một vài cách đánh giá khác về độ tăng của hàm
Định nghĩa Definition
Định nghĩa Definition
Cho f(x) và g(x) là hai hàm số từ tập các số nguyên hoặc
số thực đến tập các số thực Ta nói
•f(x) là Ω(g(x)) hoặc f(x) là big-Omega của g(x) nếu tồn
tại hai hằng số C > 0 và k sao cho
•f(x) là Ω(g(x)) hoặc f(x) là big-Omega của g(x) nếu tồn
tại hai hằng số C > 0 và k sao cho
Trang 10Cho 2 hàm số
Chứng minh f ∈ Θ (g) f(n) = log(1) + log(2) + …+ log(n) g(n) = nlog(n)
f (n) ≤ g(n) ∀ n ≥ 1
⇒ f (n) ∈ O(g(n)) 2f(n) = log(1) + log(2) + …+ log(n)
+ log(n) + log(n-1) +…+ log(1)
= log(1.n) + log(2(n-1)) + … + log(n.1)
≥ g(n) ∀ n ≥ 1
⇒ f (n) ∈ Ω(g(n)) Vậy f (n) ∈ Θ(g(n))
Tính chất
Trang 14Độ phức tạp của thuật toán mô tả mức độ khó khăn khi
thực hiện thuật toán, gồm hai loại:
•Độ phức tạp thời gian: thời gian cần thiết để thực hiện
được thuật toán với kích thước đầu vào xác định, được biểu diễn qua số phép toán được dùng bởi thuật toán như: phép so sánh, cộng, trừ, nhân, chia, …
•Độ phức tạp không gian: dung lượng bộ nhớ cần sử
dụng để thực hiện thuật toán
Độ phức tạp của thuật toán mô tả mức độ khó khăn khi
thực hiện thuật toán, gồm hai loại:
•Độ phức tạp thời gian: thời gian cần thiết để thực hiện
được thuật toán với kích thước đầu vào xác định, được biểu diễn qua số phép toán được dùng bởi thuật toán như: phép so sánh, cộng, trừ, nhân, chia, …
•Độ phức tạp không gian: dung lượng bộ nhớ cần sử
dụng để thực hiện thuật toán
Khi có một thuật toán chúng ta sẽ quan tâm đến
• Tính đúng đắn: kết quả chính xác không?
• Độ phức tạp: thuật toán có hiệu quả không?
sẽ học hôm nay
Độ phức tạp
Trang 16khi i = n + 1
Cần tất cả: (n – 1).2 + 1 = 2n – 1 phép so sánh
→ độ phức tạp thuật toán Θ(n)
Độ phức tạp
Trang 17• độ phức tạp logarit nếu có dạng O(log n)
• độ phức tạp tuyến tính nếu có dạng O(n)
• độ phức tạp đa thức nếu có dạng O(n a ), a ≥ 1
• độ phức tạp hàm mũ nếu có dạng O(a n ), a > 1
• độ phức tạp giai thừa nếu có dạng O(n!)
Một thuật toán với kích thước đầu vào n gọi là có
• độ phức tạp hằng nếu có dạng O(1)
• độ phức tạp logarit nếu có dạng O(log n)
• độ phức tạp tuyến tính nếu có dạng O(n)
• độ phức tạp đa thức nếu có dạng O(n a ), a ≥ 1
Trang 18• Độ phức tạp trong trường hợp xấu nhất là độ phức tạp
tính trong trường hợp phải dùng tối đa các phép toán để giải bài toán theo thuật toán đang xét, ứng với một số đầu vào nào đó có kích thước xác định.
• Độ phức tạp trong trường hợp trung bình là độ phức tạp
tính số trung bình các phép toán để giải bài toán trên toàn
bộ các giá trị đầu vào có kích thước xác định.
• Những bài toán giải được bằng một thuật toán có độ phức tạp đa thức trong trường hợp xấu nhất gọi là bài
toán dễ dử lí, nếu không gọi là bài toán không dễ xử lí.
• Độ phức tạp trong trường hợp xấu nhất là độ phức tạp
tính trong trường hợp phải dùng tối đa các phép toán để giải bài toán theo thuật toán đang xét, ứng với một số đầu vào nào đó có kích thước xác định.
• Độ phức tạp trong trường hợp trung bình là độ phức tạp
tính số trung bình các phép toán để giải bài toán trên toàn
bộ các giá trị đầu vào có kích thước xác định.
• Những bài toán giải được bằng một thuật toán có độ phức tạp đa thức trong trường hợp xấu nhất gọi là bài
toán dễ dử lí, nếu không gọi là bài toán không dễ xử lí.
Độ phức tạp
Trang 20ngoài vòng lặp
Trường hợp x = a i có 2i + 1 phép so sánh
Xấu nhất
Trang 21Nếu coi x có mặt trong danh sách và khả năng x ở mỗi vị
trí là như nhau thì độ phức tạp của thuật toán tìm kiếm tuyến tính trong trường hợp trung bình là
(2.1 + 1) + (2.2 + 1) + …+ (2n + 1)
Trung bình
Trang 23sai
vị trí: = 0 m: = (i + j)/2
Xấu nhất
Trang 24Một thuật toán gọi là đúng đắn nếu với mọi đầu vào
khả dĩ, nó cho đầu ra đúng Việc chứng minh tính đúng đắn của thuật toán gồm hai phần:
• Chứng tỏ rằng nếu thuật toán kết thúc thì nó cho ra kết
quả đúng, tức là xác lập tính đúng đắn bộ phận.
• Chứng tỏ thuật toán kết thúc
Một thuật toán gọi là đúng đắn nếu với mọi đầu vào
khả dĩ, nó cho đầu ra đúng Việc chứng minh tính đúng đắn của thuật toán gồm hai phần:
• Chứng tỏ rằng nếu thuật toán kết thúc thì nó cho ra kết
quả đúng, tức là xác lập tính đúng đắn bộ phận.
• Chứng tỏ thuật toán kết thúc
Tính đúng đắn
Trang 25Để kiểm tra tính đúng đắn của chương trình hay đoạn
chương trình S ta thường sử dụng hai mệnh đề sau:
• Khẳng định đầu p: là điều kiện mà đầu vào của
chương trình cần phải có
• Khẳng đinh cuối q: là điều kiện mà đầu ra của
chương trình cần thỏa mãn
Bộ ba Hoare là kí hiệu pSq có nghĩa là: với mọi đầu
vào I sao cho mệnh đề p(I) là đúng, qua chương trình
S cho đầu ra O thì mệnh đề q(O) là đúng Khi có pSq
ta nói chương trình S đúng đắn bộ phận với khẳng
Để kiểm tra tính đúng đắn của chương trình hay đoạn
chương trình S ta thường sử dụng hai mệnh đề sau:
• Khẳng định đầu p: là điều kiện mà đầu vào của
chương trình cần phải có
• Khẳng đinh cuối q: là điều kiện mà đầu ra của
chương trình cần thỏa mãn
Bộ ba Hoare là kí hiệu pSq có nghĩa là: với mọi đầu
vào I sao cho mệnh đề p(I) là đúng, qua chương trình
S cho đầu ra O thì mệnh đề q(O) là đúng Khi có pSq
ta nói chương trình S đúng đắn bộ phận với khẳng
Tính đúng đắn
Trang 26S đúng đắn bộ phận với:
S không đúng đắn bộ phận với:
khẳng định đầu: p(x) = x > 1 khẳng định cuối: q(x) = x > 4
khẳng định đầu: p(x) = x > 1 khẳng định cuối: q(x) = x > 3
Tính đúng đắn
Trang 27như sau: p0S1p1, p1S2p2, …, p k–1Sk p k thì chương trình S
là đúng đắn bộ phận với khẳng định đầu p = p0, khẳng
định cuối q = p k
Một chương trình S được chia thành các đoạn chương trình con S1, S2, …, S k Giả sử các chương trình con là đúng đắn bộ phận với các bộ ba Hoare
như sau: p0S1p1, p1S2p2, …, p k–1Sk p k thì chương trình S
là đúng đắn bộ phận với khẳng định đầu p = p0, khẳng
định cuối q = p k
Một chương trình thường được chia thành các đoạn chương trình con cơ bản như rẽ nhánh điều kiện và vòng lặp Dưới đây trình bày tính đúng đắn của đoạn
Tính đúng đắn
Trang 28Quy tắc suy luận của đoạn rẽ nhánh điều kiện
if điều kiện then S
với khẳng định đầu p và khẳng định cuối q là:
Quy tắc suy luận của đoạn rẽ nhánh điều kiện
if điều kiện then S
với khẳng định đầu p và khẳng định cuối q là:
(p ∧ điều kiện){S}q (p ∧ ¬điều kiện) → q
∴ p{if điều kiện then S}q
Trang 30Quy tắc suy luận của đoạn rẽ nhánh điều kiện
if điều kiện then S1 else S2
với khẳng định đầu p và khẳng định cuối q là:
Quy tắc suy luận của đoạn rẽ nhánh điều kiện
if điều kiện then S1 else S2
với khẳng định đầu p và khẳng định cuối q là:
(p ∧ điều kiện) {S1} q (p ∧ ¬điều kiện) {S2} q
∴ p{if điều kiện then S1 else S2}q
Trang 31Điều kiện
Trang 32Quy tắc suy luận của đoạn vòng lặp
while điều kiện do S
với khẳng định đầu p và khẳng định cuối (¬điều kiện ∧ p)
là:
Quy tắc suy luận của đoạn vòng lặp
while điều kiện do S
với khẳng định đầu p và khẳng định cuối (¬điều kiện ∧ p)
là:
(p ∧ điều kiện) {S} p
∴ p{while điều kiện do S}(¬điều kiện ∧ p) Khi (p ∧ điều kiện){S}p đúng thì p gọi là bất biến vòng lặp
Trang 33while i < n
begin
i: = i + 1 giai thừa: = giai thừa * i
end
khẳng định đầu p:
i ≤ n giai thừa = i!
Trang 34while k < a
begin
x: = x + m k: = k + 1
Trang 35– Chép bản slide này & thay đổi nó để nó dễ hiểu hơn với bạn.
Tóm tắt