যেহেতু আপনি "৩০ মিনিটেরও কম সময়ে রেজেেক্সকে ডিএফএতে রূপান্তর করতে চান", তাই আমি মনে করি আপনি অপেক্ষাকৃত ছোট উদাহরণগুলিতে হাত দিয়ে কাজ করছেন।
এক্ষেত্রে আপনি ব্রাজোজস্কির অ্যালগরিদম ব্যবহার করতে পারেন , যা কোনও ভাষার সরাসরি নেরোড অটোমেটনের গণনা করে (যা তার ন্যূনতম নির্বিচারক অটোমেটনের সমান হিসাবে পরিচিত)। এটি ডেরিভেটিভসের প্রত্যক্ষ গণনার উপর ভিত্তি করে এবং এটি ছেদ এবং পরিপূরককে অনুমতি দেয় বর্ধিত নিয়মিত এক্সপ্রেশনগুলির জন্যও কাজ করে। এই অ্যালগরিদমের অপূর্ণতা হ'ল এটির জন্য, ব্যয়বহুল প্রক্রিয়াটির সাথে গণনা করা এক্সপ্রেশনগুলির সমতুল্যতা পরীক্ষা করা দরকার। তবে অনুশীলনে এবং ছোট উদাহরণগুলির জন্য এটি খুব দক্ষ efficient[1]
বাম ভাগফল । যাক একটি ভাষায় হতে একজন * দিন তোমার দর্শন লগ করা একটি শব্দ হবে। তারপর
তোমার দর্শন লগ করা - 1 এল = { বনাম ∈ একজন * | তোমার দর্শন লগ করা v ∈ এল }
ভাষা U - 1 এল একটি বলা হয় বাম ভাগফল (অথবা ব্যুৎপন্ন বাম ) এর এল ।LA∗u
u−1L={v∈A∗∣uv∈L}
u−1LL
নেরোড অটোমেটন । Nerode যন্ত্রমানব এর নির্ণায়ক যন্ত্রমানব হয় একটি ( এল ) = ( প্রশ্ন , একটি , ⋅ , এল , এফ ) যেখানে প্রশ্ন = { U - 1 এল | তোমার দর্শন লগ করা ∈ একজন * } , এফ = { U - 1 এল | তোমার দর্শন লগ করা ∈ L } এবং ট্রানজিশন ফাংশন প্রতিটি a for এর জন্য সংজ্ঞায়িত করা হয় ∈LA(L)=(Q,A,⋅,L,F)Q={u−1L∣u∈A∗}F={u−1L∣u∈L} , সূত্র
( ইউ - 1 এল ) দ্বারা ⋅ a = ক - 1 ( ইউ - 1 এল ) = ( ইউ এ ) - 1 এল
এটি বরং বিমূর্ত সংজ্ঞা থেকে সাবধান থাকুন। প্রত্যেকটি রাষ্ট্র একটি একটি বাম ভাগফল হয় এল একটি শব্দ দ্বারা, এবং অত: পর একটি ভাষা একটি * । প্রাথমিক অবস্থায় ভাষা এল , এবং চূড়ান্ত রাজ্যের সেটের সব কিছু ফেলে রেখে quotients সমীকরণ হল এল একটি শব্দ এল ।a∈A
(u−1L)⋅a=a−1(u−1L)=(ua)−1L
ALA∗LLL
a,b
a−11a−1(L1∪L2)a−1(L1∩L2)=0=a−1L1∪u−1L2,=a−1L1∩u−1L2,a−1ba−1(L1∖L2)a−1L∗={10if a=bif a≠b=a−1L1∖u−1L2,=(a−1L)L∗
a−1(L1L2)={(a−1L1)L2(a−1L1)L2∪a−1L2si 1∉L1,si 1∈L1
L=(a(ab)∗)∗∪(ba)∗
1−1La−1L1b−1L1a−1L2b−1L2a−1L3b−1L3a−1L4b−1L4a−1L5b−1L5=L=L1=(ab)∗(a(ab)∗)∗=L2=a(ba)∗=L3=b(ab)∗(a(ab)∗)∗∪(ab)∗(a(ab)∗)∗=bL2∪L2=L4=∅=(ba)∗=L5=∅=a−1(bL2∪L2)=a−1L2=L4=b−1(bL2∪L2)=L2∪b−1L2=L2=∅=a(ba)∗=L3
[1]
সম্পাদনা করুন । (এপ্রিল ৫, ২০১৫) আমি সবেমাত্র আবিষ্কার করেছি যে একটি অনুরূপ প্রশ্ন: একটি ডিএফএ নির্মাণের জন্য কোন অ্যালগরিদম রয়েছে যা একটি প্রদত্ত রেইজেক্স দ্বারা বর্ণিত ভাষাটিকে স্বীকৃতি দেয়? সিথেরিতে জিজ্ঞাসা করা হয়েছিল। উত্তরটি আংশিক জটিলতার বিষয়গুলিকে সম্বোধন করে।
a(a|ab|ac)*a+
। আপনি এটি কোনও এনডিএফএতে সরাসরি অনুবাদ করতে পারেন যা আপনি একটি ডিএফএ-তে হ্রাস করেছেন বা আপনি এটিকে এমন কোনও কিছুতে সাধারণীকরণ করতে পারেন যা অবিলম্বে কোনও ডিএফএ-তে মানচিত্র তৈরি করে।