अपने regexps तुच्छ एकल तार नहीं कर रहे हैं, और आप दक्षता के लिए देखभाल हैं, तो आप अंतिम राज्यों में मूल्यों के साथ, एक भी NFA (nondeterministic finite-state automaton में उन्हें प्रतिनिधित्व करना चाहते हैं। यदि एक से अधिक regexp से मेल खाने के लिए इनपुट के लिए संभव है, तो अंतिम राज्यों को मूल्यों के एक सेट की आवश्यकता होगी।
इस बिंदु पर, आप automaton अनुकूलित करने पर विचार करने के लिए तैयार कर रहे हैं। यदि इसे व्यावहारिक रूप से निर्धारित किया जा सकता है (यह आपको एक डीएफए देता है जो एनएफए की तुलना में तेजी से बड़ा हो सकता है), तो हर तरह से ऐसा करें। एक बार आपके पास एक डीएफए हो, तो आप कुशलतापूर्वक (और विशिष्ट रूप से आइसोमोर्फिज्म तक) इसे कम कर सकते हैं (लेकिन चूंकि आपके पास अपने अंतिम राज्यों में मूल्य हैं, usual algorithm का एक स्पष्ट संशोधन आवश्यक है)।
एनएफए को कम करने के लिए तकनीक भी हैं। उदाहरण के लिए, यदि दो राज्यों में एक ही प्रत्यय सेट हैं ({(स्ट्रिंग, मान का बाकी)}) वे बराबर हैं और संयुक्त किए जा सकते हैं। एक विश्वकोश एनएफए में समानता अंतिम राज्यों से शुरू होने वाले hash-consing के माध्यम से की जा सकती है।
स्रोत
2009-09-10 23:07:48
अब तक के उत्तरों के आधार पर, आप अपने विशेष आवेदन के बारे में अपने प्रश्न में अधिक जानकारी प्रदान करना चाहेंगे। –
एक टन में कितनी अभिव्यक्तियां हैं? वह टेक्स्ट कितना बड़ा होगा? नया टेक्स्ट कितनी बार प्रदान किया जाएगा? परिणामों को कितनी जल्दी वापस करने की आवश्यकता है? – TrueWill