Công thức truy hồi chia để trị
Công thức truy hồi chia để trị1 (đang sửa)
Trần Vĩnh Đức
HUST
Ngày 7 tháng 8 năm 2013
1
Tham khảo: Mathematics for CS, MIT
Trần Vĩnh Đức | HUST | Ngày 7 tháng 8 năm 2013
..
.
..
.
..
.
. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..
.
..
.
..
.
..
.
..
1 / 22
.
Công thức truy hồi chia để trị
Bài toán tháp Hà Nội
..
.
Hình : Nguồn: wikipedia
..
Trần Vĩnh Đức | HUST | Ngày 7 tháng 8 năm 2013
.
..
.
..
.
. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..
.
..
.
..
.
..
.
..
2 / 22
.
Có 3 cái cọc và trên một chiếc cọc đặt n cái đĩa với đường kính giảm dần.
Cần ít nhất bao nhiêu lần di chuyển để chuyển hết cả n đĩa sang cọc bên
cạnh sao cho
• mỗi lần chỉ di chuyển một đĩa
• mỗi đĩa có thể dịch chuyển từ một cọc này sang một cọc khác bất
kỳ, nhưng không được để một chiếc đĩa lớn lên trên một chiếc đĩa
khác có đường kính nhỏ hơn?
Công thức truy hồi chia để trị
..Định nghĩa
.Tn := số lần chuyển ít nhất cho n đĩa.
T1 = 1
T2 = 3
T3 ≤ 7.
..
Trần Vĩnh Đức | HUST | Ngày 7 tháng 8 năm 2013
.
..
.
..
.
. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..
.
..
.
..
.
..
.
..
3 / 22
.
Công thức truy
hồiThe
chiaTowers
để trị of Hanoi
10.1.
285
..
2
3
4
5
6
7
8
.
Figure 10.2 The 7-step solution to the Towers of Hanoi problem when there are
Hình : Lời giải gồm 7 bước khi bài toán với 3 đĩa
n D 3 disks.
..
Trần Vĩnh Đức | HUST | Ngày 7 tháng 8 năm 2013
.
..
.
..
.
. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..
.
..
.
..
.
..
.
..
4 / 22
.
7
Công thức truy hồi chia để trị
Cận trên
8
Figure 10.2 The 7-step solution to the Towers of Hanoi problem when there are
Tn ≤ Tn−1 + 1 + Tn−1 = 2Tn−1 + 1.
n D 3 disks.
2
3
4
Figure 10.3
.
.
.
.
.
.
. . . . . . . . . . . .
. . . . . . . . . . .. .. ..
.
. . . . . . . . . .
A recursive solution to the Towers. of. Hanoi
problem.
Trần Vĩnh Đức | HUST | Ngày 7 tháng 8 năm 2013
.
..
.
..
.
..
.
..
5 / 22
.
Ta có một lời giải đệ quy như sau:
• Đầu tiên chuyển n − 1 đĩa trên cùng từ cột 1 sang cột 3: Cần ít
nhất Tn−1 bước.
• Chuyển đĩa n sang cột 2: Cần 1 bước.
• Chuyển n − 1 đĩa từ cột 3 sang cột 2: Cần ít nhất Tn−1 bước.
Vậy Tn ≤ Tn−1 + 1 + Tn−1 = 2Tn−1 + 1.
. .Ví dụ
• T3 ≤ 2 · 3 + 1 = 7.
.
• T4 ≤ 2 · 7 + 1 = 15.
Công thức truy hồi chia để trị
Cận dưới
Để chuyển được đĩa n lớn nhất sang cột 2:
Ta phải chuyển n − 1 đĩa trên nó sang cột 3: ≥ Tn−1 bước.
Chuyển đĩa n sang cột 2 (sau bước cuối của chuyển đĩa n): ≥ 1 bước.
Để chuyển n − 1 đĩa từ cột 3 sang cột 2: ≥ Tn−1 bước
Vậy ta được
..
.
Tn ≥ Tn−1 + 1 + Tn−1 = 2Tn−1 + 1
..
Trần Vĩnh Đức | HUST | Ngày 7 tháng 8 năm 2013
.
..
.
..
.
. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..
.
..
.
..
.
..
.
..
6 / 22
.
Công thức truy hồi chia để trị
Công thức tường minh
..
.
Tn = 2Tn−1 + 1 = 2n − 1
..Chứng minh quy nạp theo n.
Đặt P(n) là mệnh đề ”Tn = 2n − 1”.
Bước cơ sở: T1 = 21 − 1 = 1 đúng.
Bước quy nạp: Giả sử Tn = 2n − 1. Ta có
Tn+1 = 2Tn + 1
= 2(2n − 1) + 1
= 2n+1 − 1.
.
Vậy mệnh đề P(n + 1) là đúng.
..
Trần Vĩnh Đức | HUST | Ngày 7 tháng 8 năm 2013
.
..
.
..
.
. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..
.
..
.
..
.
..
.
..
7 / 22
.
Công thức truy hồi chia để trị
Một chứng minh khác
Tn = 1 + 2Tn−1
= 1 + 2(1 + 2Tn−1 )
= 1 + 2 + 4(1 + 2Tn−3 )
= 1 + 2 + 4 + 8Tn−3
..
.
= 1 + 2 + 4 + · · · + 2n−2 + 2n−1 T1
= 2n − 1
..
Trần Vĩnh Đức | HUST | Ngày 7 tháng 8 năm 2013
.
..
.
..
.
. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..
.
..
.
..
.
..
.
..
8 / 22
.
Công thức truy hồi chia để trị
Sắp xếp trộn
Để sắp xếp dãy
x1 , x2 , . . . , xn
với n là lũy thừa của 2, ta thực hiện:
1
Sắp xếp hai dãy
x1 , x2 , . . . , xn/2
2
và
xn/2+1 , xn/2+2 , . . . , xn
Trộn hai dãy đã sắp
..
Trần Vĩnh Đức | HUST | Ngày 7 tháng 8 năm 2013
.
..
.
..
.
. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..
.
..
.
..
.
..
.
..
9 / 22
.
Công thức truy hồi chia để trị
..Ví dụ
Ta sắp xếp dãy sau theo thứ tự tăng dần
10, 7, 23, 5, 2, 8, 6, 9 → (5, 7, 10, 23) (2, 6, 8, 9)
Nửa đầu
5, 7, 10, 23
5, 7, 10, 23
7, 10, 23
7, 10, 23
10, 23
10, 23
10, 23
Nửa sau
2, 6, 8, 9
6, 8, 9
6, 8, 9
8, 9
8, 9
9
.
Kết quả
2
2, 5
2, 5, 6
2, 5, 6, 7
2, 5, 6, 7, 8
2, 5, 6, 7, 8, 9
2, 5, 6, 7, 8, 9, 10, 23
..
Trần Vĩnh Đức | HUST | Ngày 7 tháng 8 năm 2013
.
..
.
..
.
. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..
.
..
.
..
.
..
.
..
10 / 22
.
Công thức truy hồi chia để trị
Đánh giá thuật toán Sắp xếp trộn
T(n) := số phép so sánh thuật toán dùng.
Trộn cần n − 1 phép so sánh.
Sắp xếp hai dãy con cần 2T(n/2) phép so sánh.
Vậy ta được
{
T(n) = 2T(n/2) + n − 1
T(1) = 0
..Ví dụ
.
T(2) = 1
T(8) = 2 · 5 + 7 = 17
T(4) = 5
T(16) = 2 · 17 + 15 = 49
..
Trần Vĩnh Đức | HUST | Ngày 7 tháng 8 năm 2013
.
..
.
..
.
. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..
.
..
.
..
.
..
.
..
11 / 22
.
Công thức truy hồi chia để trị
..Công thức tường minh
T(n) = n − 1 + 2T(n/2)
= n − 1 + 2(n/2 − 1 + 2T(n/4))
= (n − 1) + (n − 2) + 4T(n/4)
...
= (n − 1) + (n − 2) + · · · + (n − 2i ) + 2i T(n/2i )
...
= (n − 1) + (n − 2) + · · · + (n − 2log n−1 ) + 2log n T(1)
=
log
n−1
∑
(
n−2
i
)
=
i=0
= n log n − (2
.
log
n−1
∑
i=0
log n
n−
log
n−1
∑
2i
i=0
− 1)
= n log n − n + 1.
..
Trần Vĩnh Đức | HUST | Ngày 7 tháng 8 năm 2013
.
..
.
..
.
. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..
.
..
.
..
.
..
.
..
12 / 22
.
Công thức truy hồi chia để trị
Một công thức truy hồi
..Ví dụ
{
S(1) = 0
S(n) = S(⌊n/2⌋) + S(⌈n/2⌉) + 1
Ta thử với vài ví dụ
S(1) = 0
S(2) = 1
S(3) = 2
.
S(4) = 3
S(5) = 1 + 2 + 1 = 4
Dự đoán: S(n) = n − 1.
..
Trần Vĩnh Đức | HUST | Ngày 7 tháng 8 năm 2013
.
..
.
..
.
. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..
.
..
.
..
.
..
.
..
13 / 22
.
Công thức truy hồi chia để trị
S(n) = n − 1
..Kiểm tra bằng quy nạp mạnh.
Đặt P(n) là mệnh đề ”S(n) = n − 1”.
Bước cơ sở: P(1) = 0 là đúng.
Bước quy nạp: Giả sử P(1), P(2), . . . , P(n) đúng.
S(n + 1) = S(⌊(n + 1)/2⌋) + S(⌈(n + 1)/2⌉) + 1
= (⌊(n + 1)/2⌋ − 1) + (⌈(n + 1)/2⌉ − 1) + 1
=n+1−2+1
=n
Vậy P(n + 1) đúng.
.
..
Trần Vĩnh Đức | HUST | Ngày 7 tháng 8 năm 2013
.
..
.
..
.
. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..
.
..
.
..
.
..
.
..
14 / 22
.
Công thức truy hồi chia để trị
Công thức truy hồi Chia để trị
..Định nghĩa
Công thức truy hồi chia để trị có dạng
T(x) =
k
∑
ai T(bi x + ϵi (x)) + g(x)
i=1
với
a1 , a2 , . . . , ak > 0.
1 > b1 , b2 , . . . , bk > 0.
g(x) là một hàm thỏa mãn |g′ (x)| bị chặn bởi một đa thức.
.
|ϵi (x)| = O(x/ log2 x).
..
Trần Vĩnh Đức | HUST | Ngày 7 tháng 8 năm 2013
.
..
.
..
.
. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..
.
..
.
..
.
..
.
..
15 / 22
.
Công thức truy hồi chia để trị
Ví dụ
Công thức T(x) = 2T(x − 1) + 1 không phải chia để trị (b1 = 1).
..
Trần Vĩnh Đức | HUST | Ngày 7 tháng 8 năm 2013
.
..
.
..
.
. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..
.
..
.
..
.
..
.
..
16 / 22
.
Công thức truy hồi chia để trị
Ví dụ
Công thức T(x) = 2T(x − 1) + 1 không phải chia để trị (b1 = 1).
Công thức T(x) = 2T(x/2) + x − 1 là chia để trị
a1 = 2,
b1 = 1/2,
g(x) = x − 1.
..
Trần Vĩnh Đức | HUST | Ngày 7 tháng 8 năm 2013
.
..
.
..
.
. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..
.
..
.
..
.
..
.
..
16 / 22
.
Công thức truy hồi chia để trị
Ví dụ
Công thức T(x) = 2T(x − 1) + 1 không phải chia để trị (b1 = 1).
Công thức T(x) = 2T(x/2) + x − 1 là chia để trị
a1 = 2,
Công thức
b1 = 1/2,
g(x) = x − 1.
(⌈ x ⌉)
+S
+1
( x 2 (⌊ x ⌋ 2x ))
( x (⌈ x ⌉ x ))
=S
+
−
+S
+
−
+1
2
2
2
2
2
2
S(x) = S
(⌊ x ⌋)
là chia để trị với
a1 = 1,
b1 = 1/2,
a2 = 1,
b2 = 1/2,
⌊x⌋
x
− ,
⌈ 2x ⌉ 2x
ϵ2 (x) =
− ,
2
2
ϵ1 (x) =
g(x) = 1.
..
Trần Vĩnh Đức | HUST | Ngày 7 tháng 8 năm 2013
.
..
.
..
.
. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..
.
..
.
..
.
..
.
..
16 / 22
.
Công thức truy hồi chia để trị
Định lý Akra-Bazzi
..Định lý
Nếu T(x) là một công thức truy hồi chia để trị, thì
(
)
∫ x
g(u)
p
p
T(x) = Θ x + x
du
p+1
1 u
trong đó p là số thực thỏa mãn
k
∑
.
ai bi p = 1.
i=1
..
Trần Vĩnh Đức | HUST | Ngày 7 tháng 8 năm 2013
.
..
.
..
.
. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..
.
..
.
..
.
..
.
..
17 / 22
.
Công thức truy hồi chia để trị
Ví dụ 1
Công thức truy hồi
T(x) = 2T(x/2) + x − 1
là chia để trị với
a1 = 2,
b1 = 1/2,
g(x) = x − 1
k = 1,
Trước hết ta tìm p thỏa mãn
2(1/2)p = 1.
Ta được p = 1.
Theo công thức Akra-Bazzi ta được
(
)
∫ x
u−1
T(x) = Θ x + x
du
u2
))
(
(1
1
= Θ x + x ln x + − 1
x
= Θ (x ln x)
..
Trần Vĩnh Đức | HUST | Ngày 7 tháng 8 năm 2013
.
..
.
..
.
. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..
.
..
.
..
.
..
.
..
18 / 22
.
Công thức truy hồi chia để trị
Ví dụ 2
Công thức truy hồi
T(x) = 2T
là chia để trị với: a1 = 2,
(x)
8
+ T
2
9
b1 = 1/2,
(
3x
4
)
+ x2
a2 = 8/9,
b2 = 3/4,
g(x) = x2 .
Tìm p:
( )p
( )
1
8 3 p
2
+
= 1 =⇒ p = 2.
2
9 4
Theo công thức Akra-Bazzi, ta được:
(
∫ x 2 )
u
2
2
du
T(x) = Θ x + x
3
1 u
(
)
= Θ x2 + x2 ln x
= Θ(x2 ln x).
..
Trần Vĩnh Đức | HUST | Ngày 7 tháng 8 năm 2013
.
..
.
..
.
. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..
.
..
.
..
.
..
.
..
19 / 22
.
Công thức truy hồi chia để trị
Ví dụ 3
Xét công thức truy hồi chia để trị
T(x) = 3T(x/3) + 4T(x/4) + x2
Tìm p thỏa mãn công thức
3(1/3)p + 4(1/4)p = 1
Thử p = 1
1
1
3 +4 =2>1
3
4
Thử p = 2:
1 1
7
+ = <1
3 4
2
..
Trần Vĩnh Đức | HUST | Ngày 7 tháng 8 năm 2013
.
..
.
..
.
. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..
.
..
.
..
.
..
.
..
20 / 22
.
Công thức truy hồi chia để trị
Ví dụ 3 (tiếp)
(
(∫
p
p
x
))
u2
du
up+1
))
1
du
up−1
T(x) = Θ x + x
(
(∫1 x
= Θ xp + xp
1
(
)
= Θ xp + xp x2−p
(
)
= Θ xp + x2
( )
= Θ x2
(vì p < 2)
..
Trần Vĩnh Đức | HUST | Ngày 7 tháng 8 năm 2013
.
..
.
..
.
. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..
.
..
.
..
.
..
.
..
21 / 22
.