6.8.2. אלגוריתם בסיסי לפתרון SAT -Davis Putmam (DPLL), 1960, 1962
הגדרה: פסוקית יחידה היא פסוקית
שתחת השמה חלקית נתונה יש בה בדיוק ליטרל אחד שאין לו ערך, וכמו כן ערכם של כל שאר
הליטרלים בפסוקים הוא false.
לדוגמא, תחת ההשמה
הפסוקית הבאה היא פסוקית יחידה: . הדרך היחידה להרחיב את ההשמה הנתונה להשמה מספקת היא לתת לליטרל
שנותר את הערך true.
האלגוריתם לפתרון SAT:
- מתחילים מהשמה חלקית ריקה - שלא נותנת ערך לאף משתנה.
- החלטה: מרחיבים את ההשמה החלקית הנתונה
ע"י החלטה (משתנה + ערך).
- הסקה (BCP): מרחיבים השמה עם
כל הגרירות שנובעות מההחלטה.
- ניתוח: אם התקבל קונפליקט (פסוקית קיבלה
ערך F או לחילופין משתנה שחייב לקבל גם ערך true וגם ערך false)
בהשמה הנוכחית אז מבצעים נסיגה, שבה מבטלים חלק מההחלטות, וחוזרים ל-1.
נסיגה כרונולוגית: מבטלים החלטות עד ההחלטה האחרונה שבה המשתנה עדין
לא קיבל את הערך השני, והופכים את הערך.
- אם אין קונפליקט וההשמה עדיין אינה מספקת, חוזרים ל-2.
עצירת האלגוריתם:
- האלגוריתם
עוצר בהצלחה (עם השמה מספקת) כאשר נמצאה השמה שמספקת את כל הפסוקיות.
- האלגוריתם
עוצר ללא הצלחה (עם מסקנה שהנוסחה אינה ספיקה) אם יש פסוקית שערך האמת שלה הוא F ואין
החלטות שאפשר לשנות אותן.
דוגמא לתהליך:
- נביט בנוסחה הפסוקית הבאה:
- החלטה ברמה 1: נבחר :
- BCP:
צריך לבצע בגלל פסוקית היחידה השמאלית:
- החלטה ברמה 2: נבחר .
קיבלנו
קונפליקט – לא קיים ערך של שיספק את הנוסחה, ולכן מבצעים
נסיגה.
נשים לב
שבמקרה הזה זיהינו את הקונפילט באופן מיידי. לעתים הקונפילקט יתגלה רק
לאחר כמה
שלבים נוספים.
- נסיגה: נבחר .
- BCP:
הפסוקית האחרונה מכריחה אותנו לבחור .
- קיבלנו השמה חלקית מספקת: . הערך של יכול להיות 0 או 1.