- NFA ראשי תיבות של אוטומטים סופיים לא דטרמיניסטיים. קל לבנות NFA מאשר DFA עבור שפה רגילה נתונה.
- האוטומטים הסופיים נקראים NFA כאשר קיימים נתיבים רבים לקלט ספציפי מהמצב הנוכחי למצב הבא.
- כל NFA אינו DFA, אך ניתן לתרגם כל NFA ל-DFA.
- NFA מוגדר באותו אופן כמו DFA, אך עם שני החריגים הבאים, הוא מכיל מספר מצבים הבאים, והוא מכיל מעבר ε.
בתמונה הבאה, אנו יכולים לראות שממצב q0 עבור קלט a, ישנם שני מצבים הבאים q1 ו-q2, באופן דומה, מ-q0 עבור קלט b, המצבים הבאים הם q0 ו-q1. לפיכך זה לא קבוע או נקבע שעם קלט מסוים לאן ללכת הלאה. מכאן ש-FA זה נקרא אוטומטים סופיים לא דטרמיניסטיים.
הגדרה פורמלית של NFA:
ל-NFA יש גם חמישה מצבים זהים ל-DFA, אך עם פונקציית מעבר שונה, כפי שמוצג להלן:
δ: Q x ∑ →2<sup>Q</sup>
איפה,
Q: finite set of states ∑: finite set of the input symbol q0: initial state F: final state δ: Transition function
ייצוג גרפי של NFA
NFA יכול להיות מיוצג על ידי דיגרפים הנקראים דיאגרמת מצב. שבו:
מחרוזת ממיר לתאריך
- המדינה מיוצגת על ידי קודקודים.
- הקשת המסומנת בתו קלט מציגה את המעברים.
- המצב ההתחלתי מסומן בחץ.
- המצב הסופי מסומן במעגל הכפול.
דוגמה 1:
Q = {q0, q1, q2} ∑ = {0, 1} q0 = {q0} F = {q2}
פִּתָרוֹן:
דיאגרמת מעבר:
מחרוזות מיון java
טבלת מעבר:
מצב נוכחי | המצב הבא עבור קלט 0 | מצב הקלט הבא 1 |
---|---|---|
→q0 | q0, q1 | ש1 |
ש1 | ש2 | q0 |
*q2 | ש2 | ש1, ש2 |
בתרשים לעיל, אנו יכולים לראות שכאשר המצב הנוכחי הוא q0, בכניסה 0, המצב הבא יהיה q0 או q1, ובכניסה 1 המצב הבא יהיה q1. כאשר המצב הנוכחי הוא q1, בכניסה 0 המצב הבא יהיה q2 ובקלט 1, המצב הבא יהיה q0. כאשר המצב הנוכחי הוא q2, בקלט 0 המצב הבא הוא q2, ובקלט 1 המצב הבא יהיה q1 או q2.
דוגמה 2:
NFA עם ∑ = {0, 1} מקבל את כל המחרוזות עם 01.
פִּתָרוֹן:
תכנות r ב-c
טבלת מעבר:
מצב נוכחי | המצב הבא עבור קלט 0 | מצב הקלט הבא 1 |
---|---|---|
→q0 | ש1 | ה |
ש1 | ה | ש2 |
*q2 | ש2 | ש2 |
דוגמה 3:
NFA עם ∑ = {0, 1} וקבל את כל המחרוזות באורך של לפחות 2.
פִּתָרוֹן:
טבלת מעבר:
מצב נוכחי | המצב הבא עבור קלט 0 | מצב הקלט הבא 1 |
---|---|---|
→q0 | ש1 | ש1 |
ש1 | ש2 | ש2 |
*q2 | ה | ה |