משתמש:Zivn/דיאגרמת החלטה בינארית

מתוך ויקיפדיה, האנציקלופדיה החופשית

דיאגרמת החלטה בינאריתאנגלית: Binary Decision Diagram או בקיצור BDD) היא מבנה נתונים לייצוג קומפקטי של פונקציות בינאריות. ניתן לייצג באמצעות מבנה נתונים זה גם קבוצות ויחסים, תוך שימוש בפונקציה המציינת שלהם, וכן לבצע ביעילות יחסית פעולות כגון חיתוך, איחוד, משלים וכימות, ושאילתות כגון שייכות, הכלה וזהות. השימוש ב-BDD נפוץ בעיקר בתכנון מעגלים משולבים, באימות שבבים ובאימות תוכנה.

הגדרה[עריכת קוד מקור | עריכה]

BDD הוא גרף מכוון חסר מעגלים בעל צומת מקור בודד, ובו דרגת היציאה של כל הצמתים היא 2, למעט שני צמתי בור (עלים) המסומנים בתוויות 0 (שקר) ו-1 (אמת). הצמתים שאינם צמתי בור מכונים צמתי החלטה, ולכל אחד מהם מוצמדת תווית עם משתנה בוליאני . שתי הקשתות היוצאות מכל צומת החלטה מסומנות אף הן בתוויות: לאחת ניתנת התווית low, ולשניה התווית high. הקשת המסומנת בתווית low מייצגת השמה של הערך 0 למשתנה הבוליאני בו סומן הצומת ממנו יצאה הקשת. הקשת המסומנת בתווית high מייצגת השמה של הערך 1 לאותו משתנה.

כל BDD מייצג פונקציה בוליאנית יחידה. כדי לחשב את ערך הפונקציה על הצבה נתונה למשתנים הבוליאנים, יש להתחיל מצומת המקור, ולבחון את הערך שקיבל בהצבה המשתנה בתווית של צומת זה. אם הערך הוא 0, יש לעבור לצומת המוצבע על ידי הקשת עם התווית low. אם הערך הוא 1, יש לעבור לצומת המוצבע על ידי הקשת עם התווית high. בצומת הבא, יש לבחון שוב את הערך שקיבל בהצבה המשתנה של הצומת (יתכן שכעת זהו משתנה אחר). בהתאם לערך, יש לבחור את קשת היציאה ולהמשיך לצומת הבא. כך יש להמשיך עד שמגיעים לאחד מצמתי הבור. ערך הפונקציה על ההצבה נתון על ידי התווית של צומת הבור.

BDD יקרא סדור (ordered) אם על תוויות הצמתים בכל מסלול מצומת המקור לאחד מצמתי הבור מופיעים המשתנים הבוליאניים לפי סדר נתון.

BDD יקרא מצומצם (reduced) אם מתקיימים בו שני הכללים הבאים:

  • אין בגרף שני תתי גרף איזומורפים.
  • אין בגרף צומת ששתי הקשתות היוצאות ממנו מצביעות לאותו צומת.

המונח BDD מתייחס בדרך כלל ל-BDD סדור ומצומצם. אם נדרשת הבהרה מיוחדת, יופיעו הקיצורים OBDD ו-ROBDD לציון BDD סדור ו-BDD סדור ומצומצם בהתאמה. השימושיות הרבה של ROBDD נובעת מתכונת הקאנוניות שלו: בהנתן סדר על המשתנים, לכל פונקציה בוליאנית קיים BDD יחיד שמייצג אותה.

ב-ROBDD, כל מסלול מצומת המקור לצומת הבור עם התווית 1, מייצג הצבה (יתכן חלקית) עליה הפונקציה מחזירה 1. אם עוברים דרך קשת עם התווית low, המשתנה בצומת ממנה יצאה הקשת מקבל את הערך 0. עם עוברים דרך קשת עם התווית high המשתנה מקבל את הערך 1.

דוגמה[עריכת קוד מקור | עריכה]

נתונה הפונקציה הבוליאנית . התרשים הימני מציג את טבלת האמת של וכן עץ החלטה בינארי עבור הפונקציה. הקשתות המקווקוות הן קשתות עם התוויות low, ולקשתות המלאות תווית high. ניתן לראות שבעץ ההחלטה קיימים תתי עצים איזומורפים המהווים יתירות. התרשים השמאלי מציג ROBDD עבור , בו הופעלו כללי הצמצום, ועל כן אין בו תתי גרפים איזומורפים.

טבלת אמת ועץ החלטה בינארי עבור הפונקציה
ROBDD עבור הפונקציה

פעולות לוגיות[עריכת קוד מקור | עריכה]

שימושים[עריכת קוד מקור | עריכה]

היסטוריה[עריכת קוד מקור | עריכה]

במאמר מ-1986 הציג רנדל בריאנט לראשונה BDD סדור ומצומצם. [1] לאורך תקופה ארוכה, היה זה המאמר המצוטט ביותר במדעי המחשב.[2]

בסדרת ההרצאות המפורסמת Computer Musings, הקדיש דונלד קנות' ב-2008 הרצאה שלמה ל-BDD וגרס כי זהו מבנה הנתונים היסודי היחיד שהומצא בעשרים וחמש השנים האחרונות.[3]

מבני נתונים דומים[עריכת קוד מקור | עריכה]

הערות שוליים[עריכת קוד מקור | עריכה]

  1. ^ Randal E. Bryant, Graph-Based Algorithms for Boolean Function Manipulation, IEEE Transactions on Computers C-35, 1986, עמ' 677–691
  2. ^ Bryant, Randy (Randal E.) oral history, Computer History Museum
  3. ^ Fun With Binary Decision Diagrams (BDDs), Computer Musings by Professor Donald E. Knuth