אלגוריתם חיפוש לעומק – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
אין תקציר עריכה
Arieljannai (שיחה | תרומות)
הוספת קישור ל-Iterative deepening depth-first search
שורה 7:
דרך הפעולה שמנחה את החיפוש לעומק היא [[רקורסיה|רקורסיבית]]. בצורה פורמלית, אלגוריתם חיפוש לעומק בודק את הצומת עליו הוא הופעל, ולאחר מכן מפעיל את עצמו רקורסיבית על כל אחד מהצמתים שמקושרים לצומת אליו הוא הופעל, אם הוא טרם ביקר בהם. על מנת לזכור באילו צמתים האלגוריתם כבר ביקר, יש לסמן אותם בדרך כלשהי (ניתן לעשות זאת, למשל, באמצעות טבלה).
 
מימוש אחר של חיפוש לעומק אינו מסמן את הצמתים אותם הרחיב, ומרחיב בן יחיד בכל פעם, היתרון במימוש זה הוא ש[[סיבוכיות מקום|סיבוכיות המקום]] של האלגוריתם נמוכה יותר, <math>\ O(d)</math> לעומת <math>\ O(V)</math> במימוש הקודם, כאשר d הוא העומק המקסימלי של הגרף, ו-V הוא מספר הקודקודים בגרף. החסרון במימוש זה הוא שאם ישנם מעגלים בגרף, החיפוש עלול שלא להסתיים. פתרון לבעיה זאת נמצאה בגישה האיטרטיבית לחיפוש לעומק ({{אנ|Iterative deepening depth-first search|Iterative deepening depth-first search}}), שבה החיפוש לעומק מתבצע כל פעם עד עומק קבוע מראש, כאשר אם לא נמצאה התשובה מגדילים את עומק החיפוש.
 
==שימושים==
לאלגוריתם החיפוש לעומק יתרונות על [[אלגוריתם חיפוש לרוחב]] אם קיימת [[היוריסטיקה]] שמסוגלת לעזור לחיפוש. למשל, בחיפוש היציאה ממבוך, אם יופעל חיפוש לרוחב מאמצע המבוך תימצא היציאה רק בשלב האחרון של האלגוריתם. לעומת זאת, בחיפוש לעומק ניתן יהיה למצוא את היציאה כבר בתחילת ריצת האלגוריתם, עוד לפני שיהיה עליו לשוב על עקבותיו, ובפרט אם יש לו דרך טובה להעריך מהו הכיוון הנכון של היציאה.
 
לעומת זאת, אלגוריתם חיפוש לעומק סובל מחסרונות כאשר הגרפים עליהם הוא פועל הם גדולים מאוד. בפרט, בגרפים בעלי מסלולים אינסופיים, האלגוריתם עלול שלא לעצור גם אם האיבר שהוא מחפש נמצא בגרף (כי המסלול שבו הוא יבחר עלול להיות מסלול אינסופי שבו האיבר שמחפשים לא נמצא, ואז האלגוריתם יתקדם ללא הפסקה באותו מסלול מבלי לחזור על עקבותיו. עם זאת, [[{{אנ|Iterative deepening depth-first search|חיפוש לעומק איטרטיבי-מעמיק]]}} ימנע בעיה זו), וזאת להבדיל מחיפוש לרוחב, שמובטח לו שיגיע מתישהו אל האיבר שאותו מחפשים.
 
ניתן להשתמש באלגוריתם חיפוש לעומק בתור בסיס לאלגוריתמים רבים שפועלים על גרפים. למשל, מציאת [[רכיב קשיר היטב|רכיבים קשירים היטב]] בגרף, מציאת [[מסלול אוילרי]] ומעגלים בגרף או [[מיון טופולוגי]] שלו.