আনুমানিক স্ট্রিং অনুসন্ধান শুরুর পয়েন্ট হ'ল লেভেনস্টাইন দূরত্ব । এই অ্যালগরিদম একক শব্দকে অন্য শব্দে পরিবর্তন করতে একক অক্ষর সম্পাদনার (সন্নিবেশ, মুছুন, এবং প্রতিস্থাপন) সংখ্যা গণনা করে।
এর উদাহরণ হ'ল kitten
-> sitting
যার সম্পাদনার দূরত্ব তিনটি
- k itten -> s itten ('কে' এর বিকল্প 's')
- সিট ই এন -> সিট আই এন ('ই' এর বিকল্প 'আমি')
- সিটিন -> সিটিন জি (শেষে 'জি' যুক্ত করুন)
এই অ্যালগরিদমের বিভিন্নতা রয়েছে, উল্লেখযোগ্যভাবে ডামেরাউ-লেভেনস্টাইন দূরত্ব যা দুটি সংলগ্ন অক্ষরের ('hte' থেকে '' এর DL দূরত্ব 1 এবং একটি লেভেনস্টেইনের দূরত্ব 2 এর স্থানান্তর করতে দেয়) এর জন্য প্রায়শই উপযুক্ত হয় বানান যাচাই করা. অন্যান্য ব্যবধানগুলি অ্যাপ্লিকেশনগুলির জন্য উপস্থিত রয়েছে যেখানে ফাঁকগুলি গুরুত্বপূর্ণ (ডিএনএ স্ট্রিং)।
লেভেনস্টাইন দূরত্বটি সুপরিচিত এবং এটি খুঁজে পাওয়া খুব কঠিন নয় (আমি একবার ওরাকলটিতে একটি ফাংশন হিসাবে এটির বাস্তবায়ন সন্ধান করার কারণ ছিলাম - এটি সমস্ত ডেটা টানতে এবং তারপরে কোয়েরি কোডের পাশ চালানোর চেয়ে অনেক দ্রুত ছিল)। Rosettacode এর implemntations একটি বৃন্দ (54) আছে Levenshtein দূরত্ব (- আপনি জাভা, এ বর্ণন করছেন নোট কিছু কিছু ভাষায় স্ট্রিং গ্রন্থাগার কোথাও অংশ হিসাবে এই আছে Apache কমন্স ল্যাঙ )। উইকিবুকগুলিতে ৩১ টি বাস্তবায়ন রয়েছে এবং দু'একটিতেই এক নজরে একই ভাষার জন্য একই কোড দেখায় না।
এটি যেভাবে কাজ করে তা এটি একটি ম্যাট্রিক্স তৈরি করে যা দুটি স্ট্রিংয়ের মধ্যকার সম্পর্কের সাথে মিলে যায়:
.kitten
.0123456
s1123456
i2212345
t3321234
t4432123
i5543223
n6654332
g7765443
.
সারি ও কলাম করার ব্যপারে আপনি দ্বারা 'শুধু' একটি খালি স্ট্রিং থেকে প্রতিটি অক্ষর ঢোকাতে লক্ষ্য স্ট্রিং পেতে পারেন। এটি আদর্শ ক্ষেত্রে নয়, তবে এটি অ্যালগরিদম বীজ করার জন্য রয়েছে।
মানটি যদি সেই জায়গার একই হয় ('আমি' == 'আমি'), মানটি বাম পর্যন্ত তির্যক মানের সমান। দুটি স্পট যদি পৃথক ('s'! = 'কে') হয় তবে মানটি সর্বনিম্ন:
- তির্যক উপর এবং বামে + 1 (একটি বিকল্প)
- সরাসরি উপরে + 1 (একটি সন্নিবেশ)
- সরাসরি বাম +1 (একটি মুছে ফেলা)
সম্পাদনা দূরত্বের ফেরতের মানটি ম্যাট্রিক্সের নীচের ডানদিকে মান।
আপনি যদি সর্বনিম্নের সাথে নীচের ডান থেকে উপরের বাম দিকে অনুসরণ করেন তবে আপনি সম্পাদনাগুলি দেখতে পাবেন:
.kitten
.0. .
s.1 .
i 1 .
t 1 .
t 1.
i.....2
n 2
g......3
মনে রাখবেন যে এটি বরং মেমরি নিবিড় পদ্ধতির। পূর্ণ ম্যাট্রিক্স তৈরি না করে এটিকে মেমোরি স্কোপ হ্রাস করা যায় - সমস্ত অ্যালগরিদম যত্নশীল ডেটা একটি উপসেট এবং এটি কেবল পূর্ববর্তী সারিটি সংরক্ষণ করে স্থান থেকে N*M
স্থান পর্যন্ত হ্রাস করা যেতে পারে 2*max(N,M)
(এবং বর্তমানের উপর কী গণনা করা হয়েছে) সারি)। কোড প্রকল্প দেখায় এটি কীভাবে করা যায় (ডাউনলোড করার জন্য সি # কোড সহ)।