बहुत बड़े एनएफए को डीएफए में परिवर्तित करने के लिए एल्गोरिदम


12

मेरे पास वास्तव में बड़े गैर-नियतात्मक परिमित ऑटोमेटन हैं और मुझे इसे डीएफए में बदलने की आवश्यकता है।

बड़े तौर पर मेरा मतलब 40 000+ राज्यों से है। अब तक मैंने कुछ प्रयोग किए हैं और डिफ़ॉल्ट एल्गोरिथ्म को प्रोग्राम किया है जो टेबल के माध्यम से खोज करता है (जैसा कि यहां वर्णित है ), लेकिन अनुकूलन के बाद भी काफी धीमा और बहुत मेमोरी खपत है। मैं इस तथ्य से अवगत हूं, कि राज्यों की संख्या तेजी से बढ़ सकती है, लेकिन कम से कम होने के बाद, परिणामी DFA में लगभग ९ ००० राज्य हैं और यह सहने योग्य है।

तो मेरा सवाल यह है कि क्या कुछ एल्गोरिथ्म है, जो तेज या अधिक मेमोरी फ्रेंडली होगा?


वीडियो जाहिरा तौर पर मानक निर्धारण एल्गोरिथ्म पर है।
निर्गमन

यदि आप भोले NFA-> DFA रूपांतरण (उत्पाद निर्माण का उपयोग कर) करते हैं, तो परिणामी DFA कितना बड़ा है? (न्यूनतम करने से पहले)
DW

2
आप डीएफए के साथ क्या करना चाहते हैं? यदि आप समावेश जांच में रुचि रखते हैं, तो सीधे ऐसा करने के लिए एल्गोरिदम हैं।
विजय डी।

बहुत तेजी से जवाब देने के लिए धन्यवाद। आकार के लिए, मैं बिल्कुल नहीं बता सकता कि मेरी रैम कब से चल रही है, लेकिन मैं इसे करीब से देखूंगा और सवाल का विस्तार करूंगा। मैं जो करना चाहता हूं, उसके लिए मैं निश्चित नहीं हूं, चाहे मैं इस बारे में खुलकर बातचीत कर सकूं, क्योंकि यह मेरी फर्म के बारे में थोड़ा-बहुत पता है। लेकिन मैं निश्चित रूप से कह सकता हूं कि मुझे वास्तव में परिणामी डीएफए की आवश्यकता है।
जेन्दास

1
क्या आपने सदस्यता और समतुल्यता प्रश्नों से डीएफए सीखने के लिए एंग्लिन के एल्गोरिथ्म को चलाने की कोशिश की है? सदस्यता भाग आसान है (बस अपेक्षित स्ट्रिंग पर अपना डीएफए चलाएं); तुल्यता के लिए, आप बहुत सारे यादृच्छिक स्ट्रिंग्स बना सकते हैं या सभी स्ट्रिंग्स को एक निश्चित लंबाई तक आज़मा सकते हैं। यह केवल एक विधर्मी है जैसा कि आप वास्तव में कभी नहीं जान पाएंगे कि आप कब कर रहे हैं, लेकिन मैंने पाया है कि यह चाल अभ्यास में अच्छी तरह से काम करती है ...
आर्ये

जवाबों:


6

क्या आपने ब्रोज़ोज़ोव्स्की के एल्गोरिथम की कोशिश की है ? यह सबसे खराब स्थिति वाला समय चल रहा है, लेकिन मैं कुछ संदर्भों का सुझाव देता हूं, जो अक्सर यह बहुत अच्छा प्रदर्शन करते हैं, खासकर जब एनएफए से शुरू होता है जिसे आप डीएफए में बदलना चाहते हैं और कम से कम करते हैं।

निम्नलिखित कागज प्रासंगिक लगता है:

यह डीएफए न्यूनीकरण के लिए कई अलग-अलग एल्गोरिदम का मूल्यांकन करता है, जिसमें आपकी स्थिति के लिए उनका आवेदन भी शामिल है जहां हम एक एनएफए से शुरू करते हैं और इसे डीएफए में बदलना चाहते हैं और इसे कम से कम करते हैं।

आपके एनएफए (इसे एक निर्देशित ग्राफ के रूप में मानते हुए) का दृढ़ता से जुड़ा हुआ घटक (एससीसी) अपघटन कैसा दिखता है? क्या इसके कई घटक हैं, जहां कोई भी घटक बहुत बड़ा नहीं है? यदि ऐसा है, तो मुझे आश्चर्य है कि यदि यह एक डिवाइड-एंड-कॉनकोर एल्गोरिदम को तैयार करना संभव हो सकता है, जहां आप एक एकल घटक लेते हैं, तो इसे एनएफए से डीएफए में परिवर्तित करें और फिर इसे छोटा करें, और फिर मूल को नए निर्धारक संस्करण के साथ बदलें। यह एकल-प्रवेश घटकों के लिए संभव होना चाहिए (जहां उस घटक के सभी किनारों को एक एकल शीर्ष, प्रवेश शीर्ष पर ले जाता है)। मैं तुरंत नहीं देखता कि क्या मनमाने ढंग से NFA के लिए ऐसा कुछ करना संभव होगा, लेकिन अगर आप जांचते हैं कि SCC की संरचना कैसी दिखती है, तो आप यह निर्धारित करने में सक्षम हो सकते हैं कि इस प्रकार की दिशा खोज करने योग्य है या नहीं। ।


Brzozowski का एल्गोरिथ्म आशाजनक लगता है, लेकिन विभाजित और तकनीक को और भी अधिक जीतता है! मेरे मामले में यह वास्तव में करना आसान है और बड़े कोड परिवर्तनों की आवश्यकता नहीं है। मैं ऐसा करूंगा और यदि वह काम करता है, तो मैं आपके उत्तर को स्वीकार करूंगा।
जेन्दास

2
मैं आया, मैंने पूछा, मैंने विभाजित किया, मैंने जीत हासिल की
जेन्डस

2

यह स्पष्ट रूप से "डीएफए को निर्धारित / डीएफए को कम करने" की मूल / लंबे समय से पहले की रणनीति के अलावा अन्य ज्ञात / उपलब्ध एल्गोरिदम के अर्थ में बहुत अच्छी तरह से अध्ययन की गई समस्या नहीं है। आपको लगता है कि निर्धारक चरण समस्याजनक है, लेकिन यह निश्चित रूप से दिया गया है कि यह एक घातीय-स्थान / समय बदतर स्थिति है। ध्यान दें कि कई डीएफए न्यूनतमकरण एल्गोरिदम हैं जो औसत पर प्रदर्शन में काफी भिन्न हो सकते हैं।

इसे अनौपचारिक रूप से "एनएफए कम से कम निर्धारण के बिना" के रूप में भी जाना जाता है । यह इस अर्थ में कठिन माना जाता है कि जब तक P = Pspace इस पत्र में दिखाए गए हैं, मूल रूप से भी अनुमानित एल्गोरिदम नहीं हैं:

हालांकि यह पेपर कुछ एल्गोरिदम के आम तौर पर शायद ही कभी खोजे गए मामले पर विचार करता है जो निर्धारित डीएफए 1 सेंट को खोजने पर आधारित नहीं हैं :

हम nondeterministic automata में राज्यों और संक्रमण की संख्या को कम करने के लिए विभिन्न तकनीकों को प्रस्तुत करते हैं। ये तकनीकें राज्यों के सेट पर दो सीमाओं पर आधारित हैं, जो बाएँ और दाएँ भाषाओं को शामिल करने से संबंधित हैं। चूंकि उनकी सटीक गणना एनपी-हार्ड है, हम बहुपद सन्निकटन पर ध्यान केंद्रित करते हैं जो एनएफए को कम करने में समान रूप से सक्षम होते हैं।

एक सार्वजनिक रूप से उपलब्ध पैकेज / कार्यान्वयन पर ध्यान दें जो बड़े एनएफए / डीएफए रूपांतरणों / न्यूनीकरणों को संभाल सकता है जो आमतौर पर कुशलतापूर्वक एटी एंड टी एफएसएम पुस्तकालय है

इसकी एक रणनीति है fsmcompactजो कभी-कभी पर्याप्त हो सकती है:

ऐसे मामलों में जहां एक ट्रांसड्यूसर या भारित स्वीकर्ता को निर्धारित या बड़ा नहीं किया जा सकता है, एक अलग अनुकूलन उपयोगी हो सकता है - fsmcompact। यह ऑपरेशन एक इनपुट लेबल, आउटपुट लेबल और लागत के प्रत्येक ट्रिपल को एक नए लेबल में एन्कोड करता है, शास्त्रीय (अनवीटर्ड एक्सेसर) निर्धारक और न्यूनतमकरण करता है, और फिर एन्कोड किए गए लेबल को उनके मूल मूल्यों में वापस डिकोड करता है। इसका यह फायदा है कि इसे हमेशा परिभाषित किया जाता है और यह पथ के साथ आउटपुट लेबल या लागत को स्थानांतरित नहीं करता है। इसका नुकसान यह है कि परिणाम न तो निर्धारक हो सकता है और न ही न्यूनतम।


एनएफए में कटौती को भी देखें इली, नवारो, यू
vzn
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.