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?
26 trang |
Chia sẻ: NamTDH | Lượt xem: 1448 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Công thức truy hồi chia để trị, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
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
1Tham 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ồi chia để trị
. .
.
“mcs-ftl” — 2010/9/8 — 0:40 — page 285 — #291
10.1. The Towers of Hanoi 285
2
3
4
5
6
7
8
Figure 10.2 The 7-step solution to the Towers of Hanoi problem when there are
n D 3 disks.
2
3
4
Figure 10.3 A recursive solution to the Towers of Hanoi problem.
Hình : Lời giải gồm 7 bước khi bài toán với 3 đĩa
Trần Vĩnh Đức | HUST | Ngày 7 tháng 8 năm 2013 4 / 22
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
Công thức truy hồi chia để trị
Cận trên
Tn Tn 1 + 1 + Tn 1 = 2Tn 1 + 1:
“mcs-ftl” — 2010/9/8 — 0:40 — page 285 — #291
10.1. The Towers of Hanoi 285
2
3
4
5
6
7
8
Figure 10.2 The 7-step solution to the Towers of Hanoi problem when there are
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 1T1
= 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 và xn/2+1; xn/2+2; : : : ; xn
2 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 Nửa sau Kết quả
5; 7; 10; 23 2; 6; 8; 9
5; 7; 10; 23 6; 8; 9 2
7; 10; 23 6; 8; 9 2; 5
7; 10; 23 8; 9 2; 5; 6
10; 23 8; 9 2; 5; 6; 7
10; 23 9 2; 5; 6; 7; 8
10; 23 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(4) = 5
T(8) = 2 5 + 7 = 17
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) + 2iT(n/2i)
: : :
= (n 1) + (n 2) + + (n 2logn 1) + 2lognT(1)
=
logn 1∑
i=0
(
n 2i) = logn 1∑
i=0
n
logn 1∑
i=0
2i
= n logn (2logn 1)
= n logn 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∑
i=1
aiT(bix+ ϵi(x)) + g(x)
với
a1; a2; : : : ; ak > 0.
1 > b1; b2; : : : ; bk > 0.
g(x) là một hàm thỏa mãn jg′(x)j bị chặn bởi một đa thức.
jϵi(x)j = 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).
Công thức T(x) = 2T(x/2) + x 1 là chia để trị
a1 = 2; b1 = 1/2; g(x) = x 1:
Công thức
S(x) = S
(⌊x
2
⌋)
+ S
(⌈x
2
⌉)
+ 1
= S
(x
2
+
(⌊x
2
⌋
x
2
))
+ S
(x
2
+
(⌈x
2
⌉
x
2
))
+ 1
là chia để trị với
a1 = 1; b1 = 1/2; ϵ1(x) =
⌊x
2
⌋
x
2
;
a2 = 1; b2 = 1/2; ϵ2(x) =
⌈x
2
⌉
x
2
;
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ị
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:
Công thức
S(x) = S
(⌊x
2
⌋)
+ S
(⌈x
2
⌉)
+ 1
= S
(x
2
+
(⌊x
2
⌋
x
2
))
+ S
(x
2
+
(⌈x
2
⌉
x
2
))
+ 1
là chia để trị với
a1 = 1; b1 = 1/2; ϵ1(x) =
⌊x
2
⌋
x
2
;
a2 = 1; b2 = 1/2; ϵ2(x) =
⌈x
2
⌉
x
2
;
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ị
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:
Công thức
S(x) = S
(⌊x
2
⌋)
+ S
(⌈x
2
⌉)
+ 1
= S
(x
2
+
(⌊x
2
⌋
x
2
))
+ S
(x
2
+
(⌈x
2
⌉
x
2
))
+ 1
là chia để trị với
a1 = 1; b1 = 1/2; ϵ1(x) =
⌊x
2
⌋
x
2
;
a2 = 1; b2 = 1/2; ϵ2(x) =
⌈x
2
⌉
x
2
;
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ì
T(x) =
(
xp + xp
∫ x
1
g(u)
up+1 du
)
trong đó p là số thực thỏa mãn
k∑
i=1
aibip = 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; k = 1; g(x) = x 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
T(x) =
(
x+ x
∫ x
1
u 1
u2 du
)
=
(
x+ x
(
ln x+ 1x 1
))
= (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
(x
2
)
+
8
9
T
(
3x
4
)
+ x2
là chia để trị với: a1 = 2; b1 = 1/2; a2 = 8/9; b2 = 3/4; g(x) = x2:
Tìm p:
2
(
1
2
)p
+
8
9
(
3
4
)p
= 1 =) p = 2:
Theo công thức Akra-Bazzi, ta được:
T(x) =
(
x2 + x2
∫ x
1
u2
u3 du
)
=
(
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
3
1
3
+ 4
1
4
= 2 > 1
Thử p = 2:
1
3
+
1
4
=
7
2
< 1
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)
T(x) =
(
xp + xp
(∫ x
1
u2
up+1 du
))
=
(
xp + xp
(∫ x
1
1
up 1 du
))
=
(
xp + xpx2 p
)
=
(
xp + x2
)
=
(
x2
)
(vì p < 2)
Trần Vĩnh Đức | HUST | Ngày 7 tháng 8 năm 2013 21 / 22
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
..
.
Công thức truy hồi chia để trị
Tổng quát hóa Ví dụ 3
. .Định lý
.
Nếu g(x) = (xt) với t 0 và ∑ki=1 aibit < 1, thì ta có
T(x) = (g(x)):
Trần Vĩnh Đức | HUST | Ngày 7 tháng 8 năm 2013 22 / 22
Các file đính kèm theo tài liệu này:
- truyhoi1_1844.pdf