1 / 35

Recursion and Recurrence Relations

Recursion and Recurrence Relations. Recursive Definitions. การเรียกซ้ำ( Recursion ) เป็นหลักการที่เกี่ยวข้องอย่างใกล้ชิดกับการอุปนัยเชิงคณิตศาสตร์( mathematical induction )

arne
Download Presentation

Recursion and Recurrence Relations

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Recursion and Recurrence Relations Faculty of Informatics, Burapha University

  2. Recursive Definitions การเรียกซ้ำ(Recursion)เป็นหลักการที่เกี่ยวข้องอย่างใกล้ชิดกับการอุปนัยเชิงคณิตศาสตร์(mathematical induction) ในการอุปนัย เราพิสูจน์ว่าฟังก์ชันข้อความ(predicate) Pเป็นจริง สำหรับสมาชิกทุกตัวของเซตอนันต์ใดๆโดยพิสูจน์ค่าความจริงของpredicateสำหรับสมาชิกจำนวนมาก ในรูปของสมาชิกที่มีขนาดเล็กกว่า ในการนิยามแบบเรียกซ้ำ(recursive definitions) เรานิยามฟังก์ชั่น ฟังก์ชั่นข้อความ เซต หรือโครงสร้างอื่นๆบนโดเมนหรือเอกภพสัมพัทธ์ใดๆในรูปของสมาชิกที่มีขนาดเล็กกว่า การเรียกซ้ำเป็นรูปแบบทั่วไปในการนิยามวัตถุใดๆ ในรูปของตัวมันเอง Faculty of Informatics, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 2 2

  3. Recursively Defined Functions ตัวอย่าง เช่น: ลำดับ {an} ของยกกำลังสอง 1,2,4,8,… นิยามโดย an = 2nเมื่อn = 0, 1, 2, … และ สามารถนิยามแบบเรียกซ้ำได้ดังนี้: a0 = 1 an = 2an-1เมื่อn = 0, 1, 2, … จากตัวอย่าง จะเห็นได้ชัดว่า อุปนัย และการเรียกซ้ำนั้นมีหลักการคล้ายคลึงกัน Faculty of Informatics, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 3 3

  4. Recursively Defined Functions เราสามารถใช้วิธีต่อไปนี้ ในการนิยามฟังก์ชั่นใดๆที่มีโดเมนเป็นจำนวนนับ: ขั้นพื้นฐาน(Base case):กำหนดค่าของฟังก์ชั่นเมื่อ pre-image เป็นศูนย์(หาว่าค่าf(0)=?) ขั้นเรียกซ้ำ(Recursion):สร้างกฎสำหรับหาค่าฟังก์ชั่นเมื่อ pre-image เป็นจำนวนเต็มใดๆ จากค่าของฟังก์ชั่นที่มีค่า pre-image เป็นจำนวนเต็มที่น้อยกว่า การนิยามดังกล่าวข้างต้น เรียกว่า การเรียกซ้ำ(recursive) หรือการนิยามเชิงอุปนัย(inductive definition) Faculty of Informatics, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 4 4

  5. 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) Faculty of Informatics, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 5 5

  6. Recursive definition of Factorial กำหนดนิยามเชิงอุปนัย(แบบเรียกซ้ำ) ของฟังก์ชั่นแฟคทอเรียล ดังนี้,F(n) :≡n! :≡ = 12…n 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 Faculty of Informatics, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 6 6

  7. Examples จงเขียนนิยามแบบเรียกซ้ำของ: i+n (iเป็นจำนวนเต็ม, nเป็นจำนวนนับ) โดยใช้รูปแบบ s(i) = i+1 a·n (aเป็นจำนวนจริง, nเป็นจำนวนนับ) โดยใช้การบวก an(aเป็นจำนวนจริง, nเป็นจำนวนนับ) โดยใช้การคูณ (สำหรับอนุกรมของจำนวน {ai}) (สำหรับอนุกรมของจำนวน {ai}) (สำหรับอนุกรมของเซต{Si}) Faculty of Informatics, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 7 7

  8. 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 … Faculty of Informatics, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 8

  9. ∑0≤i≤nai (สำหรับอนุกรมของจำนวน {ai}) • Base case คือ • Recursive part คือ • จะได้ว่า Faculty of Informatics, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 9

  10. The Fibonacci Series อนุกรมไฟโบแนซซี(Fibonacci series)fn≥0นิยามโดย:f0 :≡ 0, f1 :≡ 1, fn≥2 :≡ fn−1 + fn−2 f(0) = 0 f(1) = 1 f(2) = f(1) + f(0) = 1 + 0 = 1 f(3) = f(2) + f(1) = 1 + 1 = 2 f(4) = f(3) + f(2) = 2 + 1 = 3 . . . f(4) f(3) f(2) f(2) f(0) f(1) f(1) f(1) f(0) Faculty of Informatics, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 10 10

  11. Recursive Euclid’s Algorithm proceduregcd(a,bN,nonnegative integer with a>b)ifb = 0 thenreturn aelse returngcd(b,amodb) สังเกตว่าอัลกอริธึมแบบเรียกซ้ำจะทำให้เขียนโปรแกรมได้สั้นกว่าง่ายกว่าและง่ายต่อการทำความเข้าใจมากกว่า แต่การเขียนโปรแกรมแบบเรียกซ้ำจะใช้พื้นที่ในหน่วยความจำที่เรียกว่าสแตก(stack)มากกว่าการเขียนโปรแกรมแบบวนลูป สำหรับอัลกอริธึมแบบเรียกซ้ำ(Recursive)ใดๆ จะมีอัลกอริธึมแบบวนลูป(Iterative)ที่สมมูล(ให้ผลลัพธ์ที่เหมือนกัน)กันเสมอ อย่างไรก็ตาม อัลกอริธึมแบบวนลูปมักจะมีประสิทธิภาพมากกว่าในแง่ของการใช้พื้นที่และเวลาที่น้อยกว่าอัลกอริธึมแบบเรียกซ้ำ Faculty of Informatics, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 11 11

  12. Recursive Fibonacci Algorithm procedurefibo(n: nonnegative integer) if n  1 then returnn else returnfibo(n – 1) + fibo(n – 2) Faculty of Informatics, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 12 12

  13. Iterative Fibonacci Algorithm procedure iterative_fibo(n: nonnegative integer) if n = 0 theny := 0 else begin x := 0 y := 1 fori := 1 to n-1 begin z := x + y x : = y y := z end end{y is the n-th Fibonacci number} Faculty of Informatics, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 13 13

  14. Recursive Algorithms ตัวอย่าง: อัลกอริธึมสำหรับการคำนวณค่าan procedurepower(a≠0: real, nN) ifn = 0 then return 1elsereturna · power(a, n−1) จงเขียนอัลกอริธึมคำนวณค่าanเดียวกันนี้แบบเรียกซ้ำ Faculty of Informatics, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 14 14

  15. Recurrence Relations Faculty of Informatics, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 15 15

  16. Recurrence Relations • ความสัมพันธ์เวียนเกิด(recurrence relation)ของลำดับ{an}คือสมการที่แสดงanในรูปของสมาชิกก่อนหน้าa0, …, an−1ของลำดับนั้นๆสำหรับทุกค่าn≥n0 • จะเห็นว่า ความสัมพันธ์เวียนเกิดนั้นนิยามได้เช่นเดียวกับ การนิยามแบบเรียกซ้ำแตกต่างกันที่ไม่มีกรณีพื้นฐาน(base cases) • เราสามารถใช้ ลำดับใดๆที่ไม่อยู่ในรูปของการเรียกซ้ำ เป็นผลเฉลยของความสัมพันธ์เวียนเกิดที่กำหนดได้ หากลำดับดังกล่าวสอดคล้องกับนิยามของการเวียนเกิด • ความสัมพันธ์เวียนเกิดหนึ่งๆ อาจมีผลเฉลยได้มากกว่าหนึ่งผลเฉลย Faculty of Informatics, Burapha University

  17. Recurrence Relation Example • พิจารณาความสัมพันธ์เวียนเกิด an = 2an−1 − an−2 (n≥2) • ลำดับต่อไปนี้เป็นผลเฉลยของความสัมพันธ์ข้างต้นหรือไม่?an = 3nan = 2n an = 5 Yes No Yes Faculty of Informatics, Burapha University

  18. 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 เป็นผลเฉลยของความสัมพันธ์เวียนเกิดข้างต้น Faculty of Informatics, Burapha University

  19. Modeling with Recurrence Relations ตัวอย่าง: • นายภักดี ฝากเงิน 10,000 บาทไว้ในบัญชีออมทรัพย์ ที่ให้ดอกเบี้ย 5% ต่อปี สะสมไว้เป็นเงินฝากต่อไปทุกปี เมื่อเวลาผ่านไป 30 ปีเงินในบัญชีเงินฝากของนายภักดีจะเป็นเท่าไร? วิธีทำ: • ให้ Pnแทนจำนวนเงินในบัญชีหลังจากเวลาผ่านไป n ปี • จงเขียน Pnในรูปของ Pn-1? Faculty of Informatics, Burapha University

  20. Modeling with Recurrence Relations • เราสามารถเขียนความสัมพันธ์เวียนเกิดของ Pn ในรูปของ Pn-1 ได้ดังนี้: Pn = Pn-1 + 0.05Pn-1 = 1.05Pn-1 เงื่อนไขเริ่มต้น คือ P0 = 10,000 ดังนั้น จะได้ว่า: P1 = 1.05P0 P2 = 1.05P1 = (1.05)2P0 P3 = 1.05P2 = (1.05)3P0 … Pn = 1.05Pn-1 = (1.05)nP0 • จะเห็นว่า ได้สูตรสำหรับคำนวณค่า Pnสำหรับจำนวนนับ n ใดๆได้ โดยไม่จำเป็นต้องทำการคำนวณเรียกซ้ำหลายครั้ง Faculty of Informatics, Burapha University

  21. Modeling with Recurrence Relations จึงสามารถใช้สูตรที่หาได้คำนวณหา P30ภายใต้เงื่อนไขเริ่มต้น P0 = 10,000: P30 = (1.05)3010,000 = 43,219.42 ดังนั้นเมื่อผ่านไป 30 ปี เงินฝากในบัญชีจะมีเงินทั้งหมด 43,219.42 บาท Faculty of Informatics, Burapha University 21

  22. Example Applications and Solving Compound Interest RR • ความสัมพันธ์เวียนเกิดของการฝากเงินธนาคารที่อัตราดอกเบี้ยP% ต่อช่วงเวลาที่กำหนด: Mn = Mn−1 + (P/100)Mn−1 • Mn = Mn−1 + (P/100)Mn−1 = (1 + P/100) Mn−1 = rMn−1(ให้r = 1 + P/100) = r (rMn−2) = r·r·(rMn−3) …เช่นนี้ไปเรื่อยๆ… = rnM0 Faculty of Informatics, Burapha University

  23. Modeling with Recurrence Relations • ความสัมพันธ์เวียนเกิดที่เป็นที่รู้จักกันดีอันหนึ่งในกลุ่ม นักคณิตศาสตร์ คือ ปัญหาของ Leonard diPisa ซึ่งรู้จักกันในนาม Fibonacci โดยFibonacci ได้ตั้งปัญหาในหนังสือ Liber abaci ราว ๆ คริสตศตวรรษที่13 ดังนี้ “กระต่ายแรกเกิดเพศผู้และเพศเมียคู่หนึ่งถูกนําไปปล่อยไว้ที่เกาะแห่งหนึ่ง อยากทราบว่าจะมีกระต่ายทั้งหมดกี่คู่ เมื่อเวลาผ่านไป n เดือน โดยมีข้อสมมติว่า เมื่อกระต่ายทั้งสองมีอายุครบ 2 เดือนจึงจะสามารถให้กําเนิดกระต่ายเพศผู้และเพศเมียอีก 1 คู่ และเมื่อจุดเริ่มต้นบนเกาะนั้นไม่มีกระต่ายอยู่เลย” Faculty of Informatics, Burapha University

  24. Modeling with Recurrence Relations กระต่ายที่เกิดใหม่ กระต่ายที่มีอยู่เดิม Faculty of Informatics, Burapha University

  25. Modeling with Recurrence Relations กําหนดให้fnเป็นจํานวนคู่ของกระต่าย เมื่อตอนต้นเดือนที่ n สังเกตจากภาพที่ 1 จะเห็นว่า จํานวนกระต่ายเมื่อต้นเดือนที่ 3 เท่ากับจํานวน กระต่ายเมื่อต้นเดือนที่ 2 บวกกับจํานวนกระต่ายเมื่อต้นเดือนที่ 1 และจํานวน กระต่ายเมื่อต้นเดือนที่ 4 เท่ากับจํานวนกระต่ายเมื่อต้น เดือนที่ 3 บวกกับจํานวน กระต่ายเมื่อต้นเดือนที่ 2 เป็นเช่นนี้เรื่อย ๆ ไป ดังนั้น fn = fn-1 + fn-2 ถ้าเรากําหนด f0 = 0 และเราทราบว่า f1 = 1 แล้วสมการข้างต้น สําหรับ n  2 ดังนั้น f2 = f1 + f0 = 2 f3 = f2 + f1 = 3 f4 = f3 + f2 = 5 f5 = f4 + f3 = 8 Faculty of Informatics, Burapha University

  26. Modeling with Recurrence Relations ตัวอย่าง: • ให้ anแทนจำนวนบิตสตริงยาว n ที่ไม่มีเลข 0 ติดกัน(ในที่นี้จะเรียกว่า“สตริงที่ถูกต้อง”)จงเขียนความสัมพันธ์เวียนเกิด และกำหนดเงื่อนไขเริ่มต้นสำหรับลำดับ {an} วิธีทำ: • แนวคิด: จำนวนของสตริงที่ถูกต้อง หาได้จากจำนวนของสตริงที่ถูกต้องที่ลงท้ายด้วยเลข 1 หนึ่งตัว บวกกับจำนวนของสตริงที่ถูกต้องที่ลงท้ายด้วยเลข 0 หนึ่งตัว Faculty of Informatics, Burapha University

  27. Modeling with Recurrence Relations • สมมติให้ n  3, เพื่อกำหนดให้สตริงยาวอย่างน้อย 3 บิต กรณีที่ 1 • สมมติต่อไปอีกว่า เราทราบว่ามีบิตสตริงที่ถูกต้องจำนวน an-1ที่ยาว(n – 1) ดังนั้นมีกี่บิตสตริงที่ยาว n ที่ลงท้ายด้วยเลข 1 หนึ่งตัว? • ตอบจะมีสตริงดังกล่าวจำนวนan-1สตริง, ซึ่งก็คือเซตของสตริงที่ถูกต้องที่ยาว(n – 1)และสตริงเหล่านั้นต่อท้ายด้วยเลข1หนึ่งตัว • สังเกตว่า:เมื่อใดก็ตามที่เราเพิ่มเลข 1หนึ่งตัวต่อท้ายสตริงที่ถูกต้อง สตริงที่ได้ก็ยังคงเป็นสตริงที่ถูกต้องเช่นเดิม Faculty of Informatics, Burapha University

  28. Modeling with Recurrence Relations กรณีที่ 2 สิ่งที่เราจำเป็นต้องทราบต่อไปคือ: มีสตริงที่ถูกต้องที่ยาวnและลงท้ายด้วยเลข 0หนึ่งตัวกี่บิตสตริง? • สตริงที่ถูกต้องที่ยาว nซึ่งลงท้ายด้วยเลข0หนึ่งตัว ต้องมีเลข 1ในบิตที่(n – 1) (ไม่เช่นนั้นสตริงเหล่านั้นจะลงท้ายด้วย 00 ซึ่งจะเป็นสตริงที่ไม่ถูกต้อง) • และมีบิตสตริงที่ถูกต้องที่ยาว(n – 1)ซึ่งลงท้ายด้วยเลข 1 หนึ่งตัวกี่บิตสตริง? • เราทราบอยู่แล้วว่ามีan-1สตริงที่ยาว nซึ่งลงท้ายด้วยเลข 1 หนึ่งตัว(จากกรณีที่ 1) • ดังนั้น มี an-2บิตสตริงที่ยาว(n – 1) ซึ่งลงท้ายด้วยเลข 1 หนึ่งตัว Faculty of Informatics, Burapha University

  29. Modeling with Recurrence Relations • ดังนั้นมีสตริงที่ถูกต้องจำนวนan-2ที่ยาวnซึ่งลงท้ายด้วยเลข 0 หนึ่งตัว(สตริงที่ถูกต้องทั้งหมดที่ยาว (n – 2) และต่อท้ายด้วยเลข 10 ) • ดังที่กล่าวแล้วข้างต้น จำนวนของสตริงที่ถูกต้อง คือจำนวนของบิตสตริงที่ถูกต้องที่ลงท้ายด้วยเลข1หนึ่งตัวบวกกับจำนวนของสตริงที่ถูกต้องที่ลงท้ายด้วยเลข0 หนึ่งตัว • ดังนั้นจึงได้ความสัมพันธ์เวียนเกิด ดังนี้: an = an-1 + an-2 Faculty of Informatics, Burapha University

  30. Modeling with Recurrence Relations • เงื่อนไขเริ่มต้นคืออะไร? • a1 = 2 (0 และ 1) • a2 = 3 (01, 10, และ 11) • a3 = a2 + a1 = 3 + 2 = 5 • a4 = a3 + a2 = 5 + 3 = 8 • a5 = a4 + a3 = 8 + 5 = 13 • … • ลำดับเหล่านี้เป็นไปตามความสัมพันธ์เวียนเกิดของ Fibonacci sequence • เพราะ a1 = f3และ a2 = f4, จะได้ว่า an = fn+2 Faculty of Informatics, Burapha University

  31. Tower of Hanoi Example • นิยายปรัมปราเกี่ยวกับหอคอยแห่งฮานอยเล่าว่าพระที่ประจําอยู่ในหอคอยแห่งฮานอยประกาศว่า ถ้าท่านจะย้ายแผ่นทองคําจํานวน 64 แผ่น ที่เรียงอยู่ที่เสาต้นหนึ่งโดยมีแผ่นทองคำขนาดใหญ่อยู่ด้านล่างและแผ่นทองที่มีขนาดเล็กกว่าอยู่ด้านบน ไปยังวางเรียงไว้ที่เสาอีกต้นหนึ่งในลักษณะเดียวกัน โดยในการย้ายแผ่นทองคํา 1 แผ่น ใช้เวลา 1 วินาที แล้วเมื่อท่านย้ายแผ่นทองคําจากเสาต้นที่ 1 ไปยังเสาต้นอื่นเสร็จสิ้น โลกก็จะแตกสลายไปแล้ว Faculty of Informatics, Burapha University

  32. Tower of Hanoi Example • ปัญหา: ย้ายแผ่นดิสก์จากหลักที่ 1 ไปยังหลักที่ 2 • กฎ: (a) แต่ละครั้งย้ายได้เพียงแผ่นเดียว • (b) แผ่นดิสก์ที่ใหญ่กว่าจะอยู่บนแผ่นที่เล็กกว่าไม่ได้ หลัก #1 หลัก #2 หลัก #3 Faculty of Informatics, Burapha University

  33. Hanoi Recurrence Relation • ให้Hn= จำนวนครั้งของการย้ายแผ่นดิสก์ nแผ่น วิธีการย้ายแผ่นดิสก์: • ย้ายแผ่นดิสก์n−1แผ่นที่อยู่ด้านบนไปยังหลักอื่นๆ (มีการย้ายแผ่นHn−1ครั้ง) • ย้ายแผ่นดิสก์ที่อยู่ด้านล่าง(ย้าย 1 ครั้ง) • ย้ายแผ่นดิสก์n−1แผ่นที่อยู่ด้านบน(ที่ย้ายไปไว้ยังหลักอื่น)ไปไว้บนแผ่นที่อยู่ด้านล่าง (มีการย้ายแผ่นHn−1ครั้ง) • สังเกตว่า:Hn = 2Hn−1 + 1 • จำนวนครั้งของการย้ายแผ่นดิสก์สามารถอธิบายได้ด้วยความสัมพันธ์เวียนเกิด Faculty of Informatics, Burapha University

  34. Solving Tower of Hanoi RR Hn = 2 Hn−1 + 1 = 2 (2 Hn−2 + 1) + 1 = 22 Hn−2 + 2 + 1 = 22(2 Hn−3 + 1) + 2 + 1 = 23Hn−3 + 22 + 2 + 1 … = 2n−1H1 + 2n−2 + … + 2 + 1 = 2n−1 + 2n−2 + … + 2 + 1 (เพราะH1 = 1) = = 2n − 1 Faculty of Informatics, Burapha University

  35. Solving Tower of Hanoi RR • จะได้ว่า จํานวนครั้งของการย้ายแผ่นทองคําจํานวน 64 แผ่น H64 = 264- 1 = 18,446,774,073,709,551,615 • ซึ่งถ้าย้าย 1 แผ่นใช้เวลา 1 วินาที แล้วจะใช้เวลาทั้งหมดมากกว่า 500 พันล้านปีทีเดียว Faculty of Informatics, Burapha University

More Related