2.4. חיפוש מחיר אחיד (Uniform Cost Search)
האלגוריתם שומר כמו חיפוש לרוחב רשימה
של צמתים פתוחים.
הצומת הבא לפיתוח הוא הצומת שמחיר
המסלול אליו מינימלי.
האלגוריתם עוצר כאשר צומת בעל מחיר
מסלול מינימלי הינו צומת מטרה.
שלמות: ללא
תנאי נוסף האלגוריתם אינו שלם. אם פונקצית המחיר חסומה מלמטה בחסם חיובי אזי חיפוש
מחיר-אחיד הינו שלם.
אופטימליות:
האלגוריתם מחזיר את מסלול הפתרון בעל המחיר המינימלי.
Uniform-cost-search(problem)
OPEN
( make-node(problem[init-state], NIL, 0) )
CLOSE
NIL
while
open
( ) do
next
pop(OPEN)
CLOSE
CLOSE
{next}
if
problem[goal-test](next) then
return(path(new))
loop
for s in expand(next[state])
if
not(find-state(s, CLOSE) then
new-cost
next[g]+cost(next[state], s)
old-node
find-state(s,
OPEN)
if old-node then
if old-node[g] > new-cost then
old-node[g]
new-cost
old-node[parent]
next
; Insert an item into a sorted list
according to field g
insert(old - node, OPEN - {old-node}, g)
else ; no node with same state in open
new
make-node(s, next, new-cost)
insert(new, OPEN, g)
return(FAIL) ; OPEN is empty - no solution
סיבוכיות זמן: נסמן ב-
את מקדם הסיעוף. נניח שקיים פתרון שמחירו
.
במקרה הגרוע ביותר משקל כל הקשתות זהה, ונסמנו
. הפתרון יימצא במרחק
, ולכן יפותחו
צמתים.
סיבוכיות זיכרון: מספר הצמתים שנשמרים בכל רגע הוא מספר הצמתים בעץ, ולכן לכל היותר ישמרו
צמתים, לפי אותו חישוב שנעשה בסיבוכיות הזמן.
אבל הוא עדיין לא נפתח...