מיטוב אלגוריתמים – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
מ סדר תבניות בסוף הערך (בוט סדר הפרקים)
סקריפט החלפות (לעיתים)
שורה 1:
'''מיטוב''' (ב[[לעז]]: אופטימיזציה) הוא ענף ב[[מדעי המחשב]] העוסק בייעול [[אלגוריתם|אלגוריתמים]] ושיפור [[סיבוכיות זמן ריצה|זמן ריצתם]], תוך שמירה על רמה סבירה של [[דיוק ונכונות|דיוק]]. יש להבדיל בין "מיטוב אלגוריתמים" ל"אלגוריתמי [[אופטימיזציה (מתמטיקה)|מיטוב]]" שעוסקים ב[[אופטימיזציה (מתמטיקה)|מציאת פתרון מיטבי לבעיה מוגדרת]].
 
אופטימיזציה מבוצעת ברמות שונות של [[הפשטה (מתמטיקה)|הפשטה]] וראייה כוללת, על ידי גופים שונים. הרמה הבסיסית ביותר של האופטימיזציה נעשית על ידי ה[[מעבד]] עצמו. המעבד חשוף רק לקטעי ה[[קוד]] שזמן ביצועם קרוב. אופטימיזציה שתלויה במעבד היא, למשל, זכירה של היסטוריית הריצה והפעולות האחרונות שבוצעו (לדוגמה: איזה מבין ענפי משפט תנאי מסוים נלקח לעתיםלעיתים קרובות יותר) ופעולה על פי ניבוי המבוסס עליה.
 
ה[[מהדר]] מבצע אופטימיזציה של סידור שורות הקוד ויצירתן. למשל, המהדר יכול להחליט לשכפל קוד מסוים מספר פעמים, במקום להשאירו במבנה של [[לולאה]]. על ידי כך גדל גודל ה[[קובץ]] המכיל את הוראות הביצוע, אך מספר ה[[בקרת זרימה|קפיצות]] בתוך הקובץ קטן. המעבד יכול, בראיית-על של מספר [[שגרה (תכנות)|פונקציות]], לגלות כי לא נעשה שימוש בפונקציה מסוימת, ולא לעבדה כלל. הוא יכול להחליף [[משתנה (תכנות)|משתנים]] ב[[קבוע (תכנות)|קבועים]] או לגלות כי משתנים מסוימים אינם נחוצים.
שורה 7:
המהדר יכול גם לבצע אופטימיזציות אשר משנות את תוצאות ה[[חישוב]]. למשל, המהדר יכול לוותר על שמירת תוצאות ביניים של חישוב ארוך. במקום, הוא יכול להורות למעבד לבצע את כל החישוב, בלי לשמור אותו ל[[זיכרון גישה אקראית|זיכרון]] (RAM) בדרך. אופטימיזציה כזו, המכונה [[הלחמה (מדעי המחשב)|הלחמה]], עשויה לשנות את התוצאה הסופית בפעולות על מספרי [[נקודה צפה]], בייחוד על [[ארכיטקטורת מחשב|ארכיטקטורת]] [[אינטל]] אשר מקדישה 80 [[סיבית|ביט]] לייצוג מספר בתוך המעבד, אך רק 64 ביט לייצוג מספר נקודה צפה בזיכרון (RAM).
 
האופטימיזציה המקיפה ביותר, הכוללת ראיית-על של התהליך כולו, היא האופטימיזציה שמבצע האדם - מתכנן האלגוריתם (ה[[מתכנת]]). בשלב זה של האופטימיזציה יש מקום לשיפורים משמעותיים בביצועים, לעתיםלעיתים אפילו של [[סדר גודל|סדרי גודל]].
 
[[פרופיילר]] (Profiler) הוא [[תוכנה]], המהווה כלי עזר חשוב בביצוע האופטימיזציה. מעקב אחר הזמן ש"מבלה" התוכנה בחלקים השונים של הקוד מספק למתכנת מידע על הנקודות בהן שיפור באלגוריתם יניב שיפור ניכר בביצועים; זאת על פי מספר הפעמים שאותו קטע קוד רץ במהלך ריצה אופיינית של ה[[תוכנית מחשב|תוכנית]].