You are on page 1of 19

‫אוטומט מחסנית‬

Automatic Stack
‫דפנה מינסטר‬
2020

https://gifer.com/en/gifs/tutorial ‫מקור התמונה‬:


‫© כל הזכויות שמורות לדפנה מינסטר‬

‫אוטומט מחסנית ‪ -‬מבוא‬


‫‪‬אוטומט מחסנית (באנגלית ‪ PDA - Pushdown Automaton( ‬הוא‪ ‬‬
‫מודל חישובי‪ ,‬שמהווה הרחבה של‪ ‬מודל‪ ‬האוטומט הסופי ה‬
‫דטרמיניסטי‪ ,‬על ידי הוספת זכרון‪ ‬מחסנית‪ ,‬שבה האוטומט מסוגל‬
‫לאחסן‪ ‬מידע‪( ‬משמע‪ ,‬לאוטומט יש יכולת זיכרון)‪ .‬ההרחבה מגדילה‬
‫את‪ ‬כוחו החישובי‪ ‬של האוטומט; כלומר‪ ,‬את‪ ‬קבוצת‪ ‬השפות‪ ‬שהוא‬
‫מסוגל לזהות‪ .‬בגרסתו הסטנדרטית‪ ,‬מודל אוטומט המחסנית מסוגל‬
‫לזהות בדיוק את כל‪ ‬השפות חופשיות (חסרות) ההקשר‪( .‬ויקיפדיה)‬
‫‪ ‬כלומר‪ ,‬מוסיפים לאוטומט סופי מחסנית אינסופית כ"שולחן עבודה"‬
‫כדי שיוכל להתמודד עם מגבלת הזיכרון הסופי‪.‬‬
‫‪ ‬הרעיון המרכזי‪ :‬המחסנית משמשת ככלי השוואה (שווה‪ ,‬שונה‪ ,‬גדול‬
‫או קטן) לתלות הקיימת בין שתי חזקות (דוגמאות בהמשך השעור)‪.‬‬
‫השוואה נעשית ע"י דחיפת תווים למחסנית ושליפתם‪.‬‬
‫© כל הזכויות שמורות לדפנה מינסטר‬

‫אוטומט מחסנית ‪ -‬מבוא‬


‫‪‬שיטת הבנייה של אוטומט המחסנית שונה מבניית האוטומט הסופי‬
‫הדטרמיניסטי והשקולים לו‪ .‬באוטומט הסופי הדטרמיניסטי‪ ,‬אנו‬
‫מתחילים לבנות מהמילה‪/‬ים הכי קצרה‪/‬ות ולאח"כ מוסיפים את‬
‫הבנייה של המילים הארוכות‪ .‬לעומת זאת‪ ,‬באוטומט מחסנית‪ ,‬אנו‬
‫מתחילים לבנות מהמילים הארוכות ולאח"כ מוסיפים את הבנייה של‬
‫המילים הקצרות‪.‬‬
‫‪‬אוטומט המחסנית אינו מלא‪.‬‬
‫‪‬מילה תהיה שייכת לשפת האוטומט אם‪:‬‬
‫‪ .1‬הקלט הסתיים‪.‬‬
‫‪ .2‬סיימנו במצב מקבל‪.‬‬
‫‪ .3‬בשום שלב של התהליך לא נתקענו או נסינו לשלוף ממחסנית‬
‫ריקה‪.‬‬
‫© כל הזכויות שמורות לדפנה מינסטר‬

‫אוטומט מחסנית ‪ -‬דוגמה‬


‫השפה } ‪L = { an b n | n ≥ 0‬‬
‫אות‬ ‫ראש‬ ‫דחוף ‪/ A a , A‬‬
‫פעולה ‪ /‬המחסנית ‪ ,‬קלט‬
‫דחוף ‪/ A a , S‬‬ ‫שלוף ‪ / A b , A‬‬

‫דחוף ‪/ S a , ‬‬ ‫שלוף ‪ / A b , A‬‬

‫‪q  0‬‬ ‫סימון מחסנית ריקה ‪‬‬


‫‪q1‬‬ ‫‪q2‬‬

‫שלוף‬
‫‪ .1‬עבור כל תו ‪ a‬נדחוף ‪ A‬למחסנית‬

‫‪/S‬‬
‫‪b,‬‬

‫‪b,S‬‬
‫ועבור כל תו ‪ b‬נשלוף ‪ A‬מהמחסנית‪.‬‬

‫ף ‪S‬‬
‫שלו‬

‫‪/S‬‬
‫‪ .2‬סימון תחתית המחסנית יתבצע בעזרת התו‬
‫‪q  3‬‬
‫(אם נשלוף את התו ‪ S‬סימן שהמחסנית‬
‫© כל הזכויות שמורות לדפנה מינסטר‬

‫אוטומט מחסנית ‪ -‬מעקב‬


‫השפה‪:‬‬
‫} ‪L = { an b n | n ≥ 0‬‬

‫‪aaabbb‬‬ ‫המילה‪:‬‬

‫‪‬‬
‫© כל הזכויות שמורות לדפנה מינסטר‬

‫אוטומט מחסנית – תרגיל ‪1‬‬


‫בנה‪/‬י אוטומט מחסנית לשפה } ‪L 1 = { an + 1 b n | n ≥ 0‬‬
‫© כל הזכויות שמורות לדפנה מינסטר‬

‫אוטומט מחסנית – תרגיל ‪2‬‬


‫בנה‪/‬י אוטומט מחסנית לשפה } ‪L 2 = { an b m | m > n ≥ 0‬‬
‫© כל הזכויות שמורות לדפנה מינסטר‬

‫אוטומט מחסנית – תיעוד‬


‫תיעוד אוטומט מחסנית לשפה } ‪L 2 = { an b m | m > n ≥ 0‬‬
‫דחוף ‪/ A a , A‬‬
‫דחוף ‪/ A a , S‬‬ ‫שלוף ‪ / A b , A‬‬

‫דחוף ‪/ S a , ‬‬ ‫שלוף ‪ / A b , A‬‬ ‫תיאור פורמלי‪:‬‬


‫‪q0‬‬ ‫‪q1‬‬ ‫‪q2‬‬
‫קבוצת מצבי האוטומט‪Q = { q0 , q1 , q2 , q3 , q4} :‬‬
‫של ו‬
‫‪/S‬‬

‫ף‪,S‬‬ ‫‪ q0‬מחסנית ריקה‪ ,‬עדין לא התקבל קלט‪.‬‬ ‫‪-‬‬


‫‪b,‬‬

‫ללא שינוי ‪/ b , ‬‬


‫ף‪S‬‬

‫‪ q1 -‬התקבל רצף לא ריק של אותיות ‪.a‬‬


‫‪/Sb‬‬
‫שלו‬

‫‪/b‬‬
‫‪,‬‬
‫ינוי‬ ‫‪ q2 -‬התקבל רצף לא ריק של אותיות ‪a‬ולאחריו רצף לא ריק של אותיות‬
‫‪ ‬‬
‫ש‬ ‫לא‬
‫ל‬ ‫‪q3‬‬ ‫ללא שינוי ‪/ b , ‬‬ ‫‪q  4‬‬ ‫‪,b‬‬
‫המופעים של ‪.b‬‬
‫ולאחריו רצף לא‬‫ממספראותיות ‪a‬‬
‫> ריק של‬
‫רצף‪ a‬לא‬
‫התקבל של‬
‫ריקה‪,‬המופעים‬
‫שמספר‬ ‫‪ q3 -‬כך‬
‫מחסנית‬
‫ריק של אותיות ‪ ,b‬כך שמספר המופעים של ‪ = a‬למספר המופעים‬
‫מצב‬ ‫ראש‬ ‫אות‬ ‫מצב‬ ‫‪ q‬מחסנית ריקה‪ ,‬התקבל רצף (גם באורך ‪ )0‬של אותיות ‪a‬ולאחריו רצף לא‬ ‫‪-‬‬
‫של ‪.b4‬‬
‫פעולה‬ ‫הגעה‬ ‫המחסנית‬ ‫קלט‬ ‫יציאה‬
‫ריק של אותיות ‪ ,b‬כך שמספר המופעים של ‪ < a‬ממספר המופעים‬
‫של ‪.b‬‬
‫א"ב הקלט ‪Σ = { a , b } :‬‬
‫א"ב של המחסנית ‪ = { S , A} :‬‬
‫פונקציית המעברים‪(  :‬פירוט בהמשך)‬
‫סימון תחתית המחסנית‪ :‬‬ ‫מצב ההתחלתי‪q0 :‬‬
‫קבוצת מצבים מקבלים‪F = { q4 } :‬‬
‫© כל הזכויות שמורות לדפנה מינסטר‬

‫אוטומט מחסנית – תיעוד‬


‫תיעוד אוטומט מחסנית לשפה } ‪L 2 = { an b m | m > n ≥ 0‬‬
‫דחוף ‪/ A a , A‬‬
‫דחוף ‪/ A a , S‬‬ ‫שלוף ‪ / A b , A‬‬

‫דחוף ‪/ S a , ‬‬ ‫שלוף ‪ / A b , A‬‬ ‫תיאור פורמלי‪:‬‬


‫‪q0‬‬ ‫‪q1‬‬ ‫‪q2‬‬
‫קבוצת מצבי האוטומט‪Q = { q0 , q1 , q2 , q3 , q4} :‬‬
‫של ו‬
‫‪/S‬‬

‫ף‪,S‬‬ ‫‪ q0‬מחסנית ריקה‪ ,‬עדין לא התקבל קלט‪.‬‬ ‫‪-‬‬


‫‪b,‬‬

‫ללא שינוי ‪/ b , ‬‬


‫ף‪S‬‬

‫‪ q1 -‬התקבל רצף לא ריק של אותיות ‪.a‬‬


‫‪/Sb‬‬
‫שלו‬

‫‪/b‬‬
‫‪,‬‬
‫ינוי‬ ‫‪ q2 -‬התקבל רצף לא ריק של אותיות ‪a‬ולאחריו רצף לא ריק של אותיות‬
‫‪ ‬‬
‫ש‬ ‫לא‬
‫ל‬ ‫‪q3‬‬ ‫ללא שינוי ‪/ b , ‬‬ ‫‪q  4‬‬ ‫‪,b‬‬
‫המופעים של ‪.b‬‬
‫ולאחריו רצף לא‬‫ממספראותיות ‪a‬‬
‫> ריק של‬
‫רצף‪ a‬לא‬
‫התקבל של‬
‫ריקה‪,‬המופעים‬
‫שמספר‬ ‫‪ q3 -‬כך‬
‫מחסנית‬
‫ריק של אותיות ‪ ,b‬כך שמספר המופעים של ‪ = a‬למספר המופעים‬
‫מצב‬ ‫ראש‬ ‫אות‬ ‫מצב‬ ‫‪ q‬מחסנית ריקה‪ ,‬התקבל רצף (גם באורך ‪ )0‬של אותיות ‪a‬ולאחריו רצף לא‬ ‫‪-‬‬
‫של ‪.b4‬‬
‫פעולה‬ ‫הגעה‬ ‫המחסנית‬ ‫קלט‬ ‫יציאה‬
‫ריק של אותיות ‪ ,b‬כך שמספר המופעים של ‪ < a‬ממספר המופעים‬
‫(‬ ‫‪q0‬‬ ‫‪,‬‬ ‫‪a‬‬ ‫‪,‬‬ ‫‪‬‬ ‫‪,‬‬ ‫‪q1‬‬ ‫‪, S‬‬ ‫)‬ ‫של ‪.b‬‬
‫(‬ ‫‪q1‬‬ ‫‪,‬‬ ‫‪a‬‬ ‫‪,‬‬ ‫‪S‬‬ ‫‪,‬‬ ‫‪q1‬‬ ‫‪, SA‬‬ ‫)‬ ‫א"ב הקלט ‪Σ = { a , b } :‬‬
‫(‬ ‫‪q1‬‬ ‫‪,‬‬ ‫‪a‬‬ ‫‪,‬‬ ‫‪A‬‬ ‫‪,‬‬ ‫‪q1‬‬ ‫‪, AA‬‬ ‫)‬
‫(‬ ‫‪q1‬‬ ‫‪,‬‬ ‫‪b‬‬ ‫‪,‬‬ ‫‪A‬‬ ‫‪,‬‬ ‫‪q2‬‬ ‫‪,‬‬ ‫‪‬‬ ‫)‬ ‫א"ב של המחסנית ‪ = { S , A} :‬‬
‫(‬ ‫‪q1‬‬ ‫‪,‬‬ ‫‪b‬‬ ‫‪,‬‬ ‫‪S‬‬ ‫‪,‬‬ ‫‪q3‬‬ ‫‪,‬‬ ‫‪‬‬ ‫)‬
‫(‬ ‫‪q2‬‬ ‫‪,‬‬ ‫‪b‬‬ ‫‪,‬‬ ‫‪A‬‬ ‫‪,‬‬ ‫‪q2‬‬ ‫‪,‬‬ ‫‪‬‬ ‫)‬ ‫פונקציית המעברים‪(  :‬פירוט בהמשך)‬
‫(‬ ‫‪q2‬‬ ‫‪,‬‬ ‫‪b‬‬ ‫‪,‬‬ ‫‪S‬‬ ‫‪,‬‬ ‫‪q3‬‬ ‫‪,‬‬ ‫‪‬‬ ‫)‬
‫(‬ ‫‪q3‬‬ ‫‪,‬‬ ‫‪b‬‬ ‫‪,‬‬ ‫‪‬‬ ‫‪,‬‬ ‫‪q4‬‬ ‫‪, ‬‬ ‫)‬ ‫סימון תחתית המחסנית‪ :‬‬ ‫מצב ההתחלתי‪q0 :‬‬
‫(‬ ‫‪q4‬‬ ‫‪,‬‬ ‫‪b‬‬ ‫‪,‬‬ ‫‪‬‬ ‫‪,‬‬ ‫‪q4‬‬ ‫‪, ‬‬ ‫)‬
‫(‬ ‫‪q0‬‬ ‫‪,‬‬ ‫‪b‬‬ ‫‪,‬‬ ‫‪‬‬ ‫‪,‬‬ ‫‪q4‬‬ ‫‪, ‬‬ ‫)‬ ‫קבוצת מצבים מקבלים‪F = { q4 } :‬‬
‫© כל הזכויות שמורות לדפנה מינסטר‬

‫אוטומט מחסנית – תרגיל ‪3‬‬


‫לפניך אוטומט מחסנית הבא‪:‬‬

‫תשובה‪:‬‬
‫} ‪L 3 = { an b 2n | n ≥ 0‬‬

‫הגדר‪/‬י את השפה של האוטומט הנ"ל ‪} . . . { = L 3‬‬


‫© כל הזכויות שמורות לדפנה מינסטר‬

‫שפות חופשיות ‪ /‬חסרות הקשר‬


‫סוגים של שפות חופשיות ‪ /‬חסרות הקשר ‪:‬‬
‫© כל הזכויות שמורות לדפנה מינסטר‬

‫דיאגראמת סיכום ‪ -‬אוטומטים‬


‫ושפות‬
‫© כל הזכויות שמורות לדפנה מינסטר‬

‫שפות חופשיות ‪ /‬חסרות הקשר‬


‫הגדרה‪:‬‬
‫שפה חופשית‪/‬חסרת הקשר היא שפה שניתן לבנות לה אוטומט‬
‫מחסנית (דטרמיניסטי ‪ /‬לא דטרמיניסטי)‪.‬‬

‫שימו לב!‬ ‫‪‬‬


‫הכוח של אוטומט מחסנית דטרמיניסטי לא שקול לאוטומט מחסנית‬
‫לא דטרמיניסטי‪ ,‬לעומת אוטומט הסופי הדטרמיניסטי שכוחו שקול‬
‫לאוטומט הסופי הלא דטרמיניסטי‪.‬‬
‫© כל הזכויות שמורות לדפנה מינסטר‬

‫אוטומט מחסנית – תרגיל ‪4‬‬


‫לשפה‪ :‬שפת הראי המסומנת‬ ‫בנה‪/‬י אוטומט מחסנית דטרמיניסטי‬
‫} ‪- w‬היא מילה מעל הא"ב } ‪L 4 = { w • c • R (w) | { a , b‬‬
‫© כל הזכויות שמורות לדפנה מינסטר‬

‫אוטומט מחסנית – תרגיל ‪5‬‬


‫בנה‪/‬י אוטומט מחסנית לא דטרמיניסטי לשפה‪:‬‬
‫שפת הראי הלא‬
‫מסומנת } ‪- w‬היא מילה מעל הא"ב } ‪L 5 = { w • R (w) | { a , b‬‬
‫© כל הזכויות שמורות לדפנה מינסטר‬

‫אוטומט מחסנית ‪ -‬טיפים‬


‫‪‬שיטת הבנייה באוטומט מחסנית‪ ,‬אנו מתחילים לבנות מהמילים‬
‫הארוכות ולאח"כ מוסיפים את הבנייה של המילים הקצרות‪.‬‬
‫‪‬כאשר הרישא של שפה חופשית הקשר יכולה להיות מילה ריקה‬
‫‪ ,‬יש לחבר‪ ,‬עם מעבר‪ ,‬את המצב ‪ q0‬עם המשך המילה‪( .‬כמו‬
‫בתרגיל ‪)3‬‬
‫‪‬כאשר שפה חופשית הקשר מכילה בתוכה תת‪-‬שפות (רגולריות‬
‫או חופשיות הקשר)‪ ,‬עבור כל שפה אנו משתמשים בשתי אותיות‬
‫שונות ‪.‬‬
‫לדוגמה‪ :‬עבור השפה‪L = { an bm c m dn | n , m ≥ 0 } :‬‬
‫עבור האותיות ‪ a‬ו‪ d -‬בשפה נשתמש באותיות המחסנית ‪ S‬ו‪.A -‬‬
‫© כל הזכויות שמורות לדפנה מינסטר‬

‫אוטומט מחסנית – טיפים‬


‫(המשך)‬
‫‪‬כאשר שפה חופשית הקשר מכילה בתוכה תת‪-‬שפות (רגולריות‬
‫או חופשיות הקשר)‪ ,‬והרישא של השפה חופשית הקשר החיצונית‬
‫יכולה להיות מילה ריקה ‪ ,‬יש לטפל גם בתת השפות הפנימיות‬
‫בנפרד‪.‬‬
‫לדוגמה‪ :‬עבור השפה‪L = { an bm c m dn | n , m ≥ 0 } :‬‬
‫יש לטפל במילים ‪ an bm c m dn‬בנפרד וגם‬
‫יש לטפל במילים ‪ bm c m‬בנפרד‪.‬‬
‫דוגמה לפתרון בדף הבא‪:‬‬
‫שימו ‪ ‬לחלק בצבע כחול‬
‫אוטומט מחסנית – טיפים‬
‫© כל הזכויות שמורות לדפנה מינסטר‬

‫(המשך)‬
‫השפה‪L = { an bm c m d n | n , m ≥ 0 } :‬‬
‫© כל הזכויות שמורות לדפנה מינסטר‬

‫אוטומט מחסנית‬
‫‪Automatic Stack‬‬
‫דפנה מינסטר‬
‫‪2020‬‬
‫ביבליוגרפיה‪:‬‬
‫ארמוני‪ ,‬מ‪ .)1998( .‬מודלים חישוביים‪.‬‬

‫‪The End‬‬
‫תל‪-‬אביב ‪ :‬האוניברסיטה הפתוחה‪.‬‬

You might also like