Môn học phân tích thiết kế thuật toán. Một số ví dụ bài về tìm độ phức tạp của thuật toán. Các cách chứng minh f(n) = O(g(n)) và ngược lại. Chứng minh: O(cf(n)) = O(f(n)) với C là hằng số, O(c) = O(1), tìm f(n) sao cho T(n) = O(f(n)), hO(f), và một số bài tập khác.Đây là bài tập thuộc khoa học máy tính, thuộc môn bắt buộc chuyên ngành.
Trang 1Bài 1: Chứng minh:
O(cf(n)) = O(f(n)) với C là hằng số
O(c) = O(1)
Giải:
Chứng minh: O(cf(n)) = O(f(n)) với C là hằng số:
Xét t(n) ∈ O(cf(n))
∃c1 ∈ R+ , ∃n0 ∈ N, ∀n ≥ n0 t(n) ≤ c1cf(n)
∃c2 = c1c , ∃n0 ∈ N , ∀n ≥ n0
∃c2 ∈ R+, ∃n0 ∈ N , ∀n ≥ n0 t(n) ≤ c2f(n)
t(n)∈ O(f(n))
Xét h(n) ∈ Of(n)
∃ a ∈ R+, ∃n0 ∈ N , ∀n ≥ n0 h(n) ≤ af(n)
Đặt b= a
c
∃b ∈ R+, ∃n0 ∈ N, ∀n ≥ n0 h(n) ≤ bcf(n)
h(n) ∈ O(cf(n))
Ta có
{
t(n) ∈ O(cf(n)) t(n) ∈ O(f(n)) h(n) ∈ O(f(n)) h(n) ∈ Ocf(n)
=> O(cf(n))=O(f(n)) ( đpcm )
Chứng minh: O(c)=O(1)
Xét h(n)∈ O(c)
Trang 2∃c1, n0 ∀n ≥ n0, h(n) ≤ c1c
∃c2 = c1c, n0 ∀n ≥ n0
h(n) ≤ c21
h(n)∈ O(1)
Xét k(n)∈ O(1)
∃c1, n0 ∀n ≥ n0 k(n)≤ c1× 1
∃c2 = c1, ∀n ≥ n0
k(n) ≤ c2
k(n) ∈ O(c)
Ta có: {
h(n) ∈ O(c) h(n) ∈ O(1) k(n) ∈ O(1) k(n) ∈ O(c)
=> O(c)=O(1) ( đpcm )
Câu 2 : Tìm f(n) sao cho T(n) = O(f(n))
Giải :
a) T(n) = 7n − 2
T(n) = 7n − 2 ≤ 7n , ∀ n ≥ 1
⇒ T(n) ≤ 7n
Chọn C = 7, n0 = 1, f(n) = n
T(n) ≤ Cf(n) , ∀ n ≥ n0
⇒ T(n) = O(f(n))
b) T(n) = 3n3 + 2n2
T(n) = 3n3 + 2n2 ≤ 3n3+ 2n3 , ∀ n ≥ 1
⇒ T(n) ≤ 5n3
Trang 3Chọn C = 5 , n0 = 1 , f(n) = n3
T(n) ≤ Cf(n) , ∀ n ≥ n0
⇒ T(n) = O(f(n))
c) T(n) = (n + 1)2
T(n) = (n2 + 1) ≤ (n2+ n2) , ∀ n ≥ 1
⇒ T(n) ≤ 4n2
Chọn C = 4 , n0 = 1, f(n) = n2
T(n) ≤ Cf(n) , ∀ n ≥ n0
⇒ T(n) = O(f(n))
d) T(n) = 2100
T(n) = 2100 ≤ 2100n , ∀ n ≥ 1
⇒ T(n) ≤ n
Chọn C = 1 , n0 = 1 , f(n) = n
T(n) ≤ Cf(n) , ∀ n ≥ n0
⇒ T(n) = O(f(n))
e) T(n) = 5
n
T(n) = 5
n ≤ 5 , ∀ n ≥ 1
⇒ T(n) ≤ 5
Chọn C = 1 , n0 = 1 , f(n) = 5
T(n) ≤ Cf(n) , ∀ n ≥ n0
⇒ T(n) = O(f(n))
f) T(n) = 1
10n3+ 100n
Trang 4 T(n) = 1
10n3+ 100n ≤ 1
10n3+ 100n3 , ∀ n ≥ 1
⇒ T(n) ≤ 100,1n3
Chọn C = 100,1 , n0 = 1 , f(n) = n3
T(n) ≤ Cf(n) , ∀ n ≥ n0
⇒ T(n) = O(f(n))
g) T(n) = 20n3− 10nlogn + 5
T(n) = 20n3− 10nlogn + 5 ≤ 20n3+ 5 ≤ 20n3+ 5n3 ≤ 25n3 , ∀ n ≥ 1
⇒ T(n) ≤ 25n3
Chọn C = 25 , n0 = 1 , f(n) = n3
T(n) ≤ Cf(n) , ∀ n ≥ n0
⇒ T(n) = O(f(n))
h) T(n) = 3logn + loglogn
T(n) = 3logn + loglogn ≤ 3logn + logn ≤ 4logn , ∀ n ≥ 1
⇒ T(n) ≤ 4logn
Chọn C = 4 , n0 = 1 , f(n) = logn
T(n) ≤ Cf(n) , ∀ n ≥ n0
⇒ T(n) = O(f(n))
Câu 3 :
Xét f(n) = 7n 2 ; g(n)=n 2 – 80n ; h(n)=n 3
Chứng minh:
f = O(g); g = O(f); f = O(h); h#O(f)
Giải:
Trang 5 C/m: f=O(g)
Giả sử: 7n2 ≤ C(n2 – 80n) , ∀n ≥ n0
Sau khi xét bảng biến thiên của bất phương trình trên em chọn được:
C = 8, n0 = 640s thì bất phương trình trên thỏa
f(n)≤ cg(n) , ∀n ≥ n0
f(n) = O(g)
C/m: g = O(f)
g(n) = n2− 80n ≤ n2 ≤ 7n2, ∀n ≥ 1
Chọn C = 1, n0 =1
g(n) ≤ cf(n)∀n ≥ n0
g(n) = Of(n)
C/m: f = O(h)
Ta có f(n) = 7n2 ≤ 7n3 , ∀n ≥ 1
Chọn C = 7,n0 = 1
f(n) ≤ h(n) ∀n ≥ n0
f = O(h)
C/m: h ≠ O(f)
Giả sử: h(n) = n3 ≤ C(7n2), ∀n ≤ 𝑛0, C ∈ R+
Xét dấu hàm số 𝑘(𝑛) = n3− C(7n2)
Vậy chỉ cần n = 7C là n3 > C(7n2)
Đặt n0 = 7C
h(n) ≤ Cf(n) , ∀n ≤ 𝑛0
∀n ≥ 𝑛0 thì h(n) ≠ Cf(n)
h(n) ≠ O(f)
Trang 6Câu 4: Chứng minh
𝟏
𝟐𝒏
𝟐 = 𝑶(𝒏𝟐)
𝒏𝟐+ 𝟏 = 𝑶(𝒏𝟐)
⇒ 𝟏
𝟐𝒏
𝟐 = 𝒏𝟐 + 𝟏 ? ? ? ?
Giải:
Dấu “=” ở đẳng thức chứa O(𝑛2) nó chỉ là ký hiệu, thể hiện
1
2𝑛2 € 𝑂(𝑛2), O(𝑛2) chỉ là một tập hợp
Còn dấu “=” ở 1
2𝑛2 = 𝑛2+ 1 nó thể hiện là một đẳng thức
Vì vậy 1
2𝑛2 = 𝑛2+ 1 là sai
Câu 5: Chứng minh
Giải:
2 Chứng minh: f(n)∈ 𝑂(𝑔(𝑛))𝑣à 𝑔(𝑛) ∈ 𝑂(ℎ(𝑛)) => 𝑓(𝑛) ∈ 𝑂(ℎ(𝑛))
Ta có : f(n)∈ 𝑂(𝑔(𝑛))
∃𝑐1 ∈ 𝑅+, 𝑛0 ∈ 𝑁, ∀𝑛 ≥ 𝑛0
𝑓(𝑛) ≤ 𝑐1𝑔(𝑛) (1)
Ta có: g(n)∈ 𝑂(ℎ(𝑛))
∃𝑐2 ∈ 𝑅+, 𝑛0 ∈ 𝑁, ∀𝑛 ≥ 𝑛0
g(n)≤ 𝑐2ℎ(𝑛) (2)
c1g(n)≤ 𝑐1𝑐2ℎ(𝑛)
Ta có: f(n)≤ 𝑐1𝑔(𝑛) ≤ 𝑐1𝑐2ℎ(𝑛)
f(n)≤ 𝑐1𝑐2ℎ(𝑛)
Trang 7Đặt c3=𝑐1𝑐2
∃𝑐3 ∈ 𝑅+, 𝑛0 ∈ 𝑁, ∀𝑛 ≥ 𝑛0
𝑓(𝑛) ≤ 𝑐3ℎ(𝑛)
f(n)∈ 𝑂(ℎ(𝑛)) ( đpcm )
4 O(f(n))=O(g(n)) g(n)∈ 𝑂(𝑓(𝑛)), 𝑓(𝑛) ∈ 𝑂(𝑔(𝑛))
Ta có: O(f(n))=O(g(n))
∃𝑓(𝑛) ∈ 𝑂(𝑔(𝑛))
∃𝑔(𝑛) ∈ 𝑂(𝑔(𝑛))
∃𝑔(𝑛) ∈ 𝑂(𝑓(𝑛))
Ta có:
g(n)∈ 𝑂(𝑓(𝑛))
∃𝑐1 ∈ 𝑅+, 𝑛0 ∈ 𝑁, ∀𝑛 ≥ 𝑛0
𝑔(𝑛) ≤ 𝑐1𝑓(𝑛)
𝑓(𝑛) ∈ 𝑂(𝑔(𝑛))
∃𝑐2 ∈ 𝑅+, 𝑛0 ∈ 𝑁, ∀𝑛 ≥ 𝑛0
f(n)≤ 𝑐2𝑔(𝑛)
Ta có: g(n)≤ 𝑐1𝑓(𝑛)
f(n)≤ 𝑐2𝑔(𝑛) => 𝑐1𝑓(𝑛) ≤ 𝑐1𝑐2𝑔(𝑛) => 𝑔(𝑛) ≤ 𝑐1𝑐2𝑔(𝑛)
∃𝑐3 = 𝑐1𝑐2 ∈ 𝑅+, 𝑛0 ∈ 𝑁, ∀𝑛 ≥ 𝑛0
=> 𝑔(𝑛) ≤ 𝑐3𝑔(𝑛) => 𝑔(𝑛) ∈ 𝑂(𝑔(𝑛))
Ta có: g(n) ≤ 𝑐1𝑓(𝑛) => 𝑐2𝑔(𝑛) ≤ 𝑐1𝑐2𝑔(𝑛)
f(n) ≤ 𝑐2𝑔(𝑛) ≤ 𝑐1𝑐2𝑓(𝑛)
f(n) ≤ 𝑐1𝑐2𝑓(𝑛)
∃𝑐3 = 𝑐1𝑐2 ∈ 𝑅+, 𝑛0 ∈ 𝑁, ∀𝑛 ≥ 𝑛0
f(n)≤ 𝑐3𝑓(𝑛)
f(n)∈ 𝑂(𝑓(𝑛))
Ta có:
∃f(n)∈ 𝑂(𝑓(𝑛))
Trang 8∃f(n)∈ 𝑂(𝑔(𝑛)) (2)
∃g(n)∈ 𝑂(𝑔(𝑛))
∃g(n)∈ 𝑂(𝑓(𝑛))
Từ (1)(2)
O(f(n))=O(g(n)) g(n)∈ 𝑂(𝑓(𝑛)), 𝑓(𝑛) ∈ 𝑂(𝑔(𝑛))
12)
2𝑛+1 = 𝑂(2𝑛)
𝑇𝑎 𝑐ó: lim
𝑛→∞
2𝑛+1
2 𝑛 = 2 < +∞
2𝑛+1 = 𝑂(2𝑛)
11)
log𝑛𝑥 = O(logn), ∀x>0
Ta có: lim
𝑛→∞
log𝑛𝑥 logn = 𝑥, ∀x > 0 => x < +∞
=> log𝑛𝑥 = O(logn), ∀x>0
9)
f(n) là một đa thức bậc d => f(n) = O(𝑛𝑑)
Ta có : công thức đa thức bậc d là : a1nd+a2𝑛𝑑−1+a3nd-2+ +c ( c là hằng số) ( a1≠ 0)
Ta có: lim
𝑛→∞
𝑎1𝑛𝑑+𝑎2𝑛𝑑−1+𝑎3𝑛𝑑−2+ +c
𝑛 𝑑 = 𝑎1 ≠ 0
f(n) = O(𝑛𝑑)
6)
f(n) = O(g(n)) => a.f(n) = O(g(n)) ∀ a> 0
Trang 9Ta có: f(n)=O(g(n))
f(n)∈ 𝑂(𝑔(𝑛))
∃𝑐1 ∈ 𝑅+, 𝑛0 ∈ 𝑁, ∀𝑛 ≥ 𝑛0
f(n)≤ 𝑐1𝑔(𝑛)
Đặt 1
𝑎 = 𝑐1
𝑐
∃1𝑎 ∈ 𝑅+, 𝑛0 ∈ 𝑁, ∀𝑛 ≥ 𝑛0
𝑓(𝑛) ≤ 1
𝑎 cg(n)
𝑣ì 𝑎 > 0 => 𝑎𝑓(𝑛) ≤ 𝑐𝑔(𝑛)
=> 𝑎𝑓(𝑛) ∈ 𝑂(𝑔(𝑛)) ∀ a> 0
Câu 6: Chứng minh dùng giới hạn
𝒇(𝒏) = 𝟐𝒏 ∈ 𝑶(𝒏!)
𝒇(𝒏) = 𝟐𝒏𝟓+ 𝟔𝒏𝟐+ 𝟐 ∈ 𝑶(𝒏𝟓)
Giải:
Xét lim
𝑛→∞
2𝑛 𝑛! , Áp dụng tiêu chuẩn D’Alembert, ta có:
lim
𝑛→∞
2𝑛
𝑛! = lim𝑛→∞
2𝑛+1 (𝑛 + 1)!
𝑛!
2𝑛 = lim
𝑛→∞
2
𝑛 + 1 = 0 Vậy 2𝑛 = ѳ(𝑛!)
Xét
lim
𝑛→∞
𝟐𝒏𝟓 + 𝟔𝒏𝟐 + 𝟐
Vậy 𝟐𝒏𝟓+ 𝟔𝒏𝟐+ 𝟐 = 𝑶(𝒏𝟓)