בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה...

29
המחשב למדעי מבוא רקורסיה:5 שיעור: בספר4.3- ו4.2 פרקים על מתבסס מהשיעור מעטJ.V. Guttag, Introduction to Computation and Programming Using Python, MIT Press, 2013. : נוספת לקריאהLeonardo Pisano (Fibonacci), Il Liber Abbaci,1202. Parmanand Singh, the so-called Fibonacci numbers in ancient and medieval India, Historia Mathematica, 12:229-244, 1985. Sarina Singh et al., India travel guide 15th ed., Lonely Planet, 2013.

Transcript of בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה...

Page 1: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

מבוא למדעי המחשבשיעור 5: רקורסיה

מעט מהשיעור מתבסס על פרקים 4.2 ו-4.3 בספר: J.V. Guttag, Introduction to Computation and Programming Using Python, MIT Press, 2013.

לקריאה נוספת: • Leonardo Pisano (Fibonacci), Il Liber Abbaci,1202. • Parmanand Singh, the so-called Fibonacci numbers in ancient

and medieval India, Historia Mathematica, 12:229-244, 1985. • Sarina Singh et al., India travel guide 15th ed., Lonely Planet, 2013.

Page 2: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

דוגמהתזכורת: אלגוריתם אוקלידס למציאת מחלק משותף •

גדול ביותר מחליף את החישוב של GCD(m,n) בחישוב .GCD(n,m%n) של

נתרגם זאת ״מילולית״ לקוד: •

זה יעבוד?

Page 3: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

קוד מתוקן

אם נמחק את ה-# משורת ההדפסה, מה תדפיס ?gcd(45,27) 27 45 הקריאה

27 18 18 9 9 0 9 gcd(45,27) זו ההדפסה של ערך הביטוי

Page 4: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

עוד דוגמה

>>> fast_power(2,10) 2 10 4 5 16 2 256 1 65536 0 1024.0

print(x, y)

Page 5: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

רקורסיההגדרה מילולית (מוויקיפדיה): •

מופע מכיל שלה מופע שכל תופעה מתרחשת שהיא כך נוסף שלה,

ומשתקפת בתוך עצמה שוב ושוב. דוגמה: רקורסיה וויזואלית כמו זו ← •

שנקראת אפקט דרוסטה. מעבר • סופית (או עוצרת), ברקורסיה

לרמה מסויימת אין רקורסיה. ברקורסיה אינסופית, כל רמה מכילה •

רמות משנה מאותו סוג.

Page 6: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

תכנות רקורסיביפונקציה שהמימוש שלה מכיל קריאה לעצמה נקראת •

פונקציה רקורסיבית.

קריאה • נקראת עצמה מתוך לפונקציה קריאה רקורסיבית.

על מנת שהביצוע לא ימשיך לעד, חשוב להקפיד על: •התנאי 1. כאשר תנאי עצירה; של ומימוש הגדרה

מתקיים, אין קריאה רקורסיבית. בכל קריאה רקורסיבית מתקדמים לעבר קיום תנאי 2.

העצירה.

Page 7: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

רקורסיה ואינדוקציהשמוגדרות • מעניינות מתמטיות סדרות הרבה יש

סמך על מוגדר האבר ה-n-י ערך באינדוקציה. כלומר, ערכים קודמים בסדרה.

דוגמה: הסדרה … ,!3 ,!2 ,!1 מוגדרת כך: • 1! = 1 n! = n∙(n-1)!

האבר ה-n-י • את שמחשב קוד לכתוב קל כזו בסדרה ברקורסיה.

Page 8: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

n! חישוב

שימוש לדוגמה: f = factorial(5) print(f)

120מה יודפס?

Page 9: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

ניהול הזיכרון

בכל קריאה לפונקציה נוצר עותק חדש שלה. בעותק: •הקצאה חדשה של כל המשתנים הפנימיים, כולל •

הפרמטרים שמופיעים בחתימה שלה. השמה התחלתית של ערכים לפרמטרים לפי מה •

שהועבר בקריאה אליה. איתחול של הפקודה הבאה לבצע בקוד - בעותק •

החדש זו הפקודה הראשונה בפונקציה.

Page 10: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

איך זה נראה?

… factorial(3) …

… return n*factorial(n-1) …

n = 3… return n*factorial(n-1) …

n = 2… return 1 …

n = 1

126

Page 11: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

להשוואה

הקוד הרקורסיבי תואם להגדרה באינדוקציה ויפה יותר אבל דורש יותר זיכרון במהלך הביצוע - בתחתית הרקורסיה

.factorial עותקים של n מוחזקים בו-זמנית

Page 12: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

סדרת פיבונצ׳יהסדרה מוגדרת באינדוקציה: •

F1 = F2 = 1 Fn = Fn-2 + Fn-1

האברים הראשונים בסדרה: … ,21 ,13 ,8 ,5 ,3 ,2 ,1 ,1 •

הערה: הסדרה היתה ידועה למתמטיקאים הודים לפני פיבונצ׳י:

िपङ्गल - Pingala, c.200 B.C. िवरहाङ्क - Virhanka, c.700 गोपाला - Gopala, before 1135 हमेचन्द्र सूरी - Acharya Hemachandra, c.1150

זוג ארנבים מזדווגים מגיל חודש. ההריון נמשך חודש, בסופו נולד זוג נוסף.

מתחילים מזוג אחד בגיל 0. ארנבים לא מתים אף פעם.

כמה זוגות יהיו אחרי n חודשים?

Page 13: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

inspirationgreen.com :מתוך

Page 14: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

מימוש ברקורסיה

Page 15: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

הערכת ביצועים• .fibonacci-נספור כמה קריאות מתבצעות ל

• .fibonacci(n) את מספר הקריאות שנדרשות כדי לחשב את T(n)-נסמן ב

T(1) = T(2) = 1 T(n) = 1 + T(n-2) + T(n-1)

הפיתרון מקיים T(n) = 2Fn - 1 (הוכחה באינדוקציה). •

• (Φ ≈ 1.618…) .Φn / √5 -הוא השלם הקרוב ביותר ל Fn ידוע כי

• .F100 ≈ 3.54X1020 :זה מספר שגדל בקצב מאוד מהיר! למשל

צריכת הזיכרון: בשלב מסויים בריצה פתוחים בבת אחת n עותקים של •הפונקציה.

Page 16: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

מה הבעייה?אנחנו מחשבים מחדש אותם ערכים פעם אחר פעם. •

למשל, עבור n==10, הקריאה fibonacci(n-2) מחשבת • F8 מחשבת את fibonacci(n-1) וגם הקריאה F8 את

באחת הקריאות הרקורסיביות שם.

הערכים F1 ו-F2 מוחזרים סך הכל Fn פעמים. •

אם נזכור את שני הערכים האחרונים, לא נצטרך לחשב •מחדש ברקורסיה את כל הערכים הקודמים.

Page 17: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

F1

F5

F3 F4

F2

F2

F1

F3

F2

Page 18: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

מימוש בלולאה

הלולאה מתבצעת n-2 פעמים. נדרש מספר קבוע של משתנים סקלרים.

Page 19: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

מגדלי האנויהאגדה מספרת:

במקדש קאשי וישוואנאת (בעיר ואראנסי בהודו) יש חדר גדול ובו שלושה מוטות עליהם מושחלות •64 דיסקיות זהב עגולות שהקוטר שלהן שונה זו מזו.

כוהנים ברהמינים, בהשראת נבואה עתיקה, עסוקים בהעברת הדיסקיות מהמוט הראשון לשני, •בעזרת השלישי.

בתחילה, הדיסקיות היו מושחלות על המוט הראשון בהתאם לקוטרן - הגדולה ביותר למטה •והקטנה ביותר למעלה.

הדיסקיות מועברות על פי הכללים המחייבים של ברהמה: •יש להעביר את הדיסקיות אחת-אחת. •מותר להעביר רק דיסקית מראש ערמה אחת לראש ערמה אחרת. •אסור להניח דיסקית גדולה יותר על גבי דיסקית קטנה יותר. •

לכשתסתיים העברת הדיסקיות, יבוא העולם לקיצו. •

בגרסה אחרת של האגדה, אלו נזירים בודהיסטים שנמצאים בעיר האנוי (Hà Nội) בווייטנאם. •

משחק הדיסקיות וכנראה גם האגדה הומצאו על ידי המתמטיקאי הצרפתי אדוארד לוקאס ב-1883. •

Jyotirlinga - ज्योितिलर्) של שיווה. • ङ्ग) הערה: קאשי וישוואנאת הוא אחד מ-12 מקדשי הג׳יוטירלינגה?(Brahmā - ब्रह्मा) פועלים לפי הכללים של ברהמה (Shiva - िशव) למה במקדש של שיווה

Page 20: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

המחשה עם 9 דיסקיות

Page 21: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

פיתרון ברקורסיה, n דיסקיות

אם n == 0, אין צורך לעשות דבר. •

• ,(n > 0 אם) אחרתנעביר n-1 דיסקיות ממוט 1 למוט 3, בעזרת מוט 2. •נעביר את הדיסקית האחרונה ממוט 1 למוט 2. •נעביר n-1 דיסקיות ממוט 3 למוט 2, בעזרת מוט 1.•

http://towersofhanoi.info/Animate.aspx

Page 22: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

מימוש

Page 23: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

ניתוח• - ?hanoi כמה פעמים קוראים לפונקציה

נסמן ב-T(n) את מספר הקריאות שמתבצעות כאשר • .hanoi(n,…) מפעילים את

T(0) = 1 T(n) = 1 + 2T(n-1)

נקבל T(n) = 2n+1 - 1 (הוכחה באינדוקציה)•

Page 24: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

(המשך)כמה צעדים יש בפיתרון? - •

נסמן ב-S(n) את מספר הצעדים שמדפיסה הקריאה ל- • .hanoi(n,…)

S(0) = 0 S(n) = 1 + 2S(n-1)

נקבל S(n) = 2n - 1 (הוכחה באינדוקציה)•

Page 25: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

קץ העולםהאם צריך לחשוש שהאגדה נכונה? - •

אפשר להראות שחייבים לבצע לפחות 2n - 1 העברות של •דיסקית כדי לפתור את הבעייה.

מספר ההעברות שהברהמינים צריכים לבצע הוא: • .264 - 1 = 18,446,744,073,709,551,615

אם כל העברה לוקחת שנייה, זה ייקח כ-585 מיליארד שנים. •

זה יותר מפי 42 מגיל היקום ויותר מפי 127 מגיל כדור הארץ.•

Page 26: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

מבוא למדעי המחשבשיעור 5א: תיעוד פונקציות

Page 27: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

תכנות מודולריעיקרון המודולריות (modularity) - תוכנית מורכבת מחלקים •

ליחידות נבדלות שניתן להחליף בלי לשנות יחידות אחרות.

פונקציות הן כלי למימוש העיקרון הזה. •

כל פונקציה צריכה להיות ממוקדת, קצרה ופשוטה. •

לכל פונקציה צריך להיות ממשק מוגדר וברור. •

די בידיעת הממשק כדי להשתמש בפונקציה. •

השפעה בין פונקציות מתרחשת רק דרך הממשק שלהן.•

Page 28: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

הממשק של פונקציהתיאור הפעולה שהפונקציה מבצעת. •

המשמעות של הפרמטרים והתנאים שהפונקציה מצפה מהם לקיים •בעת הפעלתה (טיפוס, תחום ערכים).

הזה • שהערך והתנאים הפונקציה שמחזירה הערך של המשמעות מקיים.

את • גם לתעד יש ,mutable פרמטרים משנה הפונקציה אם המשמעות והתנאים שערכי הפלט הללו מקיימים.

הודעות שגיאה ופסיקות שהפונקציה עלולה להעלות, אם יש כאלה. •

תופעות לוואי, אם ישנן (למשל: שינוי משתנים גלובליים).•

Page 29: בשחמה יעדמל אובמyrabani/Lecture Notes/Intro/lecture5.pdf · 2015-07-30 · בשחמה יעדמל אובמ היסרוקר :5 רועיש:רפסב 4.3-ו 4.2 םיקרפ

עוד על הממשקמקובל לתעד את הממשק ב-docstring, כלומר מחרוזת התחומה בשלושה זוגות •

גרשיים בתחילתה ובסופה.

מחרוזת כזו יכולה להשתרע על פני מספר שורות. •

שמים את התיעוד מייד אחרי חתימת הפונקציה. •

• .func שמופיע בתוך הפונקציה docstring-מדפיסה את ה help(func) הפעלת

• .print(func.__doc__) לחילופין אפשר לבצע את הפקודה

יש להתייחס לתיעוד כאל חוזה שמפרט מה הפונקציה מבטיחה לבצע ומה •התנאים שהיא דורשת לשם כך.

אם הקלט אינו תקין, הפונקציה לא מבטיחה דבר, אלא אם כן צויין במפורש •שהפונקציה מעלה הודעות שגיאה על בעיות מסויימות בקלט.