Transcript Document

Recursion and
Recurrence Relations
Benchaporn Jantarakongkul
ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา
1
Recursive Definitions
• การเรียกซ้า(Recursion) เป็ นหลักการที่เกี่ยวข้องอย่างใกล้ชิดกับการอุปนัย
เชิงคณิ ตศาสตร์ (mathematical induction)
• ในการอุปนัย เราพิสูจน์วา่ ฟังก์ชนั ข้อความ(predicate) P เป็ นจริ ง สาหรับ
สมาชิกทุกตัวของเซตอนันต์ใดๆโดยพิสูจน์ค่าความจริ งของ predicate
สาหรับสมาชิกจานวนมาก ในรู ปของสมาชิกที่มีขนาดเล็กกว่า
• ในการนิยามแบบเรี ยกซ้ า(recursive definitions) เรานิยามฟังก์ชนั่
ฟังก์ชนั่ ข้อความ เซต หรื อโครงสร้างอื่นๆ บนโดเมนหรื อเอกภพสัมพัทธ์ใดๆใน
รู ปของสมาชิกที่มีขนาดเล็กกว่า
• การเรี ยกซ้า เป็ นรู ปแบบทัว่ ไปในการนิยามวัตถุใดๆ ในรู ปของตัวมันเอง
ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา
2
Recursively Defined Functions
ตัวอย่ าง เช่ น:
• ลาดับ {an} ของยกกาลังสอง 1,2,4,8,… นิยามโดย
an = 2n
เมื่อ n = 0, 1, 2, …
• และ สามารถนิยามแบบเรี ยกซ้ าได้ดงั นี้:
a0 = 1
an = 2an-1 เมื่อ n = 0, 1, 2, …
• จากตัวอย่าง จะเห็นได้ชดั ว่า อุปนัย และการเรี ยกซ้ านั้นมีหลักการคล้ายคลึงกัน
ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา
3
Recursively Defined Functions
• เราสามารถใช้วธิ ี ต่อไปนี้ ในการนิยามฟังก์ชนั่ ใดๆที่มีโดเมนเป็ นจานวนนับ:
• ขั้นพื้นฐาน(Base case): กาหนดค่าของฟังก์ชนั่ เมื่อ pre-image
เป็ นศูนย์(หาว่าค่า f(0)=?)
• ขั้นเรี ยกซ้ า(Recursion): สร้างกฎสาหรับหาค่าฟั งก์ชนั่ เมื่อ preimage เป็ นจานวนเต็มใดๆ จากค่าของฟังก์ชนั่ ที่มีค่า pre-image เป็ น
จานวนเต็มที่นอ้ ยกว่า
• การนิยามดังกล่าวข้างต้น เรี ยกว่า การเรี ยกซ้ า(recursive) หรื อการนิยาม
เชิงอุปนัย(inductive definition)
ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา
4
Recursively Defined Functions
ตัวอย่ าง เช่ น:
f(0) = 3
f(n) = 2f(n-1) + 3
f(0) = 3
f(1) = 2  f(0) + 3 = 23 + 3 = 9
f(2) = 2  f(1) + 3 = 29 + 3 = 21
f(3) = 2  f(2) + 3 = 221 + 3 = 45
f(4) = 2  f(3) + 3 = 245 + 3 = 93
จงหา f(5), f(6), f(7), f(8)
ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา
5
Recursive definition of Factorial
• กาหนดนิยามเชิงอุปนัย(แบบเรี ยกซ้ า) ของฟั งก์ชนั่ แฟคทอเรี ยล ดังนี้,
n
F(n) :≡ n! :≡  i= 12…n
i 1
– Base case: F(0) :≡ 1
– Recursive part: F(n) = (n)  F(n-1)
•
•
•
•
•
F(0) = 1
F(1) = 1  F(0) = 11 = 1
F(2) = 2  F(1) = 21 = 2
F(3) = 3  F(2) = 32 = 6
F(4) = 4  F(3) = 46 = 24
ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา
6
Examples
• จงเขียนนิยามแบบเรี ยกซ้ าของ:
i+n (i เป็ นจานวนเต็ม, n เป็ นจานวนนับ) โดยใช้รูปแบบ S(i) = i+1
a·n (a เป็ นจานวนจริ ง, n เป็ นจานวนนับ) โดยใช้การบวก
an (a เป็ นจานวนจริ ง, n เป็ นจานวนนับ) โดยใช้การคูณ
n
 a (สาหรับลาดับ {ai})
i
i n0
 a (สาหรับลาดับ {ai})
i
i 0
n
 S (สาหรับลาดับของเซต{Si})
i
i 0
ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา
7
i+n (i เป็ นจานวนเต็ม, n เป็ นจานวนนับ)
โดยใช้รูปแบบ S(i) = i+1
•
•
•
•
ชุดลาดับของ i+n ได้แก่ i+0, i+1, i+2, i+3,…
Base case คือ S(0) = i
Recursive part คือ S(n) = S(n-1)+1
จะได้ ว่า S(0) = i
S(1) = S(0) +1 = i+1
S(2) = S(1) +1 = (i+1)+1 = i+2
S(3) = S(2) +1 = (i+2)+1 = i+3 …
ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา
8
∑0≤i≤n ai (สาหรับอนุกรมของจานวน {ai})
n
a
i 0
i
 a0  a1  a2  ...  an
0
• Base case คือ  a na n1
• Recursive part คือ  ai   ai  an
i 0
i 0
• จะได้ ว่า  a  a
i 0
i
0
0
i 0
i
1
a
i 0
i
2
a
i 0
i
3
a
i 0
...
i
0

0
a
i 0

1
a
i 0

i
i
2
a
i 0
i
 a1 a0  a1
 a2 a0  a1  a2
 a3 a0  a1  a2  a3
ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา
9
The Fibonacci Series
• อนุกรมไฟโบแนซซี (Fibonacci series) fn≥0 นิยามโดย:
f0 :≡ 0, f1 :≡ 1, fn≥2 :≡ fn−1 + fn−2
f(4)
f(0) = 0
f(1) = 1
f(3)
f(2) = f(1) + f(0) = 1 + 0 = 1
f(2)
f(3) = f(2) + f(1) = 1 + 1 = 2
f(1) f(1)
f(4) = f(3) + f(2) = 2 + 1 = 3
f(1)
.
f(0)
.
.
ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา
f(2)
f(0)
10
Recursive Algorithms
•สาหรับอัลกอริ ธึมแบบเรี ยกซ้ า(Recursive)ใดๆ จะมีอลั กอริ ธึมแบบวนลูป
(Iterative)ที่สมมูล(ให้ผลลัพธ์ที่เหมือนกัน)กันเสมอ
•อัลกอริ ธึมแบบเรี ยกซ้ า มักจะสั้นกว่า และง่ายต่อการทาความเข้าใจมากกว่า
•อย่างไรก็ตาม อัลกอริ ธึมแบบวนลูปมักจะมีประสิ ทธิ ภาพมากกว่าในแง่ของการ
ใช้พ้นื ที่และเวลาที่นอ้ ยกว่าอัลกอริ ธึมแบบเรี ยกซ้ า
ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา
11
Recursive Fibonacci Algorithm
procedure fibo(n: nonnegative integer)
if n  1 then
return n
else
return fibo(n – 1) + fibo(n – 2)
ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา
12
Recursive Algorithms
• ตัวอย่าง: อัลกอริ ธึมสาหรับการคานวณค่า an
procedure power(a≠0: real, nN)
if n = 0 then return 1
else return a · power(a, n−1)
ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา
13
อัลกอริ ธึมคานวณค่า an แบบวนลูป(Iterative)
procedure power(a≠0: real, nN)
if n = 0 then return 1
else
begin
x := 1
for i := 1 to n
begin
x := x * a
end
end
return x
ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา
14
Recurrence Relations
ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา
15
Recurrence Relations
• ความสัมพันธ์เวียนเกิด(recurrence relation) ของลาดับ {an} คือ
สมการที่แสดง an ในรู ปของสมาชิกก่อนหน้า a0, …, an−1 ของลาดับ
นั้นๆ สาหรับทุกค่า n≥n0
– จะเห็นว่ า ความสัมพันธ์ เวียนเกิดนั้นนิยามได้ เช่ นเดียวกับ การนิยามแบบเรี ยกซา้
แตกต่ างกันที่ไม่ มีกรณี พืน้ ฐาน(base cases)
• เราสามารถใช้ ลาดับใดๆที่ไม่อยูใ่ นรู ปของการเรี ยกซ้ า เป็ นผลเฉลยของ
ความสัมพันธ์เวียนเกิดที่กาหนดได้ หากลาดับดังกล่าวสอดคล้องกับนิยามของ
การเวียนเกิด
– ความสัมพันธ์เวียนเกิดหนึ่งๆ อาจมีผลเฉลยได้มากกว่าหนึ่งผลเฉลย
ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา
16
Recurrence Relation Example
• พิจารณาความสัมพันธ์เวียนเกิด
an = 2an−1 − an−2 (n≥2)
• ลาดับต่อไปนี้เป็ นผลเฉลยของความสัมพันธ์ขา้ งต้นหรื อไม่?
Yes
an = 3n
an = 2n
No
Yes
an = 5
ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา
17
Recurrence Relations
ตัวอย่ าง: พิจารณาความสัมพันธ์เวียนเกิด
an = 2an-1 – an-2 for n = 2, 3, 4, …
•ลาดับ {an} เมื่อ an=3n เป็ นผลเฉลยของความสัมพันธ์เวียนเกิดที่กาหนดหรื อไม่?
สาหรับ n  2 จะได้วา่
2an-1 – an-2 = 2(3(n – 1)) – 3(n – 2) = 3n = an
ดังนั้น {an} เมื่อ an=3n เป็ นผลเฉลยของความสัมพันธ์เวียนเกิดที่กาหนด
•ลาดับ {an} เมื่อ an=5 เป็ นผลเฉลยของความสัมพันธ์เวียนเกิดข้างต้นหรื อไม่?
เมื่อ n  2 จะได้วา่
2an-1 – an-2 = 25 - 5 = 5 = an
ดังนั้น {an} เมื่อ an=5 เป็ นผลเฉลยของความสัมพันธ์เวียนเกิดข้างต้น
ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา
18
Example Applications
• ความสัมพันธ์เวียนเกิดของการฝากเงินธนาคารที่อตั ราดอกเบี้ย
P% ต่อช่วงเวลาที่กาหนด:
Mn = Mn−1 + (P/100)Mn−1
• การเติบโตของประชากรสิ่ งมีชีวติ ชนิ ดหนึ่ งเมื่อเกิดมามีอายุได้สองช่วงเวลา
จะให้กาเนิดสิ่ งมีชีวิตใหม่ 1 ชีวติ ทุกๆช่วงเวลา คือ
Pn = Pn−1 + Pn−2 (ความสัมพันธ์ Fibonacci)
ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา
19
Solving Compound Interest RR
• Mn = Mn−1 + (P/100)Mn−1
= (1 + P/100) Mn−1
= r Mn−1
(ให้ r = 1 + P/100)
= r (r Mn−2)
= r·r·(r Mn−3)
…เช่นนี้ ไปเรื่ อยๆ…
= rn M0
ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา
20
Modeling with Recurrence Relations
ตัวอย่าง:
•นายภักดี ฝากเงิน 10,000 บาทไว้ในบัญชีออมทรัพย์ ที่ให้ดอกเบี้ย 5% ต่อ
ปี สะสมไว้เป็ นเงินฝากต่อไปทุกปี เมื่อเวลาผ่านไป 30 ปี เงินในบัญชีเงินฝาก
ของนายภักดีจะเป็ นเท่าไร?
วิธีทา:
•ให้ Mn แทนจานวนเงินในบัญชีหลังจากเวลาผ่านไป n ปี
•จงเขียน Mn ในรู ปของ Mn-1?
ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา
21
Modeling with Recurrence Relations
•เราสามารถเขียนความสัมพันธ์เวียนเกิดของ Mn ในรู ปของ Mn-1 ได้ดงั นี้:
•Mn = Mn-1 + 0.05Mn-1 = 1.05Mn-1
•เงื่อนไขเริ่ มต้น คือ M0 = 10,000
•ดังนั้น จะได้วา่ :
•M1 = 1.05M0
•M2 = 1.05M1 = (1.05)2M0
•M3 = 1.05M2 = (1.05)3M0
•…
•Mn = 1.05Mn-1 = (1.05)nM0
•จะเห็นว่า ได้สูตรสาหรับคานวณค่า Mn สาหรับจานวนนับ n ใดๆได้ โดยไม่จาเป็ นต้องทา
การคานวณเรี ยกซ้ าหลายครั้ง
ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา
22
Modeling with Recurrence Relations
•จึงสามารถใช้สูตรที่หาได้คานวณหา M30 ภายใต้เงื่อนไขเริ่ มต้น
M0 = 10,000:
M30 = (1.05)3010,000 = 43,219.42
ดังนั้นเมื่อผ่านไป 30 ปี เงินฝากในบัญชีจะมีเงินทั้งหมด 43,219.42
บาท
•ถ้านายภักดี ฝากเงินเพิ่มปี ละ 500 บาททุกๆต้นปี จะเขียน
ความสัมพันธ์เวียนเกิดของ Mn ในรู ปของ Mn-1 ได้ดงั นี้:
Mn = (Mn-1 + 500) + 0.05(Mn-1 + 500)
= 1.05(Mn-1 + 500)
ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา
23
Tower of Hanoi Example
• ปัญหา: ย้ายแผ่นดิสก์จากหลักที่ 1 ไปยังหลักที่ 2
– กฎ: (a) แต่ละครั้งย้ายได้เพียงแผ่นเดียว
– (b) แผ่นดิสก์ที่ใหญ่กว่าจะอยูบ่ นแผ่นที่เล็กกว่าไม่ได้
หลัก #1
หลัก #2
ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา
หลัก #3
24
Hanoi Recurrence Relation
• ให้ Hn = จานวนครั้งของการย้ายแผ่นดิสก์ n แผ่น
วิธีการย้ ายแผ่ นดิสก์ :
• ย้ายแผ่นดิสก์ n−1 แผ่นที่อยูด่ า้ นบนไปยังหลักอื่นๆ (มีการย้ายแผ่น
Hn−1 ครั้ง)
• ย้ายแผ่นดิสก์ที่อยูด่ า้ นล่าง(ย้าย 1 ครั้ง)
• ย้ายแผ่นดิสก์ n−1 แผ่นที่อยูด่ า้ นบน(ที่ยา้ ยไปไว้ยงั หลักอื่น)ไปไว้บน
แผ่นที่อยูด่ า้ นล่าง (มีการย้ายแผ่น Hn−1 ครั้ง)
• ดังนั้นความสั มพันธ์ เวียนเกิดแทนจานวนครั้งของการย้ ายแผ่นดิสก์ คือ:
Hn = 2Hn−1 + 1
ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา
25
การหาผลเฉลยรู ปแบบปิ ด(Closed form solution)
ของความสัมพันธ์เวียนเกิด
Hn = 2 Hn−1 + 1
= 2 (2 Hn−2 + 1) + 1
= 22 Hn−2 + 2 + 1
= 22(2 Hn−3 + 1) + 2 + 1 = 23 Hn−3 + 22 + 2 + 1
…
= 2n−1 H1 + 2n−2 + … + 2 + 1
(เพราะ H1 = 1)
= 2n−1 + 2n−2 + … + 2 + 1
n 1
=
2
i
i 0
n 1
(
r
 1)
i
ar  a
,r 1

(r  1)
i 0
n
= 2n − 1
ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา
26