2010-09-02 17 views
17

मान लीजिए कि हम नियमित अभिव्यक्ति करते हैं:।।क्या कोई एल्गोरिदम मौजूद है जो यह निर्धारित कर सकता है कि एक नियमित भाषा किसी अन्य इनपुट से मेल खाता है या नहीं, एक नियमित भाषा मेल?

  • हैलो डब्ल्यू * रालोद
  • नमस्ते विश्व
  • * विश्व
  • * डब्ल्यू *

मैं कम करने के लिए चाहते हैं मनमानी इनपुट से मेल खाने के लिए आवश्यक रेगेक्स की संख्या।

ऐसा करने के लिए, मुझे यह पता लगाना होगा कि एक नियमित अभिव्यक्ति किसी अन्य अभिव्यक्ति से मेल खाने वाले किसी भी इनपुट से मेल खाती है या नहीं। क्या यह संभव है?

बिली 3

+0

@skaffman: मुझे लगता है कि नियमित भाषा टैग उचित है कि एक रेगेक्स नियमित भाषा का वर्णन करता है - यह "पेपर पर" इसका प्रतिनिधित्व करने का एक आसान तरीका है। लेकिन सवाल w.r.t. कंप्यूटर विज्ञान को नियमित अभिव्यक्तियों की तुलना में नियमित भाषाओं के साथ अधिक करना पड़ता है। –

+1

एएच, शीर्षक वर्णन से मेल नहीं खाता है? – maxschlepzig

+0

मुझे यकीन नहीं है कि "एल्गोरिदम" के रूप में अर्हता प्राप्त है, लेकिन "। *" का प्रयोग एक नियमित अभिव्यक्ति के साथ मनमाने ढंग से इनपुट से मेल खाता है; मुझे संदेह है कि इसे कम से कम 1 से कम किया जा सकता है :-) –

उत्तर

11

किसी भी नियमित अभिव्यक्ति को डीएफए से जोड़ा जा सकता है - आप डीएफए को कम कर सकते हैं और चूंकि न्यूनतम रूप अद्वितीय है, तो आप तय कर सकते हैं कि दो अभिव्यक्ति बराबर हैं या नहीं। डेनी क्रिको ने हॉपक्रॉफ्ट ओ (एन लॉग एन) एल्गोरिदम को इंगित किया। होपक्रॉफ्ट और क्राफ्ट द्वारा एक और बेहतर एल्गोरिदम है जो ओ (एन) में दो डीएफए के समानता का परीक्षण करता है।

इस मामले पर एक अच्छे सर्वेक्षण के लिए और इसके लिए एक दिलचस्प दृष्टिकोण के लिए, मैं arxiv से पेपर Testing the Equivalence of Regular Languages पेपर को पुनः प्राप्त करता हूं।

बाद में संपादित करें: यदि आप नियमित अभिव्यक्तियों के समानता के बजाय शामिल करने में रुचि रखते हैं, तो मैं एक पेपर में आया हूं जो रुचि का हो सकता है: Inclusion Problem for Regular Expressions - मैंने केवल इसके माध्यम से स्किम किया है लेकिन ऐसा लगता है कि इसमें बहुपद समय एल्गोरिदम है समस्या।

+0

हम्म .. दिलचस्प। हालांकि एक मुद्दा यह है कि '। *' और 'हैलो वर्ल्ड' निश्चित रूप से बराबर नहीं हैं, हालांकि '। *' कुछ भी मिल सकता है 'हैलो वर्ल्ड' मैच कर सकता है। –

+0

मुझे आपके लिए "मैच" के अर्थ का यकीन नहीं है - ऐसा लगता है कि आप समानता का परीक्षण नहीं करना चाहते हैं बल्कि इसके बजाय शामिल करना चाहते हैं। क्या आप अपने प्रश्न के साथ अधिक सटीक हो सकते हैं? – Lawrence

+0

मेरी कठिनाई यह है कि मुझे नहीं पता कि मैं जो खोज रहा हूं उसका वर्णन कैसे करें - मुझे यहां भागने के लिए खेद है। मैंने प्रश्न को थोड़ा सा संशोधित किया है - सेट सिद्धांत समावेशन पर विकिपीडिया के विवरण से मुझे जो चाहिए वह प्रतीत होता है। –

2

हां।

दो नियमित भाषाओं के समानता की समस्या निर्णायक है।

एक एल्गोरिथ्म के स्केच:

  • दोनों DFAs
  • जांच कम से कम अगर वे isomorph
+0

ग्राफ आइसोमोर्फिज्म बहुपद समय में हल करने योग्य नहीं है, इसलिए मुझे नहीं लगता कि इससे कैसे मदद मिलती है। –

+0

@ बिली: मुझे लगता है कि आपका जवाब यह है कि यह एक सैद्धांतिक रूप से हल करने योग्य समस्या है जो हल करने के लिए व्यावहारिक नहीं है। – szbalint

+0

@szbalint: ठीक है "सैद्धांतिक रूप से" मैं भाषाओं में हर संभावित इनपुट स्ट्रिंग को देख सकता हूं और देख सकता हूं कि वे एक ही चीज़ से मेल खाते हैं या नहीं। यदि यह उचित उपभोक्ता हार्डवेयर पर हल करने योग्य नहीं है, तो थोड़ा बिंदु है। –

2

ज़रूर हैं !. एक नियमित अभिव्यक्ति को एफएसएम (परिमित राज्य मशीन) के रूप में दर्शाया जा सकता है और तकनीकी रूप से असीमित संख्या में एफएसएम है जो एक ही स्ट्रिंग को पहचान सकता है।

इस्मोर्फिज्म वह नाम है जो वर्णन करता है कि दो एफएसएम बराबर हैं या नहीं। एफएसएम को कम करने के लिए कुछ एल्गोरिदम हैं। उदाहरण के लिए Hopcroft minimization algorithm एन (एन लॉग एन) में दो एफएसएम को कम कर सकता है, एन स्टेट automaton पर।

+0

@Dani: maxschlepzig के उत्तर के साथ एक ही समस्या। Isomorphism वर्ग एनपी में है। –

+2

@ बिली ओनेल: पहला, (ग्राफ) आइसोमोर्फिज्म एनपी (यह सच है) में है, लेकिन माना जाता है कि यह एनपी-पूर्ण नहीं है, हालांकि पी में नहीं है। हालांकि, हम डीएफए आइसोमोर्फिज्म के बारे में बात कर रहे हैं, जो एक अपूर्ण रूप से अलग है। – jpalecek

+0

@jpalecek: डीएफए आइसोमोर्फिज्म कैसे भिन्न है? एक डीएफए एक digraph से ज्यादा कुछ नहीं है? –

0

इस समस्या को नियमित अभिव्यक्तियों के "समावेशन" या "सबसमशन" कहा जाता है, क्योंकि आप जो पूछ रहे हैं, यह है कि क्या एक regexp से मेल खाने वाले शब्दों का सेट अन्य रेगेक्स द्वारा मिलान किए गए शब्दों के सेट (या subsumes) में शामिल है । समानता एक अलग सवाल है जिसका आमतौर पर मतलब है कि दो रेगेक्स एक ही शब्द से मेल खाते हैं, यानी कि वे कार्यात्मक रूप से समकक्ष हैं। उदाहरण के लिए "ए *" में "aa *" शामिल है, जबकि वे बराबर नहीं हैं।

regexp समावेशन के लिए सभी ज्ञात एल्गोरिदम सबसे खराब मामले regexp के आकार में घातीय समय लेते हैं।लेकिन मानक एल्गोरिथ्म इस तरह है:

इनपुट r1 और r2 आउटपुट हाँ r1 r2 शामिल करता है, तो

  1. बनाएं DFA (आर 1) और DFA (r2)
  2. बनाएं Neg (DFA (आर 1)) (जो मेल खाता है वास्तव में उन शब्दों को न मैच आर 1)
  3. बनाएं Neg (DFA (आर 1)) x DFA (r2) (जो वास्तव में Neg (DFA (आर 1)) और DFA (r2) के अनुरूप उन शब्दों से मेल खाता है)
  4. जांचें कि 3. में बनाए गए automaton किसी भी शब्द से मेल नहीं खाता

यह काम करता है, क्योंकि आप जो जांच रहे हैं वह यह है कि आर 2 द्वारा मेल खाने वाले कोई शब्द नहीं हैं जो आर 1 से मेल नहीं खाते हैं।

संबंधित मुद्दे

 संबंधित मुद्दे