Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 26 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
26
Dung lượng
798,37 KB
Nội dung
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 tháng năm 2013 Tham khảo: Mathematics for CS, MIT Trần Vĩnh Đức | HUST | Ngày tháng năm 2013 / 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 tháng năm 2013 / 22 Có cọc cọc đặt n đĩa với đường kính giảm dần Cần lần di chuyển để chuyển hết n đĩa sang cọc bên cạnh cho • lần di chuyển đĩa • đĩa dịch chuyển từ cọc sang cọc khác bất kỳ, không để đĩa lớn lên đĩ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 cho n đĩa T1 = T2 = T3 ≤ Trần Vĩnh Đức | HUST | Ngày tháng năm 2013 / 22 Công thức truy hồiThe chiaTowers để trị of Hanoi 10.1 285 Figure 10.2 The 7-step solution to the Towers of Hanoi problem when there are Hình : Lời giải gồm bước toán với đĩa n D disks Trần Vĩnh Đức | HUST | Ngày tháng năm 2013 / 22 Công thức truy hồi chia để trị Cận Figure 10.2 The 7-step solution to the Towers of Hanoi problem when there are Tn ≤ Tn−1 + + Tn−1 = 2Tn−1 + n D disks Figure 10.3 A recursive solution to the Towers of Hanoi problem Trần Vĩnh Đức | HUST | Ngày tháng năm 2013 / 22 Ta có lời giải đệ quy sau: • Đầu tiên chuyển n − đĩa từ cột sang cột 3: Cần Tn−1 bước • Chuyển đĩa n sang cột 2: Cần bước • Chuyển n − đĩa từ cột sang cột 2: Cần Tn−1 bước Vậy Tn ≤ Tn−1 + + Tn−1 = 2Tn−1 + .Ví dụ • T3 ≤ · + = • T4 ≤ · + = 15 Công thức truy hồi chia để trị Cận Để chuyển đĩa n lớn sang cột 2: Ta phải chuyển n − đĩa sang cột 3: ≥ Tn−1 bước Chuyển đĩa n sang cột (sau bước cuối chuyển đĩa n): ≥ bước Để chuyển n − đĩa từ cột sang cột 2: ≥ Tn−1 bước Vậy ta Tn ≥ Tn−1 + + Tn−1 = 2Tn−1 + Trần Vĩnh Đức | HUST | Ngày tháng năm 2013 / 22 Công thức truy hồi chia để trị Công thức tường minh Tn = 2Tn−1 + = 2n − Chứng minh quy nạp theo n Đặt P(n) mệnh đề ”Tn = 2n − 1” Bước sở: T1 = 21 − = Bước quy nạp: Giả sử Tn = 2n − Ta có Tn+1 = 2Tn + = 2(2n − 1) + = 2n+1 − Vậy mệnh đề P(n + 1) Trần Vĩnh Đức | HUST | Ngày tháng năm 2013 / 22 Công thức truy hồi chia để trị Một chứng minh khác Tn = + 2Tn−1 = + 2(1 + 2Tn−1 ) = + + 4(1 + 2Tn−3 ) = + + + 8Tn−3 = + + + · · · + 2n−2 + 2n−1 T1 = 2n − Trần Vĩnh Đức | HUST | Ngày tháng năm 2013 / 22 Công thức truy hồi chia để trị Ví dụ Ta xếp dãy sau theo thứ tự tăng dần 10, 7, 23, 5, 2, 8, 6, → (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, 6, 8, 6, 8, 8, 8, 9 Kết 2, 2, 5, 2, 5, 6, 2, 5, 6, 7, 2, 5, 6, 7, 8, 2, 5, 6, 7, 8, 9, 10, 23 Trần Vĩnh Đức | HUST | Ngày tháng 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 − phép so sánh Sắp xếp hai dãy cần 2T(n/2) phép so sánh Vậy ta { T(n) = 2T(n/2) + n − T(1) = Ví dụ T(2) = T(8) = · + = 17 T(4) = T(16) = · 17 + 15 = 49 Trần Vĩnh Đức | HUST | Ngày tháng năm 2013 11 / 22 Công thức truy hồi chia để trị Công thức tường minh T(n) = n − + 2T(n/2) = n − + 2(n/2 − + 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 + Trần Vĩnh Đức | HUST | Ngày tháng 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) = S(n) = S(⌊n/2⌋) + S(⌈n/2⌉) + Ta thử với vài ví dụ S(1) = S(2) = S(3) = S(4) = S(5) = + + = Dự đoán: S(n) = n − Trần Vĩnh Đức | HUST | Ngày tháng năm 2013 13 / 22 Công thức truy hồi chia để trị S(n) = n − Kiểm tra quy nạp mạnh Đặt P(n) mệnh đề ”S(n) = n − 1” Bước sở: P(1) = Bước quy nạp: Giả sử P(1), P(2), , P(n) S(n + 1) = S(⌊(n + 1)/2⌋) + S(⌈(n + 1)/2⌉) + = (⌊(n + 1)/2⌋ − 1) + (⌈(n + 1)/2⌉ − 1) + =n+1−2+1 =n Vậy P(n + 1) Trần Vĩnh Đức | HUST | Ngày tháng 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 ∑ T(bi x + ϵi (x)) + g(x) i=1 với a1 , a2 , , ak > > b1 , b2 , , bk > g(x) hàm thỏa mãn |g′ (x)| bị chặn đa thức |ϵi (x)| = O(x/ log2 x) Trần Vĩnh Đức | HUST | Ngày tháng 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) + chia để trị (b1 = 1) Trần Vĩnh Đức | HUST | Ngày tháng 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) + chia để trị (b1 = 1) Công thức T(x) = 2T(x/2) + x − chia để trị a1 = 2, b1 = 1/2, g(x) = x − Trần Vĩnh Đức | HUST | Ngày tháng 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) + chia để trị (b1 = 1) Công thức T(x) = 2T(x/2) + x − chia để trị a1 = 2, Công thức b1 = 1/2, g(x) = x − (⌈ x ⌉) +S +1 ( x (⌊ x ⌋ 2x )) ( x (⌈ x ⌉ x )) =S + − +S + − +1 2 2 2 S(x) = S (⌊ x ⌋) chia để trị với a1 = 1, b1 = 1/2, a2 = 1, b2 = 1/2, ⌊x⌋ x − , ⌈ 2x ⌉ 2x ϵ2 (x) = − , 2 ϵ1 (x) = g(x) = Trần Vĩnh Đức | HUST | Ngày tháng năm 2013 16 / 22 Công thức truy hồi chia để trị Định lý Akra-Bazzi Định lý Nếu T(x) công thức truy hồi chia để trị, ( ) ∫ x g(u) p p T(x) = Θ x + x du p+1 u p số thực thỏa mãn k ∑ bi p = i=1 Trần Vĩnh Đức | HUST | Ngày tháng năm 2013 17 / 22 Công thức truy hồi chia để trị Ví dụ Công thức truy hồi T(x) = 2T(x/2) + x − chia để trị với a1 = 2, b1 = 1/2, g(x) = x − k = 1, Trước hết ta tìm p thỏa mãn 2(1/2)p = Ta p = Theo công thức Akra-Bazzi ta ( ) ∫ x u−1 T(x) = Θ x + x du u2 )) ( (1 = Θ x + x ln x + − x = Θ (x ln x) Trần Vĩnh Đức | HUST | Ngày tháng năm 2013 18 / 22 Công thức truy hồi chia để trị Ví dụ Công thức truy hồi T(x) = 2T chia để trị với: a1 = 2, (x) + T b1 = 1/2, ( 3x ) + x2 a2 = 8/9, b2 = 3/4, g(x) = x2 Tìm p: ( )p ( ) p + = =⇒ p = 2 Theo công thức Akra-Bazzi, ta được: ( ∫ x ) u 2 du T(x) = Θ x + x u ( ) = Θ x2 + x2 ln x = Θ(x2 ln x) Trần Vĩnh Đức | HUST | Ngày tháng năm 2013 19 / 22 Công thức truy hồi chia để trị Ví dụ 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 = Thử p = 1 +4 =2>1 Thử p = 2: 1 + = [...]... 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 |... 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... 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í... 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. .. 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. .. 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.. .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... 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) Trần Vĩnh Đức | HUST | Ngày tháng 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ó... (b1 = 1) Trần Vĩnh Đức | HUST | Ngày tháng 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) + chia để trị (b1 = 1) Công thức T(x)... + − x = Θ (x ln x) Trần Vĩnh Đức | HUST | Ngày tháng năm 2013 18 / 22 Công thức truy hồi chia để trị Ví dụ Công thức truy hồi T(x) = 2T chia để trị với: a1 = 2, (x)