ماشین تعیینپذیر حالات متناهی
در نظریه اتوماتا، شاخهای از علوم کامپیوتر نظری، ماشینهای تعیینپذیر حالات متناهی (Deterministic finite-state machine) به آن دسته از ماشینهای حالات متناهی اطلاق میشود که رشته متناهی از سمبلها را میپذیرد یا رد میکند و برای هر رشته ورودی تنها محاسباتی یکتا از ماشین اتوماتا را تولید میکند. در واقع 'تعیینپذیری' در این ماشینها به یکتایی محاسبات برمیگردد. در جستجوی سادهترین روشها برای نمایش ماشینهای حالت متناهی، مککالک (McCulloch) و پیتس (Pitts) در میان اولین محققانی بودند که مفاهیم و ایدههایی شبیه به ماشینهای اتوماتای محدود را در سال 1943 معرفی کردند.
شکل سمت راست، یک ماشین تعینپذیر حالات متناهی را با استفاده از نمودار حالت ها نشان می دهد. در این ماشین اتوماتا، سه حالت S0، S1 و S2 وجود دارند (که در تصویر با دایره نشان داده شدهاند). ماشین اتوماتا دنباله ای از 0ها و 1ها را به عنوان ورودی دریافت میکند. برای هر حالت، به ازای هر یک از 0 و 1، یک بردار انتقال موجود است که به حالت بعد راهنمایی میکند. تا زمانی که یک نماد را میخوانیم، یک DFA به صورت تعیین پذیر و قطعی با دنبال کردن بردارهای انتقال از حالتی به حالت دیگر حرکت می کند. برای مثال، اگر ماشین اتوماتا در حالت S0 قرار دارد و نماد ورودی نیز 1 است، به صورت قطعی به حالت S1 خواهد رفت. یک DFA دارای یک حالت آغازین است (با فلشی که از هیچ کجا به آن وارد میشود، نشان داده میشود)که محاسبات در آن آغاز میشوند، و یک مجموعه از حالات نهایی (با دایره دوخطه نشان داده میشوند) که کمک میکند زمانی را که محاسبات موفق شده است را تعریف کنیم. یک DFA به عنوان یک مفهوم ریاضی مطلق تعریف شده است، اما با توجه به ذات نعیینپذیر DFA، قابل پیادهسازی در سخت افزار و نرم افزار برای حل مسائلی خاص و مختلف است. برای مثال یک DFA میتواند یک نرم افزار را که تصمیم میگیرد که آیا ورودی کاربر (برای مثال) یک آدرس ایمیل معتبر است یا نه، مدل کند. DFAها دقیقا مجموعه زبانهای منظم را که، به غیر از موراد دیگر، برای انجام آنالیزهای واژگانی و تطبیقهای الگویی مفید هستند، می پذیرند. همچنین DFAها میتوانند از طریق ساخت مجموعه توانی از ماشینهای تعینناپذیر حالات متناهی ساخته شوند.
محتویات |
تعریف رسمی [ویرایش]
اتوماتون تعیینپذیر متناهی (Deterministic Finite Automaton - DFA) به یک پنجتائی
گفته میشود، که شامل:
یک مجموعهٔ متناهی از حالات
یک مجموعهٔ متناهی از نمادهای ورودی موسوم به الفبا
حالت آغازین (q0 ∈ Q)
مجموعهٔ حالات نهائی یا مجموعهٔ حالات مورد قبول (F ⊆ Q)
تابع انتقال (δ : Q × Σ → Q)
می باشد. فرض کنید w = a1a2 ... an رشتهای از الفبای
باشد.در این صورت رشته w توسط اتوماتون M پدیرفته میشود، اگر دنبالهای از حالات r0,r1, ..., rn در Q با شرایط زیر وجود داشته باشند:
- r0 = q0
- ri+1 = δ(ri, ai+1), for i = 0, ..., n−1
- rn ∈ F.
به عبارت دیگر، شرط اول بیان میکند که ماشین با همان حالت آغازین q0 شروع به محاسبه کند. شرط دوم بیان میکند که بر اساس هر یک از کاراکترهای رشته w داده شده، ماشین از حالتی به حالت دیگر طبق تابع انتقال δ انتقال خواهد یافت. و شرط آخر بیان میکند که ماشین w را میپذیرد، اگر آخرین ورودی w باعث توقف ماشین در یکی از حالات پایانی شود. در غیر این صورت، گفته میشود که اتوماتون رشته را رد کرده است. مجموعه همه رشتههایی که M میپذیرد، زبانیست که در M صدق میکند و این زبان با (L(M نشان داده میشود. ماشین تعینپذیر متناهی که حالت پایانی و آغازین ندارد به عنوان سیستم انتقال و یا شبهاتوماتون شناخته میشود. برای آشنایی بیشتر با تعریف رسمی نظریه اتوماتا را ببینید.
مثالها [ویرایش]
مثال زیر، DFAی M با الفبای باینری است که ورودیهایی را که شامل تعداد زوجی 0 هستند را میپذیرد.
(M = (Q, Σ, δ, q0, F که
- {Q = {S1, S2,
- {Σ = {0, 1,
- q0 = S1,
- {F = {S1, و
- δ که با جدول انتقال حالت زیر تعریف میشود:
-
0 1 S1 S2 S1 S2 S1 S2
حالت S1 نشاندهنده این است که تاکنون تعداد زوجی 0 در ورودی بوده است. در حالی که S2 حاکی از تعداد فردی 0 است. یک 1 در ورودی حالت اتوماتون را تغییر نمیدهد. زمانی که ورودی پایان یابد، حالت اتوماتون نشاندهنده آن خواهد بود که آیا ورودی دارای تعداد زوجی 0 است یا نه. اگر ورودی شامل تعداد زوجی 0 باشد، M در حالت S1 که حالتی پایانی است، پایان خواهد یافت و بنابراین رشته ورودی پذیرفته خواهد شد. زبانی که در M صدق میکند یک زبان منظم است که با عبارت منظم *((*1)0(*1)0)*1 نشان داده میشود. "*" همان ستاره کلینی است؛ برای مثال *1 نشاندهنده هر تعداد غیرمنفی (شاید صفر عدد) از نماد 1 است.
ویژگی های بستاری [ویرایش]
اگر زبانِ DFAی حاصل از اعمال عملیاتی بر DFAها قبل تشخیص با یک DFA باشد، گفته می شود که DFAها تحت آن عملیات بسته هستند. DFAها تحت عملیات زیر بسته هستند:
- اجتماع
- اشتراک
- الحاق
- ستاره کلین
- معکوس سازی
- Negation
- Init
- Quotient
ازآنجاییکه DFAها همارز با ماشینهای تعیینناپذیر متناهی NFA هستند، ویژگیهای بستاری بالا با استفاده از ویژگیهای بستاری NFA ها اثبات میشوند.
شیوههای پذیرنده و تولیدکننده [ویرایش]
يک DFA که نماينده يک زبان منظم است، ميتواند هم به عنوان پذيرنده، براي تصديق عضويت يک رشته ورودي در زبان، و هم به عنوان توليدکننده، براي توليد ليستي از رشتههاي زبان، استفاده شود. در حالت پذيرنده، يک رشته ورودي فراهم شده است که اتوماتون ميتواند آن را از چپ به راست، و هر بار يک نماد را بخواند. محاسبات از حالت آغازين شروع شده و با خواندن اولين نماد از رشته ورودي و دنبال کردن انتقال حالات طبق نمادها پيش ميرود. سيستم به خواندن نمادها و دنبال کردن انتقالها تا زماني که ديگر هيچ نمادي در ورودي باقي نمانده باشد، که نشاندهنده پايان محاسبات است، ادامه ميدهد. اگر پس از پايان يافتن پردازش همه نمادهاي ورودي، سيستم در حالت پاياني باشد، خواهيم دانست که که رشته ورودي در واقع جزئي از زبان است، و گفته ميشود که پذيرفته شده است؛ درغيراينصورت جزئي از زبان نبوده و پذيرفته نشده است. حالت توليدکننده هم شبيه است؛ به غير از اين که علاوهبر تعيين اعتبار يک رشته ورودي، هدف آن تعين همه رشته هاي موجود در زبان است. به جاي دنبال کردن يک انتقالِ خروجي از هر حالت، همه آنها را دنبال ميکند. و در عمل اين با يک سري عمليات موازي سنگين (داشتن يک برنامه که هر بار با تصميم گيري مواجه ميشود به دو يا بيشتر پردازه انشعاب مييابد) و يا از طريق محاسبات بازگشتي به انجام ميرسد. مانند قبل، محاسبات از حالت آغازين شروع شده و سپس با دنبال کردن هر يک از انتقالهاي دردسترس پيش ميرود، با آگاهي از اين که کدام يک از شاخهها انتخاب شده است. هر بار که اتوماتون خودش را در حالت پاياني بيابد، درمييابد که دنبالهاي از شاخههايي که انتخاب شده است، يک رشته مورد قبول از زبان را تشکيل ميدهد و آن رشته را به ليستي که در حال توليد آن است، اضافه ميکند. اگر زباني که اين اتوماتون شرح ميدهد، نامتناهي باشد (يعني شامل تعداد نامتناهي از اعداد يا رشتهها باشد، مثلا همه رشتههاي دودويي با تعداد زوجي صفر)؛ محاسبات هرگز متوقف نخواهد شد. مسلم است که زبانهاي منظم، بهطورکلي، نامتناهي هستند، اتوماتا در حالت توليد کننده گرايش بيشتر به ساخت نظري دارد.
DFA به عنوان انتقال مونوئید یا تکوار [ویرایش]
بعلاوه، یک اجرا (run) میتواند به عنوان یک دنباله از ترکیب توابع انتقال با خودشان دیده شود. نماد ورودی
داده شده است، امکان دارد شخصی تابع انتقال را به صورت
، با استفاده حیله ساده currying بنویسد که به صورت
برای هر
نوشته میشود. بدین صورت، تابع انتقال میتواند به صورت سادهتری دیده بشود: این تنها چیزیست که روی حالتی از Q "عمل میکند"، و به حالت دیگر میرود. ممکن است بدین صورت در نظر گرفته شود که نتیجه ترکیب توابعی است که مکرراً به توابع مختلف
,
اعمال میشوند، و قس على هذا. با استفاده از این مفهوم
را تعریف می کنیم. دو حرف
داده شده است، ممکن است شخصی تابع جدید
را با تکیه کردن بر
تعریف کند، که
نشاندهنده ترکیب توابع است. به وضوح، این فرآیند میتواند به صورت بازگشتی ادامه داده شود.بنابراین تعریف بازگشتی ذیل را داریم:
که
رشته تهی است و:
که
و
.
برای هر
تعریف شده است. ترکیب مکرر توابع یک مونوئید یا تکوار را به وجود میآورد. برای تابع انتقال، این مونوئید به عنوان انتقال مونوئید و یا گاهی شبهگروه تغییر شکل شناخته می شود. همچنین این ساخت میتواند برعکس شود:
داده شده است، شخصی می تواند
را دوبارهسازی کند، و بنابراین هر دو توصیف معادلند.
منابع [ویرایش]
- Sudkamp, T. A., An Introduction to the Theory of Computer Science, Languages and Machines, 3rd ed., Pearson Education, Inc., 2006. ISBN 0-321-32221-5 [۱]
یک
حالت آغازین (q0 ∈ Q)
مجموعهٔ حالات نهائی یا مجموعهٔ حالات مورد قبول (F ⊆ Q)