Tải bản đầy đủ (.pdf) (26 trang)

Bài giảng công thức truy hồi chia để trị trần vĩnh đức

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (798.37 KB, 26 trang )

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



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

.


×