अद्वितीय तत्वों के साथ सूची की दूरी संपादित करें


12

सूची के बीच Levenshtein- दूरी संपादित दूरी एक अच्छी तरह से अध्ययन की समस्या है। लेकिन मैं संभावित सुधारों के बारे में बहुत कुछ नहीं जान सकता अगर यह ज्ञात हो कि कोई भी तत्व प्रत्येक सूची में एक से अधिक बार नहीं होता है

आइए यह भी मान लें कि तत्व तुलनीय / छांटने योग्य हैं (लेकिन तुलना करने के लिए सूचियों को शुरू करने के लिए हल नहीं किया गया है)।

विशेष रूप से मुझे दिलचस्पी है अगर तत्वों की अद्वितीयता को संपादित दूरी के लिए उकोकोन के एल्गोरिथ्म में सुधार करना संभव होता है जिसमें समय जटिलता और अंतरिक्ष जटिलता हे (\ मिनट (एस, मी, एन) है रों) , जहां रों है संपादन चरणों में से कम से कम लागतO(min(m,n)s)O(min(s,m,n)s)s

अधिक औपचारिक रूप से,

कितनी कुशलता से हम दो दिए गए तार के बीच की दूरी संपादित कर सकते हैं s,tΣ इस वादे के साथ कि उनके पास कोई दोहराया पत्र नहीं है?

Σ एक बहुत बड़ी वर्णमाला है।


अब तुम्हारा क्या सवाल है; जोड़ीदार दूरी को कैसे तेज करें, या तार की सूची की सभी जोड़ीदार दूरी की गणना कैसे करें?
राफेल

2
मुझे संदेह है कि सवाल यह है: , जहां बीच की दूरी की गणना कैसे करें कुछ बहुत बड़े वर्णमाला पर तार हैं , और हम गारंटी देते हैं कि कोई भी अक्षर दो बार या में प्रकट नहीं होता है में (ओ पी एक यानी तत्वों की सूची पत्र की सूची,, के रूप में प्रत्येक स्ट्रिंग का प्रतिनिधित्व करता है)। लेकिन इसके लिए पुष्टि की जरूरत है। s,ts,tΣΣst
DW

हां, इस मामले में बड़ी वर्णमाला डेटाबेस इंडेक्स से बनी होती है और "स्ट्रिंग्स", एस और टी, इन इंडेक्स वाली सूची होती है।
user362178

जटिलताओं के बारे में सोचने वालों के लिए: और इनपुट स्ट्रिंग्स की लंबाई हैं और वास्तविक संपादन दूरी है, इसलिए यह जटिलता में शामिल है। प्रत्येक संपादित की लागत 1 माना जाता है, लेकिन शायद इस दूरी (के संपादन संख्या की गणना के लिए अप्रासंगिक है है )। mnss
अल्बर्ट हेंड्रिक्स

जवाबों:


3

टीएल; डीआर: थोड़े अधिक प्रतिबंधात्मक प्रकार की संपादित दूरी, जिसमें हम केवल व्यक्तिगत वर्णों को सम्मिलित कर सकते हैं और हटा सकते हैं, रेखीय काल में गणना की जा सकती है जब दोनों (या सिर्फ एक) तार के अद्वितीय वर्ण होते हैं। यह लेवेंसहाइट एडिट दूरी पर उपयोगी ऊपरी और निचले सीमा देता है।

संपादित करें दूरी, और सबसे लंबे समय तक आम आवेषण डालें / हटाएं

Levenshtein संपादित दूरी एकल-वर्ण सम्मिलन, विलोपन और प्रतिस्थापन की अनुमति देती है, प्रत्येक की लागत 1. असाइन करना। यदि हम सिर्फ सम्मिलन और विलोपन तक सीमित रखते हैं, तो हमें एक समान दूरी मापनी होती है जो अब प्रतिस्थापन के कारण 2 की लागत होती है (क्योंकि कोई प्रतिस्थापन हो सकता है) एक सम्मिलन और एक विलोपन का उपयोग करके नकल किया जा सकता है)। मुझे इस अधिक प्रतिबंधात्मक प्रकार की संपादित दूरी के लिए एक मानक नाम नहीं पता है, इसलिए मैं इसे "संपादित दूरी हटाएं / हटाऊंगा" कहूंगा। यह सबसे लंबी सामान्य परवर्ती (LCS) समस्या से निकटता से मेल खाता है , जिसमें हमें क्रमशः दो , लंबाई और , दिए गए हैं और दोनों में दिखाई देने वाली सबसे लंबी लंबाई की लंबाई जानना चाहते हैं। यदि दो तारों में एलसीएसmnL, तब उन्होंने संपादित दूरी को सम्मिलित / हटा दिया हैn+m2L : यह देखने का सबसे आसान तरीका स्ट्रिंग्स को संरेखित करना है ताकि LCS में वर्ण एक दूसरे के ऊपर ढेर दिखाई दें, जबकि LCS में वर्ण एक -अंतराल के विपरीत नहीं दिखाई देते हैं चरित्र। तब यह स्पष्ट होगा कि हम -शीर्ष पंक्ति में कहीं भी एक सम्मिलन बनाकर पहले स्ट्रिंग को दूसरे में संपादित कर सकते हैं , और जहां भी -नीचे पंक्ति में एक विलोपन है । उदाहरण के लिए:

-C-IRC-LE
T-RI-CKLE

यहाँ LCS CIRCLEऔर TRICKLE, ICLEकी लंबाई 4 है, और संपादित दूरी वास्तव में ।6+724=5

सबसे लंबे समय तक बढ़ रहा है

इस चक्कर का कारण यह है कि LCS की गणना करने के लिए एक बहुत ही कुशल तरीका है (और इस प्रकार सम्मिलित / हटाएं संपादित दूरी) जब कम से कम एक अनुक्रम में केवल भिन्न वर्ण होते हैं: इस स्थिति में, LCS समस्या को रूपांतरित किया जा सकता है सबसे लंबे समय तक बढ़ते रहने की समस्या का समाधान , जो समय में हल किया जा सकता है । मान लीजिए कि हमें और दो तार दिए गए हैं , और स्ट्रिंग के अलग-अलग वर्ण हैं। हम से 1 में पहले वर्ण का नाम बदल सकते हैं , दूसरे का 2 और इसी तरह, एक तालिका में प्रत्येक वर्ण को किस संख्या को निर्दिष्ट करते हैं, इस पर नज़र रखते हैं। फिरO(nlogn)ABAAB, हम इस तालिका का उपयोग करके इसके पात्रों का नाम बदल देते हैं (अर्थात, जो कुछ भी पहले वर्ण में था, प्रत्येक घटना Aको 1 में बदल दिया जाता है, आदि)। अंत में, हम सबसे लंबे समय तक बढ़ते हुए परिणाम की तलाश करते हैं B। यह एक LCS के बीच Aऔर B, के बीच मेल खाता है और वहाँ से हम तुरंत सम्मिलित / डिलीट एडिट दूरी की गणना कर सकते हैं। यदि और की लंबाई क्रमशः और , तो कुल समय की आवश्यकता सिर्फ है।O(n+mlogm)ABnm

Levenshtein पर सीमा दूरी को संपादित करती है

इन्सर्ट / डिलीट डिस्टेंस लेवेन्सहाइट डिस्टेंस पर एक ऊपरी बाउंड प्रदान करता है (क्योंकि इन्सर्ट / डिलीट डिस्टेंस के तहत एडिट ऑपरेशंस का कोई वैलिड सीक्वेंस भी लेवेंसहाइट एडिट ऑपरेशंस का वैलिड सीक्वेंस है)। इन्सर्ट / डिलीट एडिट डिस्टेंस को 2 से विभाजित करने से भी कम बाउंड मिलता है, क्योंकि सबसे खराब स्थिति में किसी भी लेवेन्शिन एडिट ऑपरेशन को 2 इंसर्ट / डिलीट एडिट ऑपरेशन में बदला जा सकता है।

सामान्यीकरण

पहले से ही 1977 में, हंट और सिजमेन्स्की एक एल्गोरिथ्म के साथ आया था जिसे सबसे लंबे समय तक बढ़ने वाले एल्गोरिथ्म के सामान्यीकरण के रूप में देखा जा सकता है। जब भी दो तारों के बीच मिलान वर्ण पदों की संख्याओं की संख्या कम होती है, तो यह कुशल है। देखते हैं अगर ऐसे जोड़े, उनके एल्गोरिथ्म लेता समय। (ध्यान दें कि यदि एक स्ट्रिंग में सभी वर्ण अलग-अलग हैं।) यह एल्गोरिथ्म मूल कार्यक्रम का आधार था , जिसने पाठ की पूरी पंक्तियों को व्यक्तिगत वर्ण माना। बाद में मायर्स -टाइम एल्गोरिथ्म का उपयोग करने के लिए स्विच किया गया , जहांrO((r+n)logn)rndiffdiffO(nd)d सम्मिलित दूरी को सम्मिलित / हटाएं, क्योंकि यह बेहतर है जब समग्र अंतर छोटे होते हैं, लेकिन कुछ "वर्ण" (पाठ लाइनें) बार-बार दिखाई देते हैं (जैसे कि सी प्रोग्राम कोड में सिर्फ एक उद्घाटन ब्रेस युक्त पंक्ति)।

हंट, जे।; Szymanski, T. (1977), "सबसे लंबे समय तक सामान्य गणना करने के लिए एक तेज़ एल्गोरिथम", ACM के संचार, 20 (5): 350–353, doi: 10.1145 / 359581.359603

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