מבני נתונים ואלגוריתמים - מחברת קורס/אלגוריתמים/מציאת סיבוכיות פסוודו-קוד/תרגילים/פונקציה המשתמשת במודולו/תשובה
מראה
פעולת הפונקציה
[עריכה]כדי להבין מה עושה הפונקציה כאשר היא מקבלת את הקלט , נחשוב על הייצוג הבינרי של , נניח (כלומר נניח ש הנו מספר בעל ביטים, בעל הביט החשוב ביותר , והביט החשוב פחות ).
כעת נראה מה הפונקציה עושה.
- בשורה 3, הביטוי הוא בדיוק ערך הביט .
- שוב בשורה 3,
Foo( ⌊n / 2⌋ )
היא הקריאה לאותה פונקציה, אך עם הערך .
מכאן ברור שהפונקציה פשוט סוכמת את הביטים של . אפשר להראות זאת פורמלית באינדוקציה.
ניתוח סיבוכיות
[עריכה]מהתבוננות בשלוש שורות הפונקציה, ברור שלמעט הקריאה הרקורסיבית, כל הפעולות הן בזמן קבוע. מכאן נקבל את נוסחת הנסיגה . נזכר שוב שמותר לנו (בקורס זה) להתעלם משגיאות עיגול בנוסאות נסיגה של זמן ריצה, ולכן נוסחת הנסיגה היא . כבר ראינו (בדף על נוסחאות נסיגה) שפתרון נוסחה זו הוא .