সম্ভাব্য ডামেরাউ-লেভেনস্টেইনের উন্নতি?


9

আমি সম্প্রতি উইকিপিডিয়ায় সিউডোকোড থেকে ডামেরাউ-লেভেনস্টেইন দূরত্বের অ্যালগরিদমটি প্রয়োগ করেছি। আমি এটা ঠিক কিভাবে কাজ করে কোনো ব্যাখ্যা খুঁজে পাইনি এবং pseudocode হয় মত সম্পূর্ণরূপে 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বর্তমান বর্ণের সারি নম্বর numberb
  • j1সম্ভাব্য আপডেট হওয়ার আগে DB/ এর মানটির কেবল একটি অনুলিপি last_match_col; আমার কোডে আমি সরিয়ে নিয়েছি যেখানে last_match_colআপডেট হয় এবং এই ভেরিয়েবলটি মুছে ফেলা হয়

স্থানান্তরের ব্যয়:

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

(শেষ ম্যাচ) হিসাবে পরিচিত bসর্বশেষ চরিত্রের সাথে বর্তমান চরিত্রটি অদলবদলের ব্যয় গণনা করছে , সমস্ত অক্ষরকে উভয়ই সংযোজন বা মুছে ফেলা হিসাবে বিবেচনা করবে।ba

ব্যয়ের উপাদানগুলি:

  • 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 মুছে ফেলা)।

এখন, আমি এই প্রথম চিন্তা করতে পারে এমন ব্যক্তি হতে পারি না । তো, কেন আমি এটিকে পেরেছি না? আমি কি যথেষ্ট দীর্ঘ অনুসন্ধান করিনি? বা এমন কিছু সূক্ষ্ম ত্রুটি আছে যা এটিকে আসলে কাজ করা থেকে বিরত করে?


আমি ডিএলকে বিস্তারিতভাবে ব্যাখ্যা করে একটি ব্লগ পোস্ট লেখার সিদ্ধান্ত নিয়েছি: scareitycomputing.blogspot.com/2013/04/…
জেমস জেনসেন

উত্তর:


3

আমাকে উইকিপিডিয়ায় দামেরু-লেভেনস্টেইনের দূরত্বটি দেখতে হয়েছিল, তাই যদি ভুল হয় তবে আমাকে ক্ষমা করুন। তবে দেখে মনে হচ্ছে এটি কেবল সংলগ্ন অক্ষরগুলি স্থানান্তর করতে অনুমতি দেয় এবং কোনও স্বেচ্ছাসেবক পত্র নয়। সুতরাং আপনার উদাহরণ "abcdef" -> d এবং f এর ট্রান্সপোজ সহ "abcfad" কাজ করে না। আমার কাছে মনে হচ্ছে আপনি অ্যালগরিদমের সংজ্ঞাটি সংশোধন করেছেন এবং ডামেরাউ-লেভেনস্টেইন দূরত্ব গণনা করছেন না।


হুম, আমি কি বলতে চাইছি তা দেখছি। ডিএল সংযোজনের আগে বা মুছে ফেলার পরে স্থানান্তরের জন্য অনুমতি দেয়। যদি উভয়ই ঘটে থাকে তবে এটি সত্যই কোনও সংলগ্ন স্থানান্তর নয়, সুতরাং ব্যয়ের আকাশছোঁয়া এবং স্থানান্তরের ব্যয়টিকে নতুন ব্যয় হিসাবে বেছে নেওয়া হবে না। দেখে মনে হচ্ছিল এটি উভয়ই পরিচালনা করছে কারণ এটি ব্যয়-হ্রাসকে সাইড-এফেক্টের মাধ্যমে এড়িয়ে চলে।
জেমস জেনসেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.