अधिकांश REGEX कार्यान्वयन जटिलता के पैमाने पर कहाँ आते हैं?


19

नियमित अभिव्यक्ति के अधिकांश आधुनिक कार्यान्वयन, जैसे कि perl या .NET में हैं, लुकहेड और लुकबाइंड जैसी सुविधाओं के साथ REGEX की शास्त्रीय कंप्यूटर विज्ञान परिभाषा से परे हैं। क्या ये विशेषताएं उन्हें ऐसे बयान देने देती हैं जिन्हें एक परिमित, गैर-पुशडाउन ऑटोमेटन के साथ वर्णित नहीं किया जा सकता है? ट्यूरिंग पूरा करने के लिए कितना करीब है यह उन्हें बनाता है अगर वे कर सकते हैं?


2
एक निकटता से संबंधित प्रश्न: क्या हमारे पास "बैकरेफ़रेन्स के साथ रीजेक्स" और "रेगेक्स जो मनमाना प्रोग्राम कोड हो सकता है" के बीच कुछ भी दिलचस्प है? उदाहरण के लिए, बैकरेफरेंस और लुकहेड / लुकबाइंड के साथ रेगीक्स हैं, बैकरेफरेंस के साथ रेग्जेस की तुलना में कड़ाई से अधिक अभिव्यंजक हैं लेकिन कोई लुकहैड / लुकहाइंड? पर्ल में "स्पेशल बैकट्रैकिंग कंट्रोल वर्ब्स" के बारे में क्या?
जुका सुओमेला

संबंधित (और संभवतः गलत): stackoverflow.com/questions/2974210/…
आर्यभट्ट

जवाबों:


18

मुझे नहीं लगता है कि वास्तविक समस्या यह है कि अनबाउंड का मतलब क्या है; यह किसी भी अन्य स्थिति से बदतर नहीं है।

यह समस्या बैकरेफ़रेन्स को चिह्नित करने में है, जो बहुत शक्तिशाली और बहुत सीमित दोनों हैं: वे कुछ गैर-संदर्भ-मुक्त भाषाओं का वर्णन करते हैं, कुछ संदर्भ-मुक्त भाषाओं की अनुमति के बिना। उदाहरण के लिए, रेगेक्स(a*)b\1b\1 के रूप में तार से मेल खाता है , और आप इसे दिखाने के लिए पम्पिंग लेम्मा का उपयोग कर सकते हैं यह एक संदर्भ-मुक्त भाषा नहीं है। हालांकि, दूसरी ओर, बैकरेफ़रेन्स वाले रेगेक्स संतुलित कोष्ठक भाषा से मेल खाने के लिए पर्याप्त नहीं लगते हैं, जो कि प्रोटोटाइपिक संदर्भ-मुक्त भाषा है।anbanban

यह कहना आसान है कि एक शब्दार्थिक शब्दार्थ बताने के लिए यह आवश्यक है कि स्ट्रिंग भाषा में रीजेक्स के लिए क्या है, लेकिन एक अच्छा ऑटोमेटा-प्रैक्टिकल लक्षण वर्णन करना अधिक चुनौतीपूर्ण है। यह एक रजिस्टर मशीन की तरह कुछ है, जिसके रजिस्टरों में आप अपने इनपुट के सबस्ट्रिंग को कॉपी कर सकते हैं, और जिसका उपयोग आप अपने वर्तमान स्ट्रिंग के विरुद्ध परीक्षण करने के लिए कर सकते हैं, लेकिन जिसके लिए आपके पास इन रजिस्टरों को संशोधित करने की क्षमता नहीं है।

परिमित मॉडल सिद्धांत करने वाले लोगों के पास फंकी मशीन मॉडल का एक गुच्छा होता है, और यह जानना दिलचस्प होगा कि क्या यह उनके किसी मॉडल से मेल खाता है।


9

इस सवाल का जवाब देने के साथ समस्या एक वास्तविक कार्यान्वयन में "अनबाउंड" की धारणा पर कब्जा कर रही है। उदाहरण के लिए, रेगेक्स /(.*)\1/भाषा पर कब्जा करेगा , जो संदर्भ-मुक्त नहीं है। व्यवहार में इस्तेमाल की जाने वाली स्टैक पर सीमाएं हो सकती हैं (यानी शायद कुछ बड़ी संख्या तुलना में अधिक लंबी नहीं हो सकती ), जो प्रभावी रूप से भाषा को में बदल , जो किसी भी निश्चित लिए फिर से एक नियमित अभिव्यक्ति है।डब्ल्यू कश्मीर एल कश्मीर = { w w | डब्ल्यू Σ * , | w | कश्मीर } कश्मीरL={ww|wΣ}wKLK={ww|wΣ,w∣≤K}K

लेकिन सिद्धांत रूप में, निर्दिष्ट भाषा के रूप में regexps नियमित भाषाओं की तुलना में अधिक शक्तिशाली हैं, क्योंकि यह संबंधित प्रश्न बहुत अधिक विस्तार से चर्चा करता है (साथ ही साथ एक उदासीन उदाहरण भी)।


नहीं होगा {ww | w Would Σ ∣, ∣≤w }K} एक CSL या TM पहचानने योग्य होगा ??
dhruvbird

arggh। ww ^ R करना चाहिए था। ठीक कर देंगे। धन्यवाद
सुरेश वेंकट

दरअसल, मेरा इस बारे में एक सवाल था। क्या डब्ल्यूएल एक सीएसएल है या पहचानने योग्य है? मैं (अभी तक) इसके लिए एक एलबीए के साथ आने में सक्षम नहीं था, इसलिए बस सोच रहा था ...
druvbird

1
{ww:wΣ}

5

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

एक गैर-विशेषज्ञ होने के नाते, जबकि मैं इस बात से सहमत हूं कि सहज ज्ञान युक्त "बैकरेफ़रेन्स के साथ रेगीज़ संतुलित कोष्ठक भाषा से मेल खाने के लिए पर्याप्त नहीं लगते हैं", वहाँ कुछ अजीब चल रहा है। एनपी-पूर्णता का तात्पर्य है कि किसी भी एनपी समस्या को बहुपद के रूप में एक रेग्जिप में कम किया जा सकता है, इसलिए शायद "संतुलित कोष्ठक" भाषा से रेगेक्स के साथ पहचानने योग्य एक बहुपद में कमी हो सकती है। लेकिन फिर से, एक सीएफएल को पार्स करने के लिए कुछ बेतुका regexp हो सकता है, क्योंकि वे गैर-अभाज्य संख्याओं को भी पार्स कर सकते हैं!

संभवतः, सबक यह है कि जटिलता कक्षाएं और भाषा वर्ग सामान्य रूप से तुलनीय नहीं हैं। जो आपके प्रश्न को रीफ़्रेश करने का भी सुझाव देता है, "जटिलता पैमाने" के बजाय चॉम्स्की पदानुक्रम का संदर्भ देने के लिए (भले ही, निष्पक्ष होने के लिए, मैं इससे भ्रमित नहीं था)।

चार्ल्स स्टीवर्ट लिखते हैं:

अहो, 1990, "स्ट्रिंग्स में पैटर्न खोजने के लिए एल्गोरिदम" से पता चलता है कि बैकग्राउंडिंग के साथ नियमित भाषाओं के लिए सदस्यता की समस्या एनपी पूरी है।

Google पुस्तक पर , पृष्ठ 289 पर एक आंशिक पूर्वावलोकन (कम से कम विवरण) पाया जा सकता है , और कागज का एक संदर्भ ग्रंथ यहां पाया जा सकता है । ध्यान दें कि पेपर में, रिवर्ब का मतलब है रेगुलर एक्सप्रेशन विद बैकरीफेरेंस।


3

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

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