Recursion and Recurrence Relations Department of Computer Science, Burapha University
Recursive Definitions การเรียกซ้ำ(Recursion) เป็นหลักการที่เกี่ยวข้องอย่างใกล้ชิดกับการอุปนัยเชิงคณิตศาสตร์(mathematical induction) ในการอุปนัย เราพิสูจน์ว่าฟังก์ชันข้อความ(predicate) P เป็นจริง สำหรับสมาชิกทุกตัวของเซตอนันต์ใดๆโดยพิสูจน์ค่าความจริงของ predicate สำหรับสมาชิกจำนวนมาก ในรูปของสมาชิกที่มีขนาดเล็กกว่า ในการนิยามแบบเรียกซ้ำ(recursive definitions) เรานิยามฟังก์ชั่น ฟังก์ชั่นข้อความ เซต หรือโครงสร้างอื่นๆ บนโดเมนหรือเอกภพสัมพัทธ์ใดๆในรูปของสมาชิกที่มีขนาดเล็กกว่า การเรียกซ้ำ เป็นรูปแบบทั่วไปในการนิยามวัตถุใดๆ ในรูปของตัวมันเอง Department of Computer Science, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 2 2
Recursively Defined Functions ตัวอย่าง เช่น: ลำดับ {an} ของยกกำลังสอง 1,2,4,8,… นิยามโดย an = 2n เมื่อ n = 0, 1, 2, … และ สามารถนิยามแบบเรียกซ้ำได้ดังนี้: a0 = 1 an = 2an-1 เมื่อ n = 0, 1, 2, … จากตัวอย่าง จะเห็นได้ชัดว่า อุปนัย และการเรียกซ้ำนั้นมีหลักการคล้ายคลึงกัน Department of Computer Science, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 3 3
Recursively Defined Functions เราสามารถใช้วิธีต่อไปนี้ ในการนิยามฟังก์ชั่นใดๆที่มีโดเมนเป็นจำนวนนับ: ขั้นพื้นฐาน(Base case): กำหนดค่าของฟังก์ชั่นเมื่อ pre-image เป็นศูนย์(หาว่าค่า f(0)=?) ขั้นเรียกซ้ำ(Recursion): สร้างกฎสำหรับหาค่าฟังก์ชั่นเมื่อ pre-image เป็นจำนวนเต็มใดๆ จากค่าของฟังก์ชั่นที่มีค่า pre-image เป็นจำนวนเต็มที่น้อยกว่า การนิยามดังกล่าวข้างต้น เรียกว่า การเรียกซ้ำ(recursive) หรือการนิยามเชิงอุปนัย(inductive definition) Department of Computer Science, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 4 4
Recursively Defined Functions ตัวอย่าง เช่น: f(0) = 3 f(n) = 2f(n-1) + 3 f(1) = 2 f(0) + 3 = 23 + 3 = 9 f(2) = 2 f(1) + 3 = 29 + 3 = 21 f(3) = 2 f(2) + 3 = 221 + 3 = 45 f(4) = 2 f(3) + 3 = 245 + 3 = 93 จงหา f(5), f(6), f(7), f(8) Department of Computer Science, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 5 5
Recursive definition of Factorial กำหนดนิยามเชิงอุปนัย(แบบเรียกซ้ำ) ของฟังก์ชั่นแฟคทอเรียล ดังนี้, F(n) :≡ n! :≡ = 12…n Base case: F(0) :≡ 1 Recursive part: F(n) = (n) F(n-1) F(0) = 1 F(1) = 1 F(0) = 11 = 1 F(2) = 2 F(1) = 21 = 2 F(3) = 3 F(2) = 32 = 6 F(4) = 4 F(3) = 46 = 24 Department of Computer Science, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 6 6
Examples จงเขียนนิยามแบบเรียกซ้ำของ: i+n (i เป็นจำนวนเต็ม, n เป็นจำนวนนับ) โดยใช้รูปแบบ s(i) = i+1 a·n (a เป็นจำนวนจริง, n เป็นจำนวนนับ) โดยใช้การบวก an (a เป็นจำนวนจริง, n เป็นจำนวนนับ) โดยใช้การคูณ (สำหรับอนุกรมของจำนวน {ai}) (สำหรับอนุกรมของเซต{Si}) Department of Computer Science, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 7 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 … Department of Computer Science, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 8
∑0≤i≤n ai (สำหรับอนุกรมของจำนวน {ai}) Base case คือ Recursive part คือ จะได้ว่า Department of Computer Science, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 9
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(1) f(0) Department of Computer Science, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 10 10
Recursive Euclid’s Algorithm นิยามแบบเรียกซ้ำสามารถใช้อธิบายอัลกอริธึม ได้เช่นเดียวกับการนิยามฟังก์ชั่น หรือการนิยามเซต procedure gcd(a,bN,nonnegative integer with a>b) if b = 0 then return a else return gcd(b,a mod b) สังเกตว่าอัลกอริธึมแบบเรียกซ้ำจะทำให้เขียนโปรแกรมได้ง่ายกว่า แต่การเขียนโปรแกรมแบบเรียกซ้ำจะใช้พื้นที่ในหน่วยความจำที่เรียกว่าสแตก(stack)มากกว่าการเขียนโปรแกรมแบบวนลูป Department of Computer Science, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 11 11
Recursive Linear Search procedure search(a: series; i, j: integer; x: item to be found) {ค้นหา x ในรายการ a ตั้งแต่ตำแหน่ง ≥i ถึง <j} if ai = x return i {ใช่ตัวที่ต้องการค้นหา? ถ้าใช่ คืนค่าตำแหน่งที่พบ} if i = j return 0 {ไม่พบตัวที่ต้องการในช่วงของการค้นหา? คืนค่า 0} return search(a,i+1, j, x) {ค้นหาสมาชิกตัวที่เหลือในรายการ a} Department of Computer Science, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 12 12
Recursive Binary Search procedure binarySearch(a, x, i, j) {ค้นหา x ในรายการ a ตั้งแต่ตำแหน่ง ≥i ถึง <j} m := (i + j)/2 {คำนวณตำแหน่งกึ่งกลาง} if x = am return m {ใช่ตัวที่ต้องการค้นหา?} if x<am i<m return {ถ้าตัวที่ต้องการค้นมีค่าน้อยกว่า} binarySearch(a,x,i,m−1){ตรวจสอบครึ่งที่เหลือทางด้านซ้าย} else if am<x m<j return {ถ้าตัวที่ต้องการค้นมีค่ามากกว่า} binarySearch(a,x,m+1,j){ตรวจสอบครึ่งที่เหลือทางด้านขวา} else return 0 {ค้นหมดทุกตำแหน่งแล้ว ไม่พบ จึงคืนค่า 0} Department of Computer Science, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 13 13
Recursive Algorithms สำหรับอัลกอริธึมแบบเรียกซ้ำ(Recursive)ใดๆ จะมีอัลกอริธึมแบบวนลูป(Iterative)ที่สมมูล(ให้ผลลัพธ์ที่เหมือนกัน)กันเสมอ อัลกอริธึมแบบเรียกซ้ำ มักจะสั้นกว่า และง่ายต่อการทำความเข้าใจมากกว่า อย่างไรก็ตาม อัลกอริธึมแบบวนลูปมักจะมีประสิทธิภาพมากกว่าในแง่ของการใช้พื้นที่และเวลาที่น้อยกว่าอัลกอริธึมแบบเรียกซ้ำ Department of Computer Science, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 14 14
Recursive Fibonacci Algorithm procedure fibo(n: nonnegative integer) if n 1 then return n else return fibo(n – 1) + fibo(n – 2) Department of Computer Science, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 15 15
Iterative Fibonacci Algorithm procedure iterative_fibo(n: nonnegative integer) if n = 0 then y := 0 else begin x := 0 y := 1 for i := 1 to n-1 z := x + y x : = y y := z end end {y is the n-th Fibonacci number} Department of Computer Science, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 16 16
Recursive Algorithms ตัวอย่าง: อัลกอริธึมสำหรับการคำนวณค่า an procedure power(a≠0: real, nN) if n = 0 then return 1 else return a · power(a, n−1) จงเขียนอัลกอริธึมคำนวณค่า an เดียวกันนี้แบบเรียกซ้ำ Department of Computer Science, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 17 17
Recurrence Relations ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 18 18 Department of Computer Science, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 18 18
Department of Computer Science, Burapha University Recurrence Relations ความสัมพันธ์เวียนเกิด(recurrence relation) ของลำดับ {an} คือสมการที่แสดง an ในรูปของสมาชิกก่อนหน้า a0, …, an−1 ของลำดับนั้นๆ สำหรับทุกค่า n≥n0 จะเห็นว่า ความสัมพันธ์เวียนเกิดนั้นนิยามได้เช่นเดียวกับ การนิยามแบบเรียกซ้ำ แตกต่างกันที่ไม่มีกรณีพื้นฐาน(base cases) เราสามารถใช้ ลำดับใดๆที่ไม่อยู่ในรูปของการเรียกซ้ำ เป็นผลเฉลยของความสัมพันธ์เวียนเกิดที่กำหนดได้ หากลำดับดังกล่าวสอดคล้องกับนิยามของการเวียนเกิด ความสัมพันธ์เวียนเกิดหนึ่งๆ อาจมีผลเฉลยได้มากกว่าหนึ่งผลเฉลย Department of Computer Science, Burapha University
Recurrence Relation Example พิจารณาความสัมพันธ์เวียนเกิด an = 2an−1 − an−2 (n≥2) ลำดับต่อไปนี้เป็นผลเฉลยของความสัมพันธ์ข้างต้นหรือไม่? an = 3n an = 2n an = 5 Yes No Yes Department of Computer Science, Burapha University
Department of Computer Science, Burapha University 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 = 25 - 5 = 5 = an ดังนั้น {an} เมื่อ an=5 เป็นผลเฉลยของความสัมพันธ์เวียนเกิดข้างต้น Department of Computer Science, Burapha University
Modeling with Recurrence Relations ตัวอย่าง: นายภักดี ฝากเงิน 10,000 บาทไว้ในบัญชีออมทรัพย์ ที่ให้ดอกเบี้ย 5% ต่อปี สะสมไว้เป็นเงินฝากต่อไปทุกปี เมื่อเวลาผ่านไป 30 ปีเงินในบัญชีเงินฝากของนายภักดีจะเป็นเท่าไร? วิธีทำ: ให้ Pn แทนจำนวนเงินในบัญชีหลังจากเวลาผ่านไป n ปี จงเขียน Pn ในรูปของ Pn-1? Department of Computer Science, Burapha University
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 ใดๆได้ โดยไม่จำเป็นต้องทำการคำนวณเรียกซ้ำหลายครั้ง Department of Computer Science, Burapha University
Modeling with Recurrence Relations จึงสามารถใช้สูตรที่หาได้คำนวณหา P30 ภายใต้เงื่อนไขเริ่มต้น P0 = 10,000: P30 = (1.05)3010,000 = 43,219.42 ดังนั้นเมื่อผ่านไป 30 ปี เงินฝากในบัญชีจะมีเงินทั้งหมด 43,219.42 บาท Department of Computer Science, Burapha University 24
Example Applications and 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 Department of Computer Science, Burapha University
Modeling with Recurrence Relations ความสัมพันธ์เวียนเกิดที่เป็นที่รู้จักกันดีอันหนึ่งในกลุ่ม นักคณิตศาสตร์ คือ ปัญหาของ Leonard diPisa ซึ่งรู้จักกันในนาม Fibonacci โดยFibonacci ได้ตั้งปัญหาในหนังสือ Liber abaci ราว ๆ คริสตศตวรรษที่13 ดังนี้ “กระต่ายแรกเกิดเพศผู้และเพศเมียคู่หนึ่งถูกนําไปปล่อยไว้ที่เกาะแห่งหนึ่ง อยากทราบว่าจะมีกระต่ายทั้งหมดกี่คู่ เมื่อเวลาผ่านไป n เดือน โดยมีข้อสมมติว่า เมื่อกระต่ายทั้งสองมีอายุครบ 2 เดือนจึงจะสามารถให้กําเนิดกระต่ายเพศผู้และเพศเมียอีก 1 คู่ และเมื่อจุดเริ่มต้นบนเกาะนั้นไม่มีกระต่ายอยู่เลย” ssssssssssssssssssssssssssssssssssssssss Department of Computer Science, Burapha University
Modeling with Recurrence Relations sssssssssssssssssssssssssssssssssss กระต่ายที่เกิดใหม่ กระต่ายที่มีอยู่เดิม Department of Computer Science, Burapha University
Modeling with Recurrence Relations กําหนดให้ fn เป็นจํานวนคู่ของกระต่าย เมื่อตอนต้นเดือนที่ n สังเกตจากภาพที่ 1 จะเห็นว่า จํานวนกระต่ายเมื่อต้นเดือนที่ 3 เท่ากับจํานวน กระต่ายเมื่อต้นเดือนที่ 2 บวกกับจํานวนกระต่ายเมื่อต้นเดือนที่ 1 และจํานวน กระต่ายเมื่อต้นเดือนที่ 4 เท่ากับจํานวนกระต่ายเมื่อต้น เดือนที่ 3 บวกกับจํานวน กระต่ายเมื่อต้นเดือนที่ 2 เป็นเช่นนี้เรื่อย ๆ ไป ดังนั้น fn = fn-1 + fn-2 ถ้าเรากําหนด f0 = 1 แล้วสมการข้างต้น สําหรับ n 2 และเราทราบว่า f1 = 1 ดังนั้น f2 = f1 + f0 = 2 f3 = f2 + f1 = 3 f4 = f3 + f2 = 5 f5 = f4 + f3 = 8 ssssssssssssssssssssssssssss Department of Computer Science, Burapha University
Modeling with Recurrence Relations ตัวอย่าง: ให้ an แทนจำนวนบิตสตริงยาว n ที่ไม่มีเลข 0 ติดกัน(ในที่นี้จะเรียกว่า“สตริงที่ถูกต้อง”) จงเขียนความสัมพันธ์เวียนเกิด และกำหนดเงื่อนไขเริ่มต้นสำหรับลำดับ {an} วิธีทำ: แนวคิด: จำนวนของสตริงที่ถูกต้อง หาได้จากจำนวนของสตริงที่ถูกต้องที่ลงท้ายด้วยเลข 1 หนึ่งตัว บวกกับจำนวนของสตริงที่ถูกต้องที่ลงท้ายด้วยเลข 0 หนึ่งตัว Department of Computer Science, Burapha University
Modeling with Recurrence Relations กรณีที่ 1 สมมติต่อไปอีกว่า เราทราบว่ามีบิตสตริงที่ถูกต้องจำนวน an-1 ที่ยาว (n – 1) ดังนั้น มีกี่บิตสตริงที่ยาว n ที่ลงท้ายด้วยเลข 1 หนึ่งตัว? ตอบ จะมีสตริงดังกล่าวจำนวน an-1 สตริง, ซึ่งก็คือเซตของสตริงที่ถูกต้องที่ยาว (n – 1) และสตริงเหล่านั้นต่อท้ายด้วยเลข 1 หนึ่งตัว สังเกตว่า: เมื่อใดก็ตามที่เราเพิ่มเลข 1 หนึ่งตัวต่อท้ายสตริงที่ถูกต้อง สตริงที่ได้ก็ยังคงเป็นสตริงที่ถูกต้องเช่นเดิม Department of Computer Science, Burapha University
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 หนึ่งตัว Department of Computer Science, Burapha University
Modeling with Recurrence Relations ดังนั้นมีสตริงที่ถูกต้องจำนวน an-2 ที่ยาว n ซึ่งลงท้ายด้วยเลข 0 หนึ่งตัว(สตริงที่ถูกต้องทั้งหมดที่ยาว (n – 2) และต่อท้ายด้วยเลข 10 ) ดังที่กล่าวแล้วข้างต้น จำนวนของสตริงที่ถูกต้อง คือจำนวนของบิตสตริงที่ถูกต้องที่ลงท้ายด้วยเลข 1 หนึ่งตัวบวกกับจำนวนของสตริงที่ถูกต้องที่ลงท้ายด้วยเลข 0 หนึ่งตัว ดังนั้นจึงได้ความสัมพันธ์เวียนเกิด ดังนี้: an = an-1 + an-2 Department of Computer Science, Burapha University
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 Department of Computer Science, Burapha University
Department of Computer Science, Burapha University Tower of Hanoi Example นิยายปรัมปราเกี่ยวกับหอคอยแห่งฮานอยเล่าว่าพระที่ประจําอยู่ในหอคอยแห่งฮานอยประกาศว่า ถ้าท่านจะย้ายแผ่นทองคําจํานวน 64 แผ่น ที่เรียงอยู่ที่เสาต้นหนึ่งโดยมีแผ่นทองคำขนาดใหญ่อยู่ด้านล่างและแผ่นทองที่มีขนาดเล็กกว่าอยู่ด้านบน ไปยังวางเรียงไว้ที่เสาอีกต้นหนึ่งในลักษณะเดียวกัน โดยในการย้ายแผ่นทองคํา 1 แผ่น ใช้เวลา 1 วินาที แล้วเมื่อท่านย้ายแผ่นทองคําจากเสาต้นที่ 1 ไปยังเสาต้นอื่นเสร็จสิ้น โลกก็จะแตกสลายไปแล้ว Department of Computer Science, Burapha University
Department of Computer Science, Burapha University Tower of Hanoi Example ปัญหา: ย้ายแผ่นดิสก์จากหลักที่ 1 ไปยังหลักที่ 2 กฎ: (a) แต่ละครั้งย้ายได้เพียงแผ่นเดียว (b) แผ่นดิสก์ที่ใหญ่กว่าจะอยู่บนแผ่นที่เล็กกว่าไม่ได้ Instructor can solve the puzzle interactively by dragging the disks around. หลัก #1 หลัก #2 หลัก #3 Department of Computer Science, Burapha University
Hanoi Recurrence Relation ให้ Hn = จำนวนครั้งของการย้ายแผ่นดิสก์ n แผ่น วิธีการย้ายแผ่นดิสก์: ย้ายแผ่นดิสก์ n−1 แผ่นที่อยู่ด้านบนไปยังหลักอื่นๆ (มีการย้ายแผ่น Hn−1 ครั้ง) ย้ายแผ่นดิสก์ที่อยู่ด้านล่าง(ย้าย 1 ครั้ง) ย้ายแผ่นดิสก์ n−1 แผ่นที่อยู่ด้านบน(ที่ย้ายไปไว้ยังหลักอื่น)ไปไว้บนแผ่นที่อยู่ด้านล่าง (มีการย้ายแผ่น Hn−1 ครั้ง) สังเกตว่า: Hn = 2Hn−1 + 1 จำนวนครั้งของการย้ายแผ่นดิสก์สามารถอธิบายได้ด้วยความสัมพันธ์เวียนเกิด Department of Computer Science, Burapha University
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 = 23 Hn−3 + 22 + 2 + 1 … = 2n−1 H1 + 2n−2 + … + 2 + 1 = 2n−1 + 2n−2 + … + 2 + 1 (เพราะ H1 = 1) = = 2n − 1 Department of Computer Science, Burapha University
Solving Tower of Hanoi RR จะได้ว่า จํานวนครั้งของการย้ายแผ่นทองคําจํานวน 64 แผ่น H64 = 264- 1 = 18,446,774,073,709,551,615 ซึ่งถ้าย้าย 1 แผ่นใช้เวลา 1 วินาที แล้วจะใช้เวลาทั้งหมดมากกว่า 500 พันล้านปีทีเดียว sssssssssssssssssssssssssssssssssssssss Department of Computer Science, Burapha University
Department of Computer Science, Burapha University Solving Recurrences ความสัมพันธ์เวียนเกิดเอกพันธ์เชิงเส้นดีกรี k ที่มีสัมประสิทธิ์เป็นค่าคงที่(linear homogeneous recurrence of degree k with constant coefficients) หรือเขียนย่อๆว่า“k-LiHoReCoCo” เป็นความสัมพันธ์ที่อยู่ในรูปแบบ an = c1an−1 + … + ckan−k, โดยที่ ci เป็นจำนวนจริงใดๆ และ ck ≠ 0 สามารถหาผลเฉลยได้เพียงผลเฉลยเดียว หากมีการกำหนดเงื่อนไขเริ่มต้น k เงื่อนไขมาให้ ได้แก่ a0…ak−1 Department of Computer Science, Burapha University
Department of Computer Science, Burapha University Solving Recurrences ตัวอย่าง ความสัมพันธ์เวียนเกิดเอกพันธ์เชิงเส้น : ความสัมพันธ์เวียนเกิด Pn = (1.05)Pn-1 มีดีกรีหนึ่ง ความสัมพันธ์เวียนเกิด fn = fn-1 + fn-2 มีดีกรีสอง ความสัมพันธ์เวียนเกิด an = an-5 มีดีกรีห้า ตัวอย่าง ความสัมพันธ์ที่ไม่ใช่ความสัมพันธ์เวียนเกิดเชิงเส้น : ความสัมพันธ์เวียนเกิด an= an-1+ (an-2)2 ไม่เป็นเชิงเส้น ความสัมพันธ์เวียนเกิด an= 2an-1+ 1 ไม่เป็นเอกพันธ์ ความสัมพันธ์เวียนเกิด an= nan-1 ไม่มีสัมประสิทธิ์เป็นค่าคงที่ Department of Computer Science, Burapha University
Department of Computer Science, Burapha University Solving LiHoReCoCos แนวคิดพื้นฐาน: หาผลเฉลยของรูปแบบ an = rn, โดยที่ r เป็นค่าคงที่ ซึ่งทำได้โดยการแก้สมการคุณลักษณะ(characteristic equation) : rn = c1rn−1 + … + ckrn−k, นั่นคือ rk − c1rk−1 − … − ck = 0 ผลเฉลย r ของสมการนี้จะเรียกว่ารากคุณลักษณะ(characteristic roots) ของความสัมพันธ์เวียนเกิดเอกพันธ์เชิงเส้น และผลเฉลยนี้จะถูกนำไปใช้หาผลเฉลยที่ชัดแจ้งของลำดับได้ต่อไป (จัดวางใหม่และ × ด้วย rk−n) Department of Computer Science, Burapha University
Department of Computer Science, Burapha University Solving 2-LiHoReCoCos พิจารณา 2-LiHoReCoCo: an = c1an−1 + c2an−2 ซึ่งมีสมการคุณลักษณะ(characteristic equation หรือ C.E.) : r2 − c1r − c2 = 0 ทฤษฎี 1: ถ้าสมการลักษณะเฉพาะ มี 2 ราก(roots) ที่แตกต่างกัน r1≠r2, ดังนั้นผลเฉลยของความสัมพันธ์เวียนเกิด กำหนดโดย: an = α1r1n + α2r2n เมื่อ n≥0 สำหรับค่าคงที่ใดๆ α1, α2 Department of Computer Science, Burapha University
Department of Computer Science, Burapha University Example หาผลเฉลยของความสัมพันธ์เวียนเกิด an = an−1 + 2an−2 เมื่อกำหนดเงื่อนไขเริ่มต้น a0 = 2, a1 = 7 ผลเฉลย: โดยใช้ทฤษฎี 1: จากโจทย์ เรามี c1 = 1, c2 = 2 สมการคุณลักษณะ คือ: r2 − r − 2 = 0 แก้สมการ: ดังนั้น, r = 2 หรือ r = −1 ดังนั้น, an = α1 2n + α2 (−1)n (โดยใช้สูตรของสมการกำลังสอง คือ) Department of Computer Science, Burapha University
Department of Computer Science, Burapha University Example Continued… ในการหาค่า α1 และ α2, ทำได้โดยแก้สมการของเงื่อนไขเริ่มต้น a0 และ a1: a0 = 2 = α120 + α2 (−1)0 a1 = 7 = α121 + α2 (−1)1 ปรับรูปแบบให้ง่ายขึ้น จะได้ว่า, : 2 = α1 + α2 7 = 2α1 − α2 ซึ่งสามารถแก้สมการหาค่า α1 และ α2 ได้ดังนี้: α2 = 2−α1; 7 = 2α1 − (2−α1) = 3α1 − 2; 9 = 3α1; α1 = 3; α2 = −1. แทนค่า α1 และ α2, ดังนั้นคำตอบในขั้นสุดท้ายคือ : an = 3·2n − (−1)n ตรวจสอบ: {an≥0} = 2, 7, 11, 25, 47, 97 … Department of Computer Science, Burapha University
Department of Computer Science, Burapha University Another Example Example: จงหาสูตรที่ชัดแจ้งของเลข Fibonacci Solution: เลข Fibonacci เกิดจากความสัมพันธ์เวียนเกิด fn = fn-1 + fn-2 โดยมีเงื่อนไขเริ่มต้น f0 = 0 และ f1 = 1 สมการคุณลักษณะคือ r2 – r – 1 = 0 รากคุณลักษณะ คือ Department of Computer Science, Burapha University
Department of Computer Science, Burapha University Another Example ดังนั้น,เลข Fibonacci กำหนดโดย สำหรับค่าคงที่บางตัว 1 และ 2 เราสามารถหาค่าคงที่ทั้งสอง ที่ทำให้ลำดับเป็นไปตามเงื่อนไขเริ่มต้น f0 = 0 และ f1 = 1 ได้ดังนี้: Department of Computer Science, Burapha University
Department of Computer Science, Burapha University Another Example ผลเฉลยของสมการสองสมการที่มีสองตัวแปร หาได้ดังนี้ เมื่อหาค่าผลเฉลยข้างต้นได้แล้ว จึงสามารถหาสูตรชัดแจ้งสำหรับเลข Fibonacci ได้ คือ: Department of Computer Science, Burapha University
The Case of Degenerate Roots ในกรณีที่สมการคุณลักษณะ r2 − c1r − c2 = 0 มีเพียงรากเดียวคือ r0 การหาผลเฉลยจะมีขั้นตอนอย่างไร? ทฤษฎี 2: ดังนั้น, an = α1r0n + α2nr0n, สำหรับทุกค่า n≥0, สำหรับค่าคงที่บางค่า α1, α2 Department of Computer Science, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 48 48
Degenerate Root Example จงหาผลเฉลยรูปแบบปิดของ an = 6an−1− 9an−2 เมื่อ a0=1, a1=6 สมการคุณลักษณะ คือ: r2−6r+9=0 สังเกตว่า b2−4ac = (−6)2−4·1·9 = 36−36 = 0 ดังนั้น สมการคุณลักษณะมีเพียงรากเดียว คือ −b/2a = −(−6)/2 = 3 Department of Computer Science, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 49 49
Another Example an = 3n + n3n จงหาผลเฉลยของความสัมพันธ์เวียนเกิด an = 6an-1 – 9an-2 เมื่อ a0 = 1 และ a1 = 6 วิธีทำ: สมการคุณลักษณะ r2 – 6r + 9 = 0 มีเพียงรากเดียวคือ r0 = 3 ดังนั้น ผลเฉลยของความสัมพันธ์เวียนเกิด คือ an = 13n + 2n3n สำหรับค่าคงที่บางตัว 1 และ 2 จากเงื่อนไขเริ่มต้นที่โจทย์กำหนด, จะได้ว่า a0 = 1 = 1 a1 = 6 = 13 + 23 แก้สมการทั้งสองจะได้ว่า 1 = 1 และ 2 = 1 ดังนั้นผลเฉลยรูปแบบปิดของความสัมพันธ์เวียนเกิด คือ an = 3n + n3n Department of Computer Science, Burapha University ภาควิชาวิทยาการคอมพิวเตอร์ ม.บูรพา 50 50
Department of Computer Science, Burapha University Example พิจารณา k-LiHoReCoCo: สมการลักษณะเฉพาะคือ: ทฤษฎี 3: ถ้ามีรากที่แตกต่างกัน k ของราก ri, ดังนั้นผลเฉลยของความสัมพันธ์เวียนเกิดจะอยู่ในรูปแบบ: สำหรับทุก n≥0, โดยที่ αi เป็นค่าคงที่ Department of Computer Science, Burapha University 51