אלגוריתם חמדן (Greedy Algorithm) הוא שיטה שמהווה קבוצה של בחירות מקומיות. בכל שלב בוחרים את האפשרות שנראית הכי טובה ברגע הזה, בלי לחשוב על השלבים הבאים. שיטה זו שימושית בבעיות מיטוב (optimization), בעיות שבהן מחפשים את הפתרון הטוב ביותר.
אלגורוריתמים חמדניים בדרך כלל עובדים מהר ומספקים קירוב טוב כשאין דרך למצוא פתרון אופטימלי בזמן סביר. זאת במיוחד מול בעיות NP-קשות, בעיות שקשה מאוד לפתור בצורה מדויקת במהירות. לפעמים בחירות חמדניות דווקא נותנות פתרון אופטימלי. דוגמה בולטת היא אלגוריתם פרים לעץ פורש מינימלי (עץ שמחבר את כל הקודקודים במשקל הכולל הקטן ביותר).
כדי להוכיח שחמדן עובד לעיתים משתמשים במושג מטרואידים, מבנה מתמטי שמסדר את האפשרויות כך שבחירה חמדנית מובילה תמיד לתוצאה נכונה. יש גם הוכחות בדרך השלילה או באמצעות "למת החלפה", אבל הן פחות אינטואיטיביות.
- בעיית הסוכן הנוסע (Traveling Salesman): שיטת "הקרוב הבא" בוחרת בכל פעם את היישוב הקרוב שלא ביקרו בו עוד. שיטה זו יכולה להוביל למסלול ארוך ולא אופטימלי.
- בעיית בחירת פעילויות: בוחרים תמיד את הפעילות שסיימת הכי מוקדם. כך ממלאים הכי הרבה זמן בפעילויות.
- בעיית המטבעות: כדי להגיע ל-36 אגורות עם מטבעות של 20, 10, 5 ו-1, בוחרים בכל שלב את המטבע הגדול ביותר שמתאים לשארית. בשורה של ערכים מסוימים זה נותן פתרון אופטימלי, ובאחרים לא.
- קוד הופמן: בקידוד בינארי בוחרים תווים לפי שכיחותם ומשייכים להם ייצוגים מתאימים.
- אלגוריתם ID3: אלגוריתם חמדני שבונה עץ החלטה מדוגמאות.
אלגוריתם חמדן זה דרך לפתור בעיות. אלגוריתם = סדרת חוקים לפתרון. חמדן = בוחר את מה שנראה הכי טוב עכשיו. זה בדרך כלל מהיר. לפעמים הוא נותן פתרון טוב. לפעמים לא.
חמדנים עוזרים כשאין זמן לחשוב הרבה. יש בעיות שקשה מאוד לפתור מהר. לפעמים הבחירה החמדנית גם היא הכי טובה.
- סוכן נוסע: כל פעם נוסעים ליישוב הקרוב. זה עלול ליצור מסלול ארוך בסוף.
- בחירת פעילויות: בוחרים את הפעילות שסיימת הכי מוקדם. כך מספיקים יותר פעילויות.
- מטבעות: רוצים 36 אגורות עם מטבעות 20, 10, 5 ו-1. בוחרים את המטבע הגדול שמתאים לשארית.
- קוד הופמן: בוחרים תווים לפי כמה הם נפוצים כדי לקודד אותם בקיצור.
- ID3: אלגוריתם שיבנה עץ שענה על שאלות מתוך דוגמאות.
תגובות גולשים