Tải bản đầy đủ (.doc) (37 trang)

Tiểu luận phân tích và thiết kế thuật toán hệ THỨC TRUY hồi

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 (649.18 KB, 37 trang )

Huế, 11- 2014
ĐẠI HỌC HUẾ
TRƯỜNG ĐẠI HỌC KHOA HỌC

TIỂU LUẬN
PHÂN TÍCH VÀ THIẾT KẾ THUẬT TOÁN
HỆ THỨC TRUY HỒI


Nhóm 9:
Trần Thị Kim Dung
Nguyễn Tiến Hoàng
Lớp KHMT Khóa 2012-2014
Người hướng dẫn: TS Hoàng Quang

MỤC LỤC
MỤC LỤC 2
I. MỞ ĐẦU 3
II. Nội dung 4
1 Phương pháp thế 6
1.1 Giải hệ thức truy hồi bằng phương pháp thế 6
1.2 Thực hiện tốt việc đoán nghiệm 7
1.3 Các điểm cần lưu ý 7
1.4 Tránh các bẫy 8
1.5 Thay đổi các biến 8
1.6 Nhận xét 11
2. Phương pháp cây đệ quy 13
2.1 Ý tưởng của phương pháp cây đệ qui 13
2.2 Nhận xét phương pháp cây đệ quy : 25
3 Phương pháp master 26
3.1 Định lý Master 26


3.2 Sử dụng phương pháp master 27
3.3 Chứng minh định lý master 29
III. KẾT LUẬN 37
I. MỞ ĐẦU
Xác định độ phức tạp của một thuật toán là công việc không hề đơn giản,
trước đây chúng ta đã làm quen với một số qui tắc để xác định độ phức tạp của
thuật toán (như qui tắc cộng, qui tắc nhân…) tuy nhiên đối với những thuật toán
phức tạp thì việc xác định độ phức tạp một cách chính xác là rất khó khăn đặc
biệt đối với những thuật toán sử dụng giải thuật đệ qui
Trong phần này, chúng ta sẽ đi nghiên cứu 3 phương pháp hết sức hữu
dụng để giải hệ thức truy hồi đại diện cho một giải thuật đệ qui:
- Phương pháp thế
- Phương pháp cây đệ qui
- Phương pháp Master (với định lý Master rất hay)
Từ đó có thể đưa ra được độ phức tạp của thuật toán một cách chính xác
Xin chân thành cảm ơn TS Hoàng Quang, giảng viên Khoa Công nghệ
thông tin Trường Đại học Khoa học Huế đã hướng dẫn chúng tôi hoàn thành
tiểu luận này.
II. Nội dung
Thời gian chạy của thuật toán đệ quy được mô tả bởi hệ thức truy hồi.
Công thức truy hồi là một đẳng thức hay một bất đẳng thức trong đó một hàm
được mô tả thông qua giá trị của chính hàm đó trên các đối số nhỏ hơn. Ví dụ,
thời gian chạy T(n) của thuật toán MERGE SORT được biểu diễn bằng hệ thức
truy hồi sau:
Θ(1) nếu n=1
2T(n/2) + Θ(n) nếu n>1
trong đó giải hệ thức truy hồi trên sẽ thu được T(n) = Θ(nlgn)
Phần này sẽ đề cập đến 3 phương pháp giải hệ thức truy hồi. Đó là phương
pháp thế (the substitution method), phương pháp cây đệ quy (the recursion-tree
method) và phương pháp master (the master method). Trong phương pháp thế,

chúng ta dự đoán thời gian thực hiện sẽ bị chặn bởi một đại lượng nào đó, thông
thường sẽ dự đoán chặn trên (upper bound) và sau đó dùng quy nạp toán học để
chứng minh dự đoán là đúng đắn. Trong phương pháp cây đệ quy, công thức
truy hồi được thể hiện dưới dạng cây. Cây đệ quy được xây dựng dần dần dựa
vào công thức đệ quy. Những nút ở từng mức trên cây đệ quy đại diện cho chi
phí (cost) phải gánh chịu ở mức đó trong quá trình phân rã. Thời gian thực hiện
thuật toán sẽ là tổng chi phí theo toàn bộ các mức của cây đệ quy. Dựa trên tổng
đó, chúng ta sẽ rút ra được đánh giá về thời gian thực hiện của thuật toán bằng
các biến đổi toán học. Phương pháp master áp dụng cho các công thức truy hồi
dạng:
T(n) = aT(n/b) + f(n)
trong đó: a ≥ 1, b > 1, f(n) là một hàm cho trước
Một số chi tiết cần lưu ý
Trên thực tế, chúng ta bỏ qua một số chi tiết khi thiết lập và giải công
thức truy hồi, đó là tính nguyên của đối số và điều kiện biên. Về tính nguyên của
đối số, nhận xét rằng thời gian chạy T(n) của thuật toán chỉ xác định với n
nguyên bởi vì đối với hầu hết các thuật toán kích thước dữ liệu vào là một số
nguyên. Ví dụ, công thức truy hồi mô tả thời gian chạy xấu nhất của thuật toán
MERGE SORT là như sau:
   



>Θ++

=
1)()2/(2)2/(2
1)1(
)(
nnnTnT

n
nT
Sau khi bỏ qua tính nguyên của đối số, thời gian chạy xấu nhất của thuật toán
MERGE-SORT được viết lại:
T(n) =
(1)
(2)
Θ(1) nếu n=1
2T(n/2) + Θ(n) nếu n>1
Chúng ta cũng có thể bỏ qua điều kiện biên vì cho dù giá trị biên(trường
hợp suy biến đệ quy) có thay đổi thì kết quả thu được sau khi giải công thức truy
hồi cũng không thay đổi nhiều bởi vì chúng chỉ hơn kém nhau một hằng số C
nào đó. Do vậy, độ phức tạp của thuật toán không phụ thuộc vào các điều kiện
biên ban đầu.
Khi giải hệ thức truy hồi, chúng ta thường bỏ qua các chi tiết như hàm sàn,
hàm trần, điều kiện biên. Sau khi thu được kết quả, chúng ta sẽ quay ngược trở
lại để xem xét ảnh hưởng của những chi tiết vừa được bỏ. Thông thường, những
chi tiết đó không ảnh hưởng đến kết quả.
T(n) =
(3)
1 Phương pháp thế
1.1 Giải hệ thức truy hồi bằng phương pháp thế
Giải hệ thức truy hồi bằng phương pháp thế gồm 2 bước:
1. Đoán dạng của nghiệm
2. Dùng quy nạp toán học để chứng minh tính đúng đắn của nghiệm được
đoán, đồng thời làm chính xác hóa nghiệm bằng cách tìm các hằng số phù hợp
Phương pháp thế là một phương pháp giải hệ thức truy hồi khá tự nhiên.
Nó rất hiệu quả, tuy nhiên chỉ áp dụng trong các trường hợp dạng của nghiệm là
dễ đoán.
Phương pháp thế có thể được sử dụng để đánh giá chặn trên hay chặn

dưới đối với hệ thức truy hồi. Ví dụ, chúng ta thử đánh giá chặn trên đối với hệ
thức truy hồi sau:
 
nnTnT
+=
)2/(2)(
Hệ thức truy hồi trên tương tự với hệ thức truy hồi (2) và (3). Chúng ta
đoán nghiệm là T(n) = O(nlgn). Phương pháp được dùng là chứng minh T(n) ≤
cnlgn với hằng số c thích hợp nào đó. Giả sử rằng giả thiết quy nạp đúng với
n/2, có nghĩa là T([n/2]) ≤ c[n/2]lg[n/2]. Thế bất đẳng thức ở giả thiết quy nạp
vào hệ thức truy hồi (4.4)
trong đó bất đẳng thức đúng với mọi c ≥1.
Việc chứng minh tính đúng đắn của suy đoán bằng quy nạp còn thể hiện ở
điều kiện biên. Thông thường, chúng ta chỉ ra rằng điều kiện biên trùng với
bước cơ sở trong chứng minh quy nạp, vì vậy nó là đúng đắn với sự suy đoán.
Đối với hệ thức truy hồi (4), chúng ta phải chỉ ra rằng có thể chọn hằng số c đủ
lớn để chặn trên T(n) ≤ cnlgn đúng với điều kiện biên. Tuy nhiên, yêu cầu này
đôi khi gây ra một số vấn đề. Giả sử T(1)=1. Với n=1 thì T(n) ≤ cnlgn dẫn đến
T(1) ≤ c1lg1 = 0 (mâu thuẫn với T(1)=1). Do đó, trường hợp cơ sở của chứng
minh quy nạp không thỏa mãn tính đúng đắn.
Sự khó khăn trong việc chứng minh giả thiết quy nạp với điều kiện biên
cho trước có thể dễ dàng khắc phục. Ví dụ, đối với hệ thức truy hồi (4) chúng ta
tận dụng ưu điểm của ký hiệu tiệm cận khi chỉ yêu cầu rằng T(n) ≤ cnlgn đối với
n ≥ n
0
, trong đó n
0
là một hằng số được chọn. Ý tưởng trên cho phép loại trừ
trường hợp không mong đợi T(1)=1 tương ứng với điều kiện biên. Nhận xét
rằng với n > 3, hệ thức truy hồi lúc này không còn phụ thuộc vào T(1). Từ đó,

chúng ta có thể thay thế T(1) bằng T(2) và T(3) như là trường hợp cơ sở của
phép chứng minh quy nạp. T(2) = 4 và T(3) = 5. Các bất đẳng thức T(2) ≤
(4)
c2lg2, T(3) ≤ c3lg3 đúng với c ≥ 2. Như vậy, với mọi c ≥ 2 có thể sử dụng các
trường hợp n=2 và n=3 như là các trường hợp cơ sở trong chứng minh quy nạp
cho hệ thức truy hồi (4.4)
1.2 Thực hiện tốt việc đoán nghiệm
Không có một phương pháp tổng quát nào để đưa ra cách đoán nghiệm chính
xác. Việc đoán nghiệm chủ yếu dựa vào kinh nghiệm. Nếu một hệ thức truy hồi
đã được khảo sát trước đó thì lần tiếp theo chúng ta gặp một hệ thức truy hồi
tương tự, chúng ta có thể đoán nghiệm tương tự với nghiệm của hệ thức truy hồi
mà ta đã biết. Ta xét hệ thức truy hồi như sau: T(n)=2T(n/2+17)+n
Bài toán có vẻ phức tạp với sự hiện diện của số 17 trong đối số. Tuy nhiên theo
trực giác số hạng bổ sung này thực chất không ảnh hưởng đến nghiệm đối với hệ
thức truy hồi. Khi n lớn, sự khác biệt giữa T(n/2 và T(n/2+17) là không lớn,
cả hai đều gần bằng nhau khi n đủ lớn. Ta đoán rằng T(n)=O(nlgn) mà ta có thể
xác minh đúng bằng phương pháp thế (xem bài tập 4.1-5)
Một cách khác để đưa ra một suy đoán tốt đó là chứng minh các cận trên và
cận dưới trên hệ thức truy hồi rồi thu nhỏ miền xác định bởi cận trên và cận dưới
cho đến khi nào chúng nằm khá gần với nghiệm của hệ thức truy hồi. Ví dụ: có
thể bắt đầu bằng một cận dưới T(n)=Ω(n) cho hệ thức truy hồi (4.4) và ta có thể
chứng minh cận trên ban đầu là T(n)=O(n
2
). Như vậy có thể từ từ hạ thấp cận
trên và nâng cận dưới lên cho đến khi chúng gần với T(n) nhất có thể, trong
trường hợp này tiệm cận sẽ là T(n)=Θ(nlgn)
1.3 Các điểm cần lưu ý
Có những trường hợp chúng ta có thể suy đoán đúng tiệm cận nghiệm của một
hệ thức truy hồi tuy nhiên quy nạp toán học lại không cho thấy như vậy. Xét hệ
thức truy hồi sau:

T(n)=T(n/2)+T(n/2)+1
Ta đoán rằng nghiệm là O(n), và gắng chứng tỏ T(n) ≤ cn với một chọn lựa thích
hợp cho hằng c. Thay thế suy đoán vào phép truy hồi ta có
T(n) ≤ c n/2+c n/2+1
= cn + 1
Điều này không hàm ý T(n) ≤ cn với bất kỳ chọn lựa nào của c, nó dẫn đến ta
thử một suy đoán lớn hơn, giả sử T(n)=O(n
2
), có thể được tạo để làm việc, thực
tế suy đoán của ta đối với nghiệm T(n)=O(n) là đúng đắn. Tuy nhiên để chứng
tỏ điều này ta phải tạo ra một giả thiết quy nạp mạnh hơn.
Suy đoán của ta là gần đúng chỉ để hụt hằng 1, một số hạng cấp thấp. Tuy
vậy phép quy nạp toán học sẽ không thực hiện được trừ khi ta chứng minh dạng
thức chính xác của giả thiết quy nạp. Để khắc phục khó khăn này, ta loại bỏ một
số hạng bậc thấp ra khỏi suy đoán trên đây. Suy đoán mới sẽ là T(n) ≤ cn-b, ở
đó b ≥ 0 là không đổi. Bây giờ ta có
T(n) ≤ (c n/2 - b) +(c n/2 - b)+1
= cn – 2b + 1
≤ cn – b
Với b ≥ 1, hằng c đủ lớn để thỏa mãn các điều kiện biên.
1.4 Tránh các bẫy
Một số lỗi thường gặp phải khi dùng ký hiệu tiệm cận, ví dụ trong hệ thức truy
hồi (4.4) ta có thể chứng minh sai T(n)=O(n) bằng cách suy đoán T(n) ≤ cn rồi
biện luận
T(n) ≤ 2(cn/2)+n
≤ cn + n
= O(n) ⇐ sai!
(c là một hằng số). Lỗi xảy ra vì ta chưa xác định được dạng chính xác của giả
thiết quy nạp, trong trường hợp này giả thiết T(n) ≤ cn là sai ngay từ ban đầu.
1.5 Thay đổi các biến

Đôi khi chỉ cần điều chỉnh nhỏ trong đối số là khiến một hệ thức truy hồi chưa
được xác định trở thành dạng tương tự như đã gặp trước đó. Xét hệ thức truy hồi
 
nnTnT lg)(2)(
+=
Có thể đơn giản hóa hệ thức truy hồi này bằng cách thay đổi các biến, để tiện
dụng ta sẽ không quan tâm về việc làm tròn các giá trị như
n
sẽ là các số
nguyên. Đặt m=lgn. Ta có: T(2
m
)=2T(2
m/2
)+m
Bây giờ ta có thể đặt lại S(m)=T(2
m
) để có được hệ thức truy hồi mới như sau:
S(m)=2S(m/2)+m
Hệ thức truy hồi mới tương tự như hệ thức (4.4) và cùng có nghiệm là S(m) =
O(mlgm). Thay đổi từ S(m) thành T(n) ta có T(n) = T(2m) = S(m) = O(mlgm) =
O(lgn.lglgn)
Bài tập:
Bài 1
Chứng tỏ nghiệm của T(n)=T(n/2+1 là O(lgn)
Ta đoán dạng của nghiệm là: T(n)=O(lg
2
n)
Chứng minh T(n) < lg
2
n

Xét T(n/2) = lg
2
(n/2)
T(n) = lg
2
(n/2)+1
= lg
2
n-lg
2
2+1
= lg
2
n
= O(lg
2
n)
Bài 2
Chứng tỏ nghiệm của T(n)=2T(n/2)+n là Ω(nlgn) kết luận nghiệm là Θ(nlgn)
Bài 3
Chứng tỏ rằng bằng lập một giả thuyết quy nạp khác ta có thể khắc phục khó
khăn bằng điều kiện biên T(1)=1 với hệ thức truy hồi (4.4) mà không điều chỉnh
các điều kiện biên với phép chứng minh quy nạp.
Bài 4
Chứng tỏ Θ(nlgn) là nghiệm cho hệ thức truy hồi “chính xác” (4.2) để sắp xếp
trộn.
Bài 5
Chứng tỏ nghiệm cho T(n)=2T((n/2)+17+n là O(nlgn)
Bài 6
Giải hệ thức truy hồi

1)(2)(
+=
nTnT
bằng cách thay đổi các biến.
Lời giải:
Bài 1
Ta chứng minh rằng T(n) ≤ clg n với hằng c > 0. (1)
Giả thiết T(

n/2

) ≤ c lg (

n/2

)
Thay vào phép toán (1) trên ta có:
T (n) ≤ 2 ( c lg (

n/2

) + 1
= c lg ( n ) – c lg (2) + 1
≤ c lg ( n ) với hằng
Vậy nghiệm của T (n) = T(

n/2

) + 1 là O(lg n)
Bài 2

Ta cần chứng minh rằng
T (n) ≤ O(n lg n) (2)
Giả thiết
T(

n/2

) ≤ c

n/2

lg (

n/2

)
Thay vào phép toán (2) trên ta có:
T (n)
≤ 2(c

n/2

lg (

n/2

)) + n
≤ c n lg (

n/2


) + n
= c n lg n – c n lg 2 + n
≤ c n lg n – c n + n
≤ c n lg n

T (n)
≤ c n lg n – c n + n
Trường hợp với c > 1 ta có:
T (n)
≤ c n lg n – c n + n =
O(n lg n)
Trường hợp với 0
<
c < 1
T (n)
≤ c n lg n +( 1 – c ) n =
Ω(n lg n)
Trường hợp với c = 1
T (n)
≤ c n lg n +( 1 – c ) n =
Θ(n lg n)
Vậy kết luận: nghiệm của
T (n) = 2T (


n/2

)
+ n là

Θ(n lg n).
Bài 3
Phương pháp quy nạp toán học yêu cầu ta chứng minh điều kiện biên. Chứng tỏ
hằng c ta chọn đủ lớn sao cho cận T(n)
≤ c n lg n áp dụng được cho điều kiện
biên.
Điều này có thể gặp vấn đề. Giả sử
T(1)=1 là điều kiện biên duy nhất của hệ
thức truy hồi, vậy T(n)
≤ c n lg n thay 1 vào ta có:
T(1)
≤ c 1 lg 1 = 0 ≠ 1 (theo
điều kiện
T(1)=1
)
Vậy để khắc phục điều kiện biên cụ thể ta chỉ cần chứng minh
T(n)
≤ c n lg n
với n ≥ n
0
, với n
0
là một hằng. Bây giờ ta xét điều kiện biên của phép quy nạy là
gộp n=2 và n=3 dưới dạng một phần của điều kiện biên. Ta có thể đặt T(2) và
T(3) là các điều kiện biên cho phép chứng minh quy nạy bởi n > 3 và hệ thức
truy hồi không phụ thuộc và T(1). Từ hệ thức truy hồi, ta suy ra T(2)=4 và
T(3)=5. Ta chọn c đủ lớn sao cho T(2) ≤ c 2 lg 2 và T(3) ≤ c3 lg 3. Chọn

c ≥ 2
là đủ. Ở đây ta tìm ra điều kiện biên với n đủ nhỏ.

Bài 4
Thời gian thực hiện thuật toán trộn MERGE SORT được tính bằng:
1
1
)()2/(2
)1(
)(
>
=



Θ+
Θ
=
n
n
nnT
nT
1. Biên trên O
Đoán nghiệm: T (n) ≤ dn lg n
Phương pháp thế:
T (n) ≤ T (n/2) + T (n/2) + cn
= 2T (n/2) + cn
= 2d ( n/2 ) lg (n/2) + cn
= dn lg ( n/2 ) + cn
= dn lg n – dn lg 2 + cn
= dn lg n – dn + cn
≤ dn lg n nếu d ≥ c
Vì vậy, T (n) = O(n lg n).

2. Biên dưới: Ω
Đoán nghiệm: T (n) ≥ dn lg n
Như phương pháp giải trên ta có:
T (n) = Ω(n lg n) nếu 0 < d ≤ c
Từ mức 1; T (n) = O(n lg n) và 2; T (n) = Ω(n lg n)
Ta kết luận rằng: T (n) = Θ(n lg n)
Bài 5
Đoán nghiệm: T (n) = O(n lg n)
Xét với: T (n/2) = c(n/2) lg (n/2)
Ta có T (n) = 2T (

n/2

)+ 17) + n
= T (

n/2

)+ 17) + T (

n/2

)+ 17) + n
Ở đây với n lớn thì sự khác nhau giữa T (

n/2

)+ 17) và T (

n/2


) là rất nhỏ. Kết
quả suy đoán là O(n lg n)
Vậy từ T (

n/2

)+ 17) ta chuyển về T (

n/2

). Thay T(n/2) vào hệ thức truy hồi
ta có
T (n) ≤ 2T (

n/2

) + n
= 2c(n/2) lg (n/2) + n
= cn lg (n/2) + n
= cn lg n – cn lg 2 + n
= cn lg n – cn + n

cn lg n với c ≥ 1
Vì vậy, T (n) = O(n lg n)
Bài 6
Đặt m = lg n ⇒ n = 2
m
Thay vào hệ thức ta có:
T (n) = T (2

m
) = 2T (2
m/2
) + 1
Đặt S (m) = T (2
m
) ta có:
S (m) = 2S (m/2) + 1
Đoán nghiệm cho hệ thức S (m) = O(m)
Xét S (m/2) = c(m/2)
Thay vào hệ thức ta có:
S (m) ≤ 2c (m/2) + 1
= cm + 1
Vì vậy, S (m) = O(m)
Thay T (2
m
) = S (m) = T (n)
Mà S (m) = O(m) suy ra: T (n) = O(m) = O(lg n)
1.6 Nhận xét
Phương pháp thế là phương pháp giải hệ thức truy hồi khá đơn giản, rất
hữu dụng đối với những hệ thức truy hồi có dạng nghiệm dễ đoán
Tuy nhiên không có cơ sở trong việc đoán nghiệm, chỉ dựa vào kinh
nghiệm của người làm, vì vậy dễ dẫn đến việc đoán nghiệm có thể không chính
xác
Để khắc phục điều này, chúng ta sẽ đi tìm hiểu về phương pháp Cây đệ
qui sẽ cung cấp thêm 1 phương pháp đoán nghiệm có sơ sở và chính xác hơn.
2. Phương pháp cây đệ quy
Cho dù phương pháp thế có thể cung cấp cho chúng ta một cách chứng
minh ngắn gọn, cô động để có một lời giải đúng cho hệ thức truy hồi, nhưng đôi
lúc chúng ta cũng gặp khó khăn để có tiến gần đến một dự đoán tốt.

2.1 Ý tưởng của phương pháp cây đệ qui
Trong cây đệ quy, mỗi nút đại diện cho một chi phí của từng bài toán con
được phân rã từ bài toán trước đó. Chúng ta cộng tất cả các chi phí của các nút
trên mỗi mức của cây và ghi ra chi phí của mức đó và sau đó chúng ta sẽ cộng
lại tất cả chi phí của những mức này để có được tổng chi phí của thuật toán.
Phương pháp cây đệ quy nó đặc biệt hữu dụng khi mà hệ thức truy hồi mô tả
thời gian thực hiện của giải thuật chia để trị.
Một cây đệ quy được sử dụng để tìm ra một dự đoán tốt, từ đó chúng ta
xác minh lại bằng phương pháp thế. Khi sử dụng cây đệ quy để tìm ra một
phỏng đoán tốt, thường chúng ta bỏ qua một số điều kiện biên và tính nguyên
của đối số, do vậy chúng ta phải kiểm tra lại sau đó. Trong phần này, chúng ta sẽ
sử dụng cây đệ quy để đoán nghiệm và trong phần cuối, chúng ta sẽ sử dụng cây
đệ quy để chứng minh các định lý mà các định lý đó được trình bày cơ bản trong
phần phương pháp master.
- Xét ví dụ của MERGE_SORT:
T(n)=2T(n/2) + cn (1)
- Phân rã bài toán trên :
Từ phân rã ta xây dựng cây đệ quy (1) được xây dựng dần dần như sau:
 
 
[ ]
)()2/()4/(22
)2/(2)(
=++=
+=
ncncnT
cnnTnT
- Cây hoàn chỉnh được xây dựng như dưới :
- Kích thước của bài toán giảm nếu chúng ta triển khai tiếp cho đến khi đạt
đến điều kiện biên.

- Giá trị của nút có độ sâu i là n/2
i
(tương ứng với chi phí phải gánh chịu
của bài toán con ở mức i)
- Kích thước của bài toán con đạt đến giá trị 1(nút lá) khi n/2
i
=1 (i=lgn
hoặc tương đương mức i=lgn)
- Tiếp đến ta tính chi phí cho mỗi mức của cây
- Số lượng nút của mức dưới gấp 2 lần số lượng nút của mức kề trên nó, vì
thế số nút tại độ sâu i là 2
i
nút và mỗi nút tại độ sâu i đóng góp chi phí là: c(n/2
i
)
- Vậy tổng chi phí tất cả các nút tại độ sâu i là: 2
i
c(n/2
i
) = cn
- Tại mức cuối cùng có n nút, mỗi nút đóng góp chi phí là c, vì vậy tổng chi
phí mức cuối cùng là: cn
- Thật vậy, T(n) = O(nlgn) là một cận trên của hệ thức truy hồi
T (n) = 2T (⌊n/2⌋)+cn
- Chúng ta muốn chỉ ra rằng T(n) ≤ dnlgn với d là một hằng số > 0
- Giả sử rằng giả thiết quy nạp đúng với n/2, có nghĩa là :
T (⌊n/2⌋) ≤ d⌊n/2⌋ lg(⌊n/2⌋).
- Thế bất đẳng thức ở giả thiết quy nạp vào hệ thức truy hồi ta có:
T(n) ≤ 2(d⌊n/2⌋lg(⌊n/2⌋)) + cn
≤ dn lg(n/2) + cn

= dn lg n - dn lg 2 + cn
= dn lg n - dn + cn
≤ dn lg n với d>=c
- Vậy nghiệm của T (n) = 2T(⌊n/2⌋) + cn là O(nlg n)
Xét ví dụ 2, chẳng hạn xét một cây đệ quy để đưa ra một dự đoán với hệ
thức truy hồi sau:
 
)()4/(3)(
2
nnTnT
Θ+=
. Chúng ta bắt đầu bằng cách tập
trung vào tìm cận trên cho lời giải này. Chúng ta sẽ tạo một cây đệ quy từ hệ
thức truy hồi T(n) = 3T(⌊n/4⌋) + cn
2
, với c>0.
Từ việc phân tích:
Ta xây dựng được cây đệ quy của hệ thức truy hồi

T(n) = 3T(⌊n/4⌋) + cn
2
như ở hình 4.1.Cho thuận tiện, chúng ta giả sử giá trị n chính xác là lũy thừa của
4. Phần (a) của hình hiển thị T(n) và ở trong phần (b) nó được mở rộng thành
một cây tương đương biểu thị phép đệ quy. Giá trị cn
2
tại gốc đại diện cho chi
phí của mức trên cùng của hệ thức truy hồi và 3 cây con của gốc của nó sẽ đại
diện cho chi phí nó gánh chịu bởi bài toán con với kích thước là n/4. Trong phần
(c) nêu tiến trình này tiến hành một bước xa hơn bằng cách mở rộng mỗi nút với
chi phí T(n/4) từ phần (b). Chi phí cho 3 nút con tại cấp thứ 2 là c(n/4)

2
. Chúng
ta tiếp tục mở rộng các nút trên cây bằng cách tách các thành phần cấu tạo của
nó như được xác định bằng phép truy hồi.
 
 
[ ]
 
[ ]
)16/()64/(33
)()4/()16/(33
)()4/(3)(
2
22
2
+Θ+=
Θ+Θ+=
Θ+=
nnT
nnnT
nnTnT
Hình 2 Cấu trúc của cây đệ quy của hệ thức truy hồi T(n) = 3T(⌊n/4⌋) + cn
2
.
Nhìn cấu trúc ở hình 2, cho ta thấy được hình thành cấu trúc cây đệ quy

T(n) = 3T(⌊n/4⌋) + cn
2
. Phần (a) chỉ ra T(n), và sự hình thành được tăng dần
lên từ (b) – (d) để tạo thành một cây đệ quy. Cây đệ quy hoàn chỉnh được hành

thành ở (d) có chiều cao log
4
n (có log
4
n + 1 mức).
Bởi vì kích thước của bài toán con giảm khi chúng ta triển khai tiếp cho đến khi
chúng ta đạt đến điều kiện biên. Làm sao để biết được khi nào thì kích thước bài
toán con là 1. Kích thước của bài toán con ở một nút với độ sâu i là n/4
i
. Do đó
kích thước của bài toán con đạt đến giá trị 1 khi mà n/4
i
=1 hoặc là tương đương
khi mức i =log
4
n
do vậy cây có log
4
n
+1 mức (0,1 ,2 log
4
n
).
Tiếp đến chúng ta tính chi phí cho mỗi mức của cây, số lượng nút của
mức dưới gấp 3 lần số lượng nút của mức kề trên nó và vì thế số nút tại độ sâu i
là 3
i
. bởi vậy kích thước của bài toán con sẽ giảm xuống với cấp số nhân hệ số 4
cho mỗi mức khi chúng ta đi từ gốc xuống, mỗi một nút tại độ sâu i với i = 0, 1,
2, 3, , log

4
n – 1 có chi phí là c(n/4
i
)
2
. Việc nhân lên chúng ta sẽ thấy tổng chi
phí của tất cả các nút tại độ sâu i với i = 0, 1, 2, , log
4
n - 1, là 3
i
c(n/4
i
)
2
=
(3/16)
i
cn
2
. Ở mức cuối cùng tại độ sâu log
4
n
có 3
log
4
n
nút nhưng mà 3
log
4
n

=
3log
4
n
.
( Vì theo tính chất của logarit ta có: log
4
n =
4log
log
3
3
n
Mà log
4
n =
4log
log
3
3
n
= log
4
3 . log
3
n = log
3
n
log
4

3
Vì vậy : 3
log
4
n
= 3
log
3
n
log
4
3
= n
log
4
3
)
Với mỗi nút chi phí đóng góp là T(1) vì vậy tổng chi phí của mức này là
3log
4
n
T(1) với
)(
3log
4
n
Θ

( Thực ra ở mức đỉnh có chi phí là cn
2

, mức tiếp theo kế dưới có chi phí
là: c(n/4)
2
+ c(n/4)
2
+ c(n/4)
2
= c(
2
16
3
n
), mức kế tiếp có chi phí: c(n/16)
2
+
c(n/16)
2
+ c(n/16)
2
+ c(n/16)
2
+ c(n/16)
2
+ c(n/16)
2
+ c(n/16)
2
+ c(n/16)
2
+ c(n/16)

2
= c
2
)
16
3
( n
… Và quá trình tiếp tục như vậy với các mức kế tiếp dưới . Với mức i
có 3
i
nút, mỗi nút có đóng góp với chi phí c(n/4
i
)
2
, vì vậy ở mức thấp hơn có
tổng chi phí là:
3
i
.c(n/4
i
)
2
= (3/16)
i
cn
2
, Ở mức cuối cùng tại độ sâu log
4
n
có 3

log
4
n
=
3log
4
n
nút với chi phí đóng góp là T(1). Vì vậy tổng chi phí của mức này là
3log
4
n
T(1)
với
)(
3log
4
n
Θ
.
Bây giờ chúng ta tính tổng chi phí của tất cả các mức để xác định chi phí
cho toàn bộ cây:
( )
)(
1)16/3(
1)16/3(
16
3
)(
16
3


16
3
16
3
)(
3log
2
log
1log
0
3log
2
3log
2
1log
2
2
22
4
4
4
4
4
4
ncn
ncn
ncncncncnnT
n
n

i
i
n
Θ+


=
Θ+






=
Θ+






++






++=



=

Trong công thức cuối này nó có dạng là tổng cấp số nhân vì vậy chúng ta
có:
Do đó chúng ta có thể đưa ra dự đoán T(n)= O(n
2
) cho hệ thức truy hồi
 
)()4/(3)(
2
nnTnT
Θ+=
.
Một câu hỏi đặt ra là nếu O(n
2
) là một cận trên của hệ thức truy hồi, thì nó phải
là một giới hạn chặt chưa, Tại sao? Lời gọi đệ qui đầu tiên đóng góp một chi phí
là Θ(n
2
), và vì vậy Ω(n
2
) phải là một cận dưới của hệ thức truy hồi.
Bây giờ chúng ta sử dụng phương pháp thế để kiểm chứng dự đoán của
chúng ta là đúng. Thật vậy, T(n) = O(n
2
) là một cận trên của hệ thức truy hồi T
(n) = 3T (⌊n/4⌋)+Θ(n
2

). Chúng ta muốn chỉ ra rằng T(n) ≤ dn
2
với d là một hằng
số > 0. Sử dụng tương tự như hằng số c >0 trước đó, Giả sử rằng giả thiết quy
nạp đúng với n/4, có nghĩa là : T([n/4]) ≤ d[n/4]
2
. Thế bất đẳng thức ở giả thiết
quy nạp vào hệ thức truy hồi ta có:
T(n) ≤ 3T(⌊n/4⌋) + cn
2
≤ 3d⌊n/4⌋
2
+ cn
2
≤ 3d(n/4)
2
+ cn
2
= 3/16 dn
2
+ cn
2
≤ dn
2
,
với điều kiện là d ≥ (
3
16
)c.
Ta xét với một ví dụ có phức tạp hơn, trong hình 3, biểu diễn cây đệ quy của hệ

thức truy hồi T (n) = T(n/3) +T(2n/3) + O(n).
Hình 3 Cây đệ quy đối với hệ thức truy hồi T(n) = T (n/3) + T (2n/3) + cn.
Như trước đây, chúng ta đưa giá trị c đại diện cho hệ số hằng trong số hạng
O(n). Khi chúng ta cộng các giá trị qua từng mức của cây đệ qui, thì ta có giá trị
của mọi mức là cn. Lộ trình dài nhất từ gốc tới nút lá là: n →(2/3)n → (2/3)
2
n
→ ···→ 1
Do (2/3)
k
n = 1 khi k = log
3/2
n, Chiều cao của cây là log
3/2
n.
Qua trực giác, chúng ta hy vọng lời giải của hệ thức truy hồi là
O(cnlog3/2 n) = O(nlg n). Tuy nhiên có một sự phức tạp ở đây: Chúng ta cần
xem xét tới chi phí của nút lá. Nếu cây đệ qui là một cây đầy đủ với chiều cao
log
3/2
n, ở đây sẽ có:
2
log
3/2
n
= n
log
3/2
2
nút lá. Từ đó chi phí của mỗi nút lá là một hằng số, tổng tất

cả chi phí của nút lá sẽ là
Θ
(n
log3/2 n
) tương ứng với ω(nlg n). Nhưng ở đây
không phải là cây nhị phân đầy đủ, vì thế nó có ít hơn n
log
3/2
2
. Hơn nữa khi
chúng ta đi từ dưới lên gốc số nút ngày càng ít vậy thì không phải tất cả các mức
đều có chi phí chính xác là cn, những mức ở phía dưới đóng góp ít hơn. Chúng
ta đã có tính toán chính xác tất cả chi phí, nhưng chú ý rằng trong trường hợp
này chúng ta đang cố gắng để có được một phỏng đoán, làm cơ sở cho việc sử
dụng phương pháp thế. Vậy thì làm cách nào để ta chứng minh được cận trên
đúng là O(nlg n).
Thật vậy, chúng ta có thể sử dụng phương pháp thế để xác nhận rằng O(nlgn) là
một cận trên cho lời giải của hệ thức truy hồi. Chúng ta có thể thấy điều đó nếu
giả thiết quy nạp là T(n) ≤ dnlgn, với d là một hằng số dương thích hợp. Ta có:
T(n) ≤ T(n/3) + T(2n/3) + cn
≤ d(n/3)lg(n/3) + d(2n/3)lg(2n/3) + cn
= (d(n/3)lgn - d(n/3)lg3) + (d(2n/3) lg n - d(2n/3)lg(3/2)) + cn
= dnlgn - d((n/3) lg3 + (2n/3) lg(3/2)) + cn
= dnlg n - d((n/3) lg 3 + (2n/3) lg 3 - (2n/3)lg 2) + cn
= dn lg n - dn(lg 3 - 2/3) + cn
≤ dn lg n,
d ≥ c/(lg 3 - (2/3)).
Bài tập:
Bài 1.
Sử dụng cây đệ qui để xác định một cận trên tiệm cận tốt trên hệ thức truy hồi

sau:
T(n) =3T(n/2) + n. Sử dụng phương pháp thế để chứng tỏ câu trả lời của
bạn.
Bài 2
Biện luận nghiệm cho hệ thức truy hồi T (n) = T (n/3) + T (2n/3) + cn, với c là
một hằng số là Ω(n lg n) bằng cách sử dụng cây đệ qui.
Bài 3
Vẽ cây đệ qui cho T (n) = 4T (⌊n/2⌋)+cn, với c là một hằng số và cung cấp cho
ta một một cận trên nghiệm của nó. Sử dụng phương pháp thế để kiểm chứng lại
cận này.
Bài 4
Sử dụng cây đệ qui cho ta chặn trên chặt nhất của nghiêm hệ thức truy hồi T(n)
= T(αn) +T((1 - α)n) + cn, ở đây α nằm trong khoảng 0 <α < 1 và c > 0 luôn là
hằng số.
Lời giải
Bài 1
Với hệ thức truy hồi:T(n) =3T(n/2) + n. Ta vẽ cây đệ qui như sau:
Ta thấy quá trình khai triển dừng khi n/2
i
= 1 khi i =lgn, nên cây có chiều
cao lgn. Chi phí của mỗi mức là (3/2)
i
n. Ở mức cuối cùng của độ sâu lgn cây
có :
(3
lgn
) nút lá, nhưng mà (3
lgn
) = (n
lg3

), với chi phí đóng góp là T(1). Vì vậy
tổng chi phí của mức này là
3lg
n
T(1) với
)(
3lg
n
Θ
.
Kết quả thu được ta có:
Vậy cận trên của hệ thức truy hồi là O(n
lg3
)
Chúng ta có thể sử dụng phương pháp thế để xác nhận rằng O(n
lg3
) là một cận
trên của hệ thức truy hồi.
(3/2)
lgn
n
Tổng cộng:O(n
lg3
)
T(1) T(1) T(1) T(1) T(1) T(1) T(1)
n
n/2n/2
n/4 n/4
n/4
n/4 n/4n/4

n/2
n/4 n/4
n/4
lgn
3/2n
n
(3/2)
i
n
Giả sử:
T(n/2) ≤ c(n/2)
lg3
– c(n/2).
T(n) = 3T(n/2)+n
≤ 3c(n/2)
lg3
–c(n/2)+n
=
Với c>2.
Vậy nghiệm của hệ thức truy hồi là
O(n
lg3
).
Bài 2
Ta dựng cây đệ quy như sau:
Lộ trình dài nhất từ gốc tới nút lá là n → (1/3)n → (1/3)
2
n → → 1, Do đó
(1/3)
k

n = 1 khi k = lg
3
n, nên chiều cao của cây là lg
3
n. Từ đó giá trị tai mỗi mức
của cây là trên n. Vậy nghiệm của hệ thức truy hồi tối thiểu là nlog
3
n = Ω(nlgn).
Bài 3
Dựng cây đệ quy dựa theo hệ thức truy hồi như sau:

Vẽ cây đệ quy như trên của T (n) = 4T (⌊n/2⌋)+cn. Ta có kích thước của
bài toán con ở một nút với độ sâu i là n/2
i
. Do đó kích thước của bài toán con đạt
đến giá trị 1 khi mà n/2
i
=1 hoặc là tương đương khi mức i =lg n . Do vậy cây có
lgn +1 mức (0,1 ,2 lgn ). Tiếp đến chúng ta tính chi phí cho mỗi mức của cây,
số lượng nút của mức dưới gấp 4 lần số lượng nút của mức kề trên nó và vì thế
số nút tại độ sâu i là 4
i
. bởi vậy kích thước của bài toán con sẽ giảm xuống với
cấp số nhân hệ số 4 cho mỗi mức khi chúng ta đi từ gốc xuống, mỗi nút tại độ
sâu i với i = 0, 1, 2, 3, , lgn – 1 có chi phí là 4
i
(⌊cn/2
i
⌋).
Ở mức cuối cùng tại độ sâu lgn có nút 4

i
=
4
lgn

nút với chi phí đóng góp là T(1) vì
vậy tổng chi phí của mức này là 4
lgn
Θ(1) = Θ(n
2
)
T (n) = 4T (⌊n/2⌋)+cn

=


=
1lg
0
i
.4
n
i
⌊cn/2
i
⌋ + Θ(n
2
)





=
1lg
0
i
.4
n
i
cn/2
i
+ Θ(n
2
)
= cn


=
1lg
0
i
.2
n
i
+ Θ(n
2
)
= cn .
12
12

lg


n
+ Θ(n
2
)
=
Θ(n
2
)
cn
cn/2cn/2 cn/2cn/2
cn/4cn/4 cn/4cn/4 cn/4cn/4 cn/4cn/4 cn/4cn/4 cn/4cn/4 cn/4cn/4 cn/4cn/4
lgn
cn
2
4
cn
(
2
4
)
i
cn
4
lgn
T(1) T(1) T(1) T(1) T(1) T(1) T(1) T(1)
Tổng: O(n
2

)
Thật vậy, chúng ta có thể sử dụng phương pháp thế để xác nhận rằng O(n
2
) là
một cận trên cho lời giải của hệ thức truy hồi T (n) = 4T (⌊n/2⌋)+cn. (2).
Giả sử:
T(n/2) ≤ (c⌊n/2⌋
2
– c⌊n/2⌋)
Ta có :
T (n) = 4T (⌊n/2⌋)+cn
≤ 4(c⌊n/2⌋
2
– ⌊n/2⌋)+ cn
< 4c((n/2)
2
– (n/2))+ cn
= cn
2
– 2cn + cn
= cn
2
– cn
Bài 4
Không mất tính tổng quát: Đặt α ≥ 1−α, vì thế 0 < 1−α ≤ ½ và 1/2 ≤ α < 1.
Vẽ cây đệ quy như trên của T(n) = T(αn) +T((1 - α)n) + cn. Ta có kích
thước của bài toán con ở một nút với độ sâu i là (1- α)
i
. Do đó kích thước của bài
toán con đạt đến giá trị 1 khi mà (1- α)

i
=1 hoặc là tương đương khi mức i = log
1/
(1-α)
n .
Vậy toàn bộ cây này có log
1/(1-α)
n mức, mỗi mức đóng góp với chi phí cn vì
thế chúng ta có thể đoán được Ω(n log1/(1−α) n) = Ω(n lg n). Nó có log1/(1−α)
n mức mỗi mức đóng góp ≤ cn vì thế chúng ta có thể đoán O(n log1/α n) = O(n
lg n).
Bây giờ chúng ta sử dụng phương pháp thế để chứng tỏ rằng T (n) = Θ(n lg n),
chứng tỏ rằng đó là cận trên của nó.
Chúng ta cần nhìn nhận rằng T (n) ≤ dn lg n với d là một hằng số thích hợp >0.
Nếu dn(α lg α + (1 − α) lg(1 − α)) + cn ≤ 0 thì điều kiện này tương đương với
d(α lg α + (1 − α) lg(1 − α)) ≤ −c .
Do 1/2 ≤ α < 1 and 0 < 1−α ≤ ½, chúng ta có that lgα < 0 và lg(1−α) < 0, theo đó
αlg α + (1 − α) lg(1 − α) < 0. Vì thế khi chúng ta nhân 2 vế với một đại lượng
thì chúng ta cần đảo chiều biểu thức.
hay
Ta thấy vế bên phải là một hằng số dương và vì thế với d thỏa mãn với các điều
kiện trên thì bất đẳng thức thỏa mãn.
Tìm cận dưới: chúng ta cần thấy rằng T (n) ≥ dnlgn với d là hằng số thích hợp
>0. Chúng ta chứng minh giống như trường hợp của cận trên thay ≥ bằng ≤.
Ta có được:
Bởi vậy: T (n) = Θ(n lg n).
2.2 Nhận xét phương pháp cây đệ quy :
Dùng phương pháp này ta có thể đoán nghiệm có cơ sở và chính xác hơn.
Nhưng cuối cùng cũng phải sử dụng lại phương pháp thế để kiểm chứng.
Thực chất hỗ trợ đoán nghiệm cho phương pháp thế.

×