যেমন নির্দেশিত হয়েছে, এই সমস্যাটি বেশি পরিচিত সাধারণ সম্পাদিত দূরত্ব সমস্যার ( লেভেনস্টাইন দূরত্বের অন্তর্নিহিত ) সমান । উদাহরণস্বরূপ, ডায়নামিক টাইম ওয়ার্পিং দূরত্ব (আপনার শেষ প্রয়োজনে ডুপ্লিকেশন, বা "স্টুটরিং") এরও রয়েছে সাধারণতা ।
গতিশীল প্রোগ্রামিংয়ের দিকে পদক্ষেপ
x=x1…xny=y1…ymd(x,y)
min⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪d(x,y1…ym−1)+1d(x,y2…ym)+1d(x,y1…ym/2)+1d(x1…xn/2,y)+1d(x1…xn,y)+1d(x1…xn−1,y1…ym−1)if y=y1…ym/2y1…ym/2if x=x1…xn/2x1…xn/2if yn=ym▻ Add letter at end▻ Add letter at beginning▻ Doubling▻ Halving▻ Deletion▻ Ignoring last elt.
এখানে, শেষ বিকল্পটি মূলত বলেছে যে FOOX কে BARX এ রূপান্তর করা FOO কে বারে রূপান্তর করার সমতুল্য। এর অর্থ হ'ল আপনি স্টুটারিং (সদৃশ) প্রভাব অর্জন করতে এবং "এক পর্যায়ে মুছে ফেলা" বিকল্পটি ব্যবহার করতে পারেন। সমস্যা এটি স্বয়ংক্রিয়ভাবে আপনি একটি যোগ করতে দেয় নির্বিচারে স্ট্রিং এর মাঝখানে চরিত্র পাশাপাশি , কিছু আপনি সম্ভবত চাই না। (এই "অভিন্ন শেষ উপাদানগুলিকে উপেক্ষা করা" মুছে ফেলা এবং স্বেচ্ছাসেবী অবস্থানগুলিতে হুড়োহুড়ি অর্জনের আদর্শ উপায় It
যদিও এই কাজটি পুরোপুরি না করে আমি এই ব্রেকডাউনটি অন্তর্ভুক্ত করেছি, যদি অন্য কেউ এটিকে "উদ্ধার" করতে পারে তবে কোনওভাবে because কারণ আমি এটি আমার বৌদ্ধিক সমাধানে, নীচে ব্যবহার করি।
(অবশ্যই, যদি আপনি আসলে এইভাবে আপনার দূরত্বকে সংজ্ঞায়িত করে এমন একটি ব্রেকডাউন পেতে পারেন তবে আপনাকে কেবল স্মৃতি যুক্ত করতে হবে এবং আপনার সমাধান হবে However তবে, আপনি কেবল উপসর্গের সাথে কাজ করছেন না, তাই আমি ডন ' আপনি মনে করতে পারেন না যে আপনি আপনার স্মৃতিচারণের জন্য কেবল সূচকগুলি ব্যবহার করতে পারেন; প্রতিটি কলের জন্য আপনাকে প্রকৃত, সংশোধিত স্ট্রিংগুলি সঞ্চয় করতে পারে যা আপনার স্ট্রিংগুলি যথেষ্ট পরিমাণে আকার ধারণ করলে বিশাল আকার ধারণ করতে পারে))
একটি হিউরিস্টিক সমাধানের দিকে পদক্ষেপ
আরেকটি পদ্ধতির, যা বোঝার পক্ষে সহজ হতে পারে এবং যা কিছুটা কম জায়গা ব্যবহার করতে পারে তা হ'ল আপনার প্রথম স্ট্রিং থেকে আপনার দ্বিতীয়টিতে সংক্ষিপ্ততম "সম্পাদনার পথ" অনুসন্ধান করা, অ্যালগরিদম (মূলত, সেরা- প্রথম শাখা এবং আবদ্ধ)। অনুসন্ধানের স্থানটি আপনার সম্পাদনা ক্রিয়াকলাপ দ্বারা সরাসরি সংজ্ঞায়িত করা হবে। এখন, একটি বড় স্ট্রিং জন্য, আপনি হবেA∗একটি বৃহত প্রতিবেশী স্থান পান, যেহেতু আপনি কোনও অক্ষর মুছতে পারেন (প্রতিটি সম্ভাব্য মুছে ফেলার জন্য আপনাকে প্রতিবেশী দেওয়া), বা কোনও চরিত্রের সদৃশ (আবার আপনাকে প্রতিবেশীর একটি রৈখিক সংখ্যক প্রদান), পাশাপাশি উভয় প্রান্তে যে কোনও অক্ষর যুক্ত করা উচিত বর্ণমালার আকারের দ্বিগুণ সমান আপনাকে প্রতিবেশী সংখ্যা দেবে। (কেবলমাত্র আশা করি আপনি পুরো ইউনিকোড ব্যবহার করছেন না ;-) এত বড় ফ্যানআউটের সাহায্যে আপনি একটি দ্বিদলীয় বা কোনও আত্মীয়A∗ ব্যবহার করে যথেষ্ট গতি অর্জন করতে পারেন ।
কাজ করার জন্য , আপনার লক্ষ্যমাত্রার অবশিষ্ট দূরত্বের জন্য আপনার একটি নিম্ন সীমাটি প্রয়োজন। আমি এখানে একটি সুস্পষ্ট পছন্দ আছে কিনা তা নিশ্চিত নই, তবে আপনি যা করতে পারলেন তা হল আমি উপরে যে পুনরাবৃত্তীয় পচন ধরে তার উপর ভিত্তি করে একটি গতিশীল প্রোগ্রামিং সলিউশন বাস্তবায়ন করবো (যদি আপনার স্ট্রিং খুব দীর্ঘ হয় তবে সম্ভাব্য স্থান সংক্রান্ত সমস্যাগুলি নিয়ে)) যদিও সেই ক্ষয়টি আপনার দূরত্বকে হুবহু গণনা করে না, তবুও এটি নীচে আবদ্ধ হওয়ার নিশ্চয়তা দেওয়া হয় (কারণ এটি আরও অনুমোদিত), যার অর্থ এটি হিউরিস্টিক হিসাবে কাজ করবে । (এটি কতটা কড়া হবে, আমি জানি না তবে এটি সঠিক হবে)) অবশ্যই আপনার আবদ্ধ ফাংশনের স্মৃতি আপনার সময়সীমাটির সমস্ত গণনা জুড়ে ভাগ করা যেতে পারে courseA∗A∗A∗চালানো। (সেখানে একটি সময় / স্থান-বাণিজ্য।)
তাই ...
আমার প্রস্তাবিত সমাধানটির কার্যকারিতাটি (1) আপনার স্ট্রিংয়ের দৈর্ঘ্য এবং (2) আপনার বর্ণমালার আকারের জন্য কিছুটা বিশিষ্ট হবে। উভয়ই বিশাল না হলে এটি কার্যকর হতে পারে। এটাই:
- আমার পুনরাবৃত্তাকার পচন এবং গতিশীল প্রোগ্রামিং (উদাহরণস্বরূপ, একটি মেমোজাইজড, रिकर्सিভ ফাংশন ব্যবহার করে) আপনার দূরত্বের নীচের সীমানাটি কার্যকর করুন।
- বাস্তবায়ন (অথবা দ্বিমুখী "প্যাচসমূহ" অবস্থায়-স্পেস, এবং গতিশীল প্রোগ্রামিং ভিত্তিক নিম্ন মুখী হিসাবে আপনার অপারেশন সম্পাদন করা সহ)।A∗A∗
এটি কতটা দক্ষ হবে তার জন্য আমি সত্যিই কোনও গ্যারান্টি দিতে পারি না, তবে এটি সঠিক হওয়া উচিত , এবং এটি সম্ভবত একটি নিষ্ঠুর শক্তি সমাধানের চেয়ে অনেক ভাল।
আর কিছু না হলে, আমি আশা করি এটি আপনাকে আরও তদন্তের জন্য কিছু ধারণা দেয়।