ความซับซ้อนของอัลกอริทึม Fibonacci แบบเรียกซ้ำ


13

การใช้อัลกอริทึม Fibonacci แบบเรียกซ้ำดังต่อไปนี้:

def fib(n):
   if n==0:
      return 0
   elif n==1
      return 1
   return (fib(n-1)+fib(n-2))

หากฉันป้อนหมายเลข 5 เพื่อค้นหาจุดอิ่มตัว (5) ฉันรู้ว่าสิ่งนี้จะส่งออก 5 แต่ฉันจะตรวจสอบความซับซ้อนของอัลกอริทึมนี้ได้อย่างไร ฉันจะคำนวณขั้นตอนที่เกี่ยวข้องได้อย่างไร



ฉันกำลังมองหาที่เดียวกันและฉัน stummbled เมื่อวิดีโอนี้โดยMyCodeSchoolฉันแนะนำให้ตรวจสอบนี้
snbk97

คำตอบ:


23

T(n)=T(n1)+T(n2)+Θ(1)T(n)=Θ(ϕn)ϕϕ=(1+5)2

หากคุณต้องการที่จะหาข้อมูลเพิ่มเติมเกี่ยวกับวิธีการแก้ปัญหาซ้ำผมขอแนะนำให้คุณอ่านบทที่ 4 ของการรู้เบื้องต้นเกี่ยวกับอัลกอริทึม


0

เป็นอีกทางเลือกหนึ่งในการวิเคราะห์ความสัมพันธ์ / การวิเคราะห์ทางคณิตศาสตร์ (แต่ไม่ใช่ตัวแทน ) แบบฝึกหัดเชิงประจักษ์ที่เห็นได้ชัดว่าไม่ได้สอนบ่อยครั้งในชั้นเรียน แต่ให้ข้อมูลอย่างมากคือการนับจำนวนการประหารชีวิตของหน้าที่แล้ววาดกราฟสำหรับช่วง ของอินพุตnขนาดเล็กและจากนั้นโค้งให้พอดีกับผลลัพธ์ ผลลัพธ์โดยทั่วไปจะตรงกับวิธีการทางคณิตศาสตร์เชิงทฤษฎีอย่างใกล้ชิด

วัสดุสนับสนุนที่ดีสำหรับแบบฝึกหัดนี้สามารถพบได้ในบทที่ 3 ออนไลน์ฟรีเวลาทำงานของอัลกอริทึม / รากฐานของวิทยาศาสตร์คอมพิวเตอร์ Ullman


1) การพล็อตจะไม่แทนที่การวิเคราะห์อย่างเป็นทางการ มันหลอกง่าย 2) ฉันคิดว่าคุณบิดเบือนแหล่งที่มาที่คุณอ้างถึงอย่างไม่ถูกต้อง พวกเขาพูดถึงการพล็อต แต่ไม่ใช่วิธีกำหนด "ความซับซ้อน" 3) FWIW ฉันไม่เห็นด้วยกับแนวทางและใช้เป็น Ullman นำเสนอ แต่นั่นไม่ใช่ความผิดของคุณ
Raphael

1
คำตอบที่เริ่มต้นด้วยการเป็นหลักข้อจำกัดความรับผิดชอบของคุณบอกว่าพล็อตไม่ได้ใช้แทนสำหรับการวิเคราะห์ทางคณิตศาสตร์ พล็อตเป็นวิธีการทางวิทยาศาสตร์และการที่จะพูด / สังเกตมันจะหลอกบางครั้งคือการเรียนรู้เกี่ยวกับ / ทำให้เกิดแง่มุมทางสถิติของข้อมูลซึ่งเป็นอีกหนึ่งที่สำคัญของการวิเคราะห์ทางวิทยาศาสตร์ คิดว่าจะพูดว่าเป็น "หลงกลง่าย" ค่อนข้างน่าทึ่งมี "พยาธิวิทยา" กรณีที่มันล้มเหลว แต่พวกเขามักจะ "วางแผน" ... คำถามคือการตรวจสอบความซับซ้อนของอัลกอริทึมและการวิเคราะห์เชิงประจักษ์เป็นประเด็นสำคัญ / มุมบนนั้นและไม่ชัดมุม แต่เพียงผู้เดียวฯลฯ ...
vzn

0

ผลลัพธ์ของ fib (n) คือผลรวมของการโทรแบบเรียกซ้ำทั้งหมดที่ส่งกลับ 1 ดังนั้นจึงมีการโทรแบบเรียกซ้ำ (n) การประเมินแบบ fib (n) แบบตรงทั้งหมด (1) ดังนั้นเวลาดำเนินการคือΩ (ตอแหล (n)); คุณจะต้องแสดงให้เห็นว่าการโทรกลับ 0 และการโทรซ้ำอื่น ๆ ไม่ได้เพิ่มสิ่งนี้

การใช้เหตุผลแบบเดียวกันนั้นจะใช้กับฟังก์ชันที่กำหนดแบบเรียกซ้ำซึ่งจะส่งคืน 1 หรือ 0 หรือผลลัพธ์ของการโทรแบบเรียกซ้ำ


Ω

รู้สึกอิสระที่จะแก้ไขคำตอบถ้าคุณรู้สึกอย่างยิ่งเกี่ยวกับมัน
gnasher729

0

T(n)=T(n1)+T(n2) T(n)>2T(n2)T(n1)>T(n2)T(n)=Ω(cn)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.