מנסה להבין סיבוכיות מהי

assaf990

New member
מנסה להבין סיבוכיות מהי

אני מנסה ללמוד את עניין הסיבוכיות (מבנה נתונים א), הייתי בהרצאה, קראתי כל מיני סיכומי הרצאות קצרצרים אך לא הבנתי. האם יש מקור שמפרט על העניין הזה יותר? לפחות ברמה ראשונית כלשהי אני רוצה להבין. מתי פעולה היא אושן 1 מתי היא אושן N תודה
 

vinney

Well-known member
ויקיפדיה

וזה לא אושן. אין כזה דבר "אושן". הסימון הוא O, וקוראים לזה "O של".
 

טיורינג

New member
התכוונת

שאתה רוצה ללמוד מתי זה אושן 1 ומתי זה אושן 11, לא? (מצטער, זה היה מתבקש, לא הצלחתי לשלוט בעצמי
)
 

vinney

Well-known member
אבל אבל אבל

זה לא אושן, זה אושנז... Ocean's על שם Ocean שקלוני גילם....
 

טיורינג

New member
וואללה, צודק

אבל תודה שזה היה כל כך מפתה שאפשר לסלוח לי על ההשמטה, אה?
 

טיורינג

New member
סיבוכיות על קצה המזלג

בדר"כ מודדים את היעילות של אלגוריתם (בוא נדבר כרגע על יעילות זמן) לפי "כמה פעולות בסיסיות הוא מבצע כפונקציה של אורך הקלט". כלומר, מה שבעיקר מעניין אותנו זה לא "האלגוריתם רץ 5 שניות" כי זה חסר משמעות, אלא כמה האלגוריתם רגיש לשינויים בקלט, או במילים אחרות, אם נגדיל את הקלט ביחס מסויים, איך יגדל זמן הריצה של האלגוריתם? אם האלגוריתם לא תלוי בכלל בקלט (למשל, לולאה שרצה 10 פעמים) אז האלגוריתם בכלל לא רגיש לקלט, הוא אפילו אדיש אליו, ולכן הסיבוכיות שלו היא אושן 1 (מצטער, ויני, פעם אחרונה ודי!) O(1) כמובן. אם האלגוריתם שלך קולט מספר N ואז יש לולאה שרצה N פעמים אז הסיבוכיות היא O(N) - כלומר האלגוריתם רגיש בצורה ליניארית לקלט - ברור לך שככל שתגדיל את N ככה זמן הריצה יגדל בצורה ליניארית. ויש עוד כל מיני. ולעניין ה-O, זה כבר סיפור אחר, אין לי כוח לכתוב כרגע, אבל תגיד אם זה עוזר בכלל...
 

assaf990

New member
מובן יותר אבל

איך אני יודע לנתח כמה זמן צריכה לרוץ פונקציה או אלגוריתים?
 

gil levi

New member
אממממ,

פעולה היא O(1) zzz אם היא לוקחת מספר צעדים קבוע (כמו לסכום 1+1 או כמו לסכום 1+1+1+1). אם אלגוריתם מבצע n פעולות שכל אחת מהן לוקחת זמן O(1) zzz אז סך כל זמן הריצה יהיה O(n) zzz. אם אלגוריתם אחר מבצע n פעולות שכל אחת מהן לוקחת זמן O(n) zzz אז זמן הריצה יהיה O(n^2) zzz. אם אלגוריתם אחר מבצע n^2 פעולות שכל אחת מהן לוקחת זמן ריצה של O(logn) zzz אז זמן הריצה יהיה O(n^2 *logn) zzz. זה עוזר במשהו? יש לך דוגמא ספציפית שאתה מתקשה איתה?
 

ron369

New member
במילים אחרות

1+1+1+1+1 זה O(1). אבל 1+1+1+1+...+1 N פעמים, זה O(N(.
 
למעלה