इस समस्या को नियमित अभिव्यक्तियों के "समावेशन" या "सबसमशन" कहा जाता है, क्योंकि आप जो पूछ रहे हैं, यह है कि क्या एक regexp से मेल खाने वाले शब्दों का सेट अन्य रेगेक्स द्वारा मिलान किए गए शब्दों के सेट (या subsumes) में शामिल है । समानता एक अलग सवाल है जिसका आमतौर पर मतलब है कि दो रेगेक्स एक ही शब्द से मेल खाते हैं, यानी कि वे कार्यात्मक रूप से समकक्ष हैं। उदाहरण के लिए "ए *" में "aa *" शामिल है, जबकि वे बराबर नहीं हैं।
regexp समावेशन के लिए सभी ज्ञात एल्गोरिदम सबसे खराब मामले regexp के आकार में घातीय समय लेते हैं।लेकिन मानक एल्गोरिथ्म इस तरह है:
इनपुट r1 और r2 आउटपुट हाँ r1 r2 शामिल करता है, तो
- बनाएं DFA (आर 1) और DFA (r2)
- बनाएं Neg (DFA (आर 1)) (जो मेल खाता है वास्तव में उन शब्दों को न मैच आर 1)
- बनाएं Neg (DFA (आर 1)) x DFA (r2) (जो वास्तव में Neg (DFA (आर 1)) और DFA (r2) के अनुरूप उन शब्दों से मेल खाता है)
- जांचें कि 3. में बनाए गए automaton किसी भी शब्द से मेल नहीं खाता
यह काम करता है, क्योंकि आप जो जांच रहे हैं वह यह है कि आर 2 द्वारा मेल खाने वाले कोई शब्द नहीं हैं जो आर 1 से मेल नहीं खाते हैं।
@skaffman: मुझे लगता है कि नियमित भाषा टैग उचित है कि एक रेगेक्स नियमित भाषा का वर्णन करता है - यह "पेपर पर" इसका प्रतिनिधित्व करने का एक आसान तरीका है। लेकिन सवाल w.r.t. कंप्यूटर विज्ञान को नियमित अभिव्यक्तियों की तुलना में नियमित भाषाओं के साथ अधिक करना पड़ता है। –
एएच, शीर्षक वर्णन से मेल नहीं खाता है? – maxschlepzig
मुझे यकीन नहीं है कि "एल्गोरिदम" के रूप में अर्हता प्राप्त है, लेकिन "। *" का प्रयोग एक नियमित अभिव्यक्ति के साथ मनमाने ढंग से इनपुट से मेल खाता है; मुझे संदेह है कि इसे कम से कम 1 से कम किया जा सकता है :-) –