टीएल; डीआर: थोड़े अधिक प्रतिबंधात्मक प्रकार की संपादित दूरी, जिसमें हम केवल व्यक्तिगत वर्णों को सम्मिलित कर सकते हैं और हटा सकते हैं, रेखीय काल में गणना की जा सकती है जब दोनों (या सिर्फ एक) तार के अद्वितीय वर्ण होते हैं। यह लेवेंसहाइट एडिट दूरी पर उपयोगी ऊपरी और निचले सीमा देता है।
संपादित करें दूरी, और सबसे लंबे समय तक आम आवेषण डालें / हटाएं
Levenshtein संपादित दूरी एकल-वर्ण सम्मिलन, विलोपन और प्रतिस्थापन की अनुमति देती है, प्रत्येक की लागत 1. असाइन करना। यदि हम सिर्फ सम्मिलन और विलोपन तक सीमित रखते हैं, तो हमें एक समान दूरी मापनी होती है जो अब प्रतिस्थापन के कारण 2 की लागत होती है (क्योंकि कोई प्रतिस्थापन हो सकता है) एक सम्मिलन और एक विलोपन का उपयोग करके नकल किया जा सकता है)। मुझे इस अधिक प्रतिबंधात्मक प्रकार की संपादित दूरी के लिए एक मानक नाम नहीं पता है, इसलिए मैं इसे "संपादित दूरी हटाएं / हटाऊंगा" कहूंगा। यह सबसे लंबी सामान्य परवर्ती (LCS) समस्या से निकटता से मेल खाता है , जिसमें हमें क्रमशः दो , लंबाई और , दिए गए हैं और दोनों में दिखाई देने वाली सबसे लंबी लंबाई की लंबाई जानना चाहते हैं। यदि दो तारों में एलसीएसmnL, तब उन्होंने संपादित दूरी को सम्मिलित / हटा दिया हैn+m−2L : यह देखने का सबसे आसान तरीका स्ट्रिंग्स को संरेखित करना है ताकि LCS में वर्ण एक दूसरे के ऊपर ढेर दिखाई दें, जबकि LCS में वर्ण एक -
अंतराल के विपरीत नहीं दिखाई देते हैं चरित्र। तब यह स्पष्ट होगा कि हम -
शीर्ष पंक्ति में कहीं भी एक सम्मिलन बनाकर पहले स्ट्रिंग को दूसरे में संपादित कर सकते हैं , और जहां भी -
नीचे पंक्ति में एक विलोपन है । उदाहरण के लिए:
-C-IRC-LE
T-RI-CKLE
यहाँ LCS CIRCLE
और TRICKLE
, ICLE
की लंबाई 4 है, और संपादित दूरी वास्तव में ।6+7−2∗4=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)r≤ndiff
diff
O(nd)d सम्मिलित दूरी को सम्मिलित / हटाएं, क्योंकि यह बेहतर है जब समग्र अंतर छोटे होते हैं, लेकिन कुछ "वर्ण" (पाठ लाइनें) बार-बार दिखाई देते हैं (जैसे कि सी प्रोग्राम कोड में सिर्फ एक उद्घाटन ब्रेस युक्त पंक्ति)।
हंट, जे।; Szymanski, T. (1977), "सबसे लंबे समय तक सामान्य गणना करने के लिए एक तेज़ एल्गोरिथम", ACM के संचार, 20 (5): 350–353, doi: 10.1145 / 359581.359603