संभावित दमेराऊ-लेवेंसाइटिन सुधार?


9

मैंने हाल ही में विकिपीडिया पर स्यूडोकोड से दमरेउ-लेवेंसाइट दूरी एल्गोरिथ्म को लागू किया है। मैं यह वास्तव में कैसे काम करता है का कोई स्पष्टीकरण नहीं नहीं पा सके और स्यूडोकोड की तरह पूरी तरह से uninformative चर नाम का उपयोग करता है DA, DB, i1, और j1कि छोड़ दिया मुझे मेरे सिर खरोंच।

यहाँ पायथन में मेरा कार्यान्वयन है: https://gist.github.com/badocelot/5327337

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

अधिक लंबा होने के जोखिम पर, यहाँ मैं दमरेउ-लेवन्सहाइटिन को कैसे समझता हूँ:

रहस्य चर:

  • DA( last_rowमेरे कोड में) अंतिम पंक्ति को पकड़े हुए एक प्रकार का नक्शा है, जिस पर प्रत्येक तत्व को देखा गया था; मेरे कोड में यह एक वास्तविक पायथन शब्दकोश है
  • DB( last_match_col) अंतिम पंक्ति रखता है जहां पत्र वर्तमान पंक्ति के लिए पत्र से bमेल खाता हैa
  • i1( last_matching_row) DAवर्तमान अक्षर के लिए से पंक्ति संख्या हैb
  • j1संभावित रूप से अपडेट होने से पहले DB/ के मूल्य की एक प्रति है last_match_col; मेरे कोड में मैं अभी स्थानांतरित किया गया जहां last_match_colअद्यतन किया गया है और इस चर को समाप्त कर दिया है

ट्रांसपोजिशन लागत:

H[i1][j1] + (i-i1-1) + 1 + (j-j1-1)

bअंतिम चरित्र के साथ वर्तमान चरित्र को स्वैप करने की लागत की गणना (अंतिम मैच) के रूप में bज्ञात करने के लिए की जाती है a, या तो सभी वर्णों को जोड़ने या हटाने के बीच में।

लागत के घटक:

  • H[i1][j1] ट्रांसपोज़ेशन से पहले की गणना में बेस कॉस्ट को वापस ले लेता है, क्योंकि ट्रांसपोज़िशन ढूंढने से पिछला काम अमान्य हो जाता है
  • (i-i1-1) वर्तमान पंक्ति और अंतिम पंक्ति के बीच की दूरी वर्तमान चरित्र से मेल खाती है, जो कि आवश्यक विलोपन की संख्या है
  • (j-j1-1) वर्तमान कॉलम और मैच के साथ अंतिम कॉलम के बीच की दूरी है, जो कि परिवर्धन की संख्या है
  • अतिरिक्त + 1केवल ट्रांसपोज़िशन की लागत है

यदि यह विश्लेषण गलत है, तो मुझे यह जानकर अच्छा लगेगा कि मैं कहां गलत हो गया हूं। जैसा कि मैंने कहा, मैं कोई विस्तृत विवरण नहीं पा सका कि एल्गोरिथ्म ऑनलाइन कैसे काम करता है।

संशोधित संस्करण?

यह पता लगाने के बाद कि, इसने मुझ पर प्रहार किया कि ट्रांसपोज़्ड अक्षरों के बीच जोड़ और विलोपन दोनों की लागत की गणना करने में त्रुटिपूर्ण लग रहा था: एक जोड़ और एक विलोपन एक प्रतिस्थापन के बराबर है, जो इसके लिए जाँच नहीं कर रहा है।

यदि यह सब सही है, तो समाधान तुच्छ होना चाहिए: ट्रांसपोज्ड अक्षरों के बीच के अक्षरों की लागत अतिरिक्त और विलोपन से अधिक होनी चाहिए : जितना संभव हो उतने प्रतिस्थापन में रूपांतरित करें और किसी भी अतिरिक्त या विलोपन में जोड़ें।

तो लागत होगी:

H[i1][j1] + max((i-i1-1), (j-j1-1)) + 1

इस संस्करण के लिए मेरा कोड यहाँ है: https://gist.github.com/badocelot/5327427

कुछ सरल परीक्षणों से, यह सही लगता है। उदाहरण के लिए, "abcdef" -> "abcfad" 2 की एक संपादित दूरी देता है ("d" और "f" को स्थानांतरित करें, "e" को "a" में बदलें), जबकि मूल एल्गोरिथ्म 3 की दूरी (या तो तीन) देता है अक्षर प्रतिस्थापन हैं, या 1 स्थानान्तरण + 1 जोड़ + 1 विलोपन)।

अब, मैं ऐसा सोचने वाला पहला व्यक्ति नहीं हो सकता। तो, मैंने इसे क्यों नहीं चलाया? क्या मैंने अभी लंबे समय तक खोज नहीं की? या क्या कोई सूक्ष्म दोष है जो वास्तव में काम करने से रोकता है?


मैंने डीएल के बारे में विस्तार से बताते हुए एक ब्लॉग पोस्ट लिखने का फैसला किया: scarcitycomputing.blogspot.com/2013/04/…
जेम्स जेन्सेन

जवाबों:


3

मुझे विकिपीडिया पर दमेरु-लेवेंसाइट की दूरी को देखना था, इसलिए यदि यह गलत है तो मुझे क्षमा करें। लेकिन ऐसा लगता है कि यह केवल आसन्न पत्रों को स्थानांतरित करने की अनुमति देता है और किसी भी मनमाने तरीके से नहीं। तो आपका उदाहरण "abcdef" -> d और f के हस्तांतरण के साथ "abcfad" काम नहीं करता है। ऐसा लगता है कि आपने एल्गोरिथ्म की परिभाषा को संशोधित कर दिया है और अब दमेराऊ-लेवेंसाइटिन दूरी की गणना नहीं कर रहे हैं।


हम्म, मैं देख रहा हूं कि आपका क्या मतलब है। डीएल परिवर्धन के लिए या तो परिवर्धन से पहले या विलोपन के बाद अनुमति देता है। यदि दोनों हुए हैं, तो यह वास्तव में एक आसन्न ट्रांसपोज़न नहीं है, इसलिए लागत आसमान छूती है और ट्रांसपोज़िशन लागत को नई लागत के रूप में नहीं चुना जाएगा। ऐसा लग रहा था कि यह दोनों को संभाल रहा है क्योंकि यह लागत-कम करने के साइड-इफेक्ट के माध्यम से उन्हें बचाता है।
जेम्स जेनसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.