দুটি শব্দের মধ্যে সম্পাদনার সংক্ষিপ্ততম সংখ্যা


11

একটি শব্দকে অন্য শব্দে রূপান্তর করতে প্রয়োজনীয় ন্যূনতম সংখ্যার গণনা করার জন্য আমি একটি ডেটা কাঠামো এবং একটি অ্যালগরিদমের সন্ধান করছি, যেখানে কেবলমাত্র অনুমোদিত পরিবর্তনগুলি

  • চূড়াগুলির একটিতে একটি চিঠি যুক্ত করুন (উদাহরণস্বরূপ, এবি -> এবিসি),
  • সম্পূর্ণ শব্দটিকে সদৃশ করুন এবং যুক্ত করুন (উদাহরণস্বরূপ, এবিসি -> এবিসিএবিসি),
  • একটি শব্দ দুটি কেটে নিন (সদৃশ পদক্ষেপের দ্বৈত, এবিসিবিসি -> এবিসি + এবিসি),
  • একটি বর্ণ মুছুন (উদাহরণস্বরূপ, এবিসি -> এসি), এবং
  • বর্ণগুলির একটি পুনরাবৃত্তি করুন (উদাহরণস্বরূপ, এবিসি -> এবিবিসি)।

উদাহরণস্বরূপ, এবিসি থেকে বিসিবিসি-তে সরানোর একটি ন্যূনতম অনুক্রম হ'ল এবিসি -> বিসি (এটিকে মুছুন) -> বিসিবিসি (নকল)।

কম্পিউটার বিজ্ঞানে আমার পটভূমি নেই। সম্ভবত এটি একটি সুপরিচিত সমস্যা, তবে আমার গুগল অনুসন্ধান আমাকে কিছুই দেয়নি।

আপনি কিছু সম্পর্কিত, ভাল সংজ্ঞায়িত সমস্যা জানেন?

সম্পাদনা : অ্যান্টনি ল্যাবারের উত্তরে যেমন পরামর্শ দেওয়া হয়েছিল, আমি পোসেট পারমিটেশন / ব্যবস্থাপনার সমস্যা সম্পর্কে কিছু কাগজপত্র পড়েছি যা উপরে বর্ণিত সমস্যার অনুরূপ। কেউ কি এই সমস্যা সম্পর্কে আরও জানেন? এটি কি প্রাসঙ্গিক?


1
সম্ভবত এ তালিকা থেকে কেউ en.wikipedia.org/wiki/String_metric আবেদন, না এটা হয় sourceforge.net/projects/simmetrics ?
আন্দ্রেস সালামন

আমি তাদের সকলকেই জানি না তবে এই পদ্ধতির বেশিরভাগ লক্ষ্য হ'ল স্ট্রিংগুলি সারিবদ্ধ করা কেবলমাত্র একটি অক্ষর পরিবর্তনের জন্য অনুমোদিত এবং আরও জটিল পদক্ষেপের অনুমতি না দেয়।
cz3rk

1
একটি ডুপ্লিকেশন পুরো স্ট্রিং এবিসি -> এবিসিএবিসিতে প্রয়োগ করুন যাতে দিকটি কোনও ব্যাপার না। তবে পুনরাবৃত্তির দিকনির্দেশ কেবল স্ট্যামারের মতো বাম ডানে ক্রমের মধ্যে থাকতে পারে।
cz3rk

2
যদি ইনপুট শব্দগুলি চিঠিগুলি ভাগ না করে তবে এটি কেন গুরুত্বপূর্ণ? ( @ রিনারপোস্টের ক্রম Aএবং এর Bমধ্যে একটি ফাঁকা স্ট্রিং হওয়া উচিত ))
জেফি

2
www

উত্তর:


3

আমি জানি না এই সঠিক সমস্যাটি অধ্যয়ন করা হয়েছে কিনা, তবে চৌধুরী চৌধুরী এবং অন্যান্য। সম্পর্কিত ট্যান্ডেম ডুপ্লিকেশন-এলোমেলো ক্ষতি সম্পর্কিত সমস্যা অধ্যয়ন করেছে : আপনাকে একটি অনুমতি দেওয়া হয় এবং আপনি (1) যেকোন দৈর্ঘ্যের একটি অংশকে নকল করে মূল অনুলিপিটির পরে অনুলিপিটি সংযোজন করে (2) মুছে ফেলার মাধ্যমে সনাক্তকরণের আদেশে রূপান্তর করতে চান উপাদানগুলি যাতে আপনি স্ট্রিংয়ের পরিবর্তে একটি নতুন ক্রমবর্ধমান পান। নোট করুন যে (1) তারপরে (2) প্রয়োগ করা একটি ক্রিয়াকলাপের জন্য অ্যাকাউন্ট করে।

প্রতিটি অপারেশনকে দেওয়া ওজন অনুসারে বিভিন্ন রূপগুলি সংজ্ঞায়িত করা যায়, যা তাদের কাগজে নকল খণ্ডগুলির প্রস্থের উপর নির্ভর করে। পুরো জিনোম সদৃশ নিয়েও তারা একই ধরণের অধ্যয়ন করে , এটি হ'ল অনুরূপ অনুরূপ যা আপনার অনুমতি দেয়। আমি স্ট্রিংগুলির প্রসঙ্গে এই সমস্যাটির বিষয়ে কাজ সম্পর্কে পড়া মনে করি না তবে আমি আশা করি এটি আপনার অনুসন্ধানগুলির জন্য আপনাকে অন্ততপক্ষে একটি প্রাথমিক পয়েন্ট দিতে পারে।


ধন্যবাদ, আমি তাদের কাজটি একবার দেখব। আমি দুটি সমস্যার মধ্যে সম্পর্ক দেখতে পারি।
cz3rk

2

যেমন নির্দেশিত হয়েছে, এই সমস্যাটি বেশি পরিচিত সাধারণ সম্পাদিত দূরত্ব সমস্যার ( লেভেনস্টাইন দূরত্বের অন্তর্নিহিত ) সমান । উদাহরণস্বরূপ, ডায়নামিক টাইম ওয়ার্পিং দূরত্ব (আপনার শেষ প্রয়োজনে ডুপ্লিকেশন, বা "স্টুটরিং") এরও রয়েছে সাধারণতা ।

গতিশীল প্রোগ্রামিংয়ের দিকে পদক্ষেপ

x=x1xny=y1ymd(x,y)

min{d(x,y1ym1)+1▻ Add letter at endd(x,y2ym)+1▻ Add letter at beginningd(x,y1ym/2)+1if y=y1ym/2y1ym/2▻ Doublingd(x1xn/2,y)+1if x=x1xn/2x1xn/2▻ Halvingd(x1xn,y)+1▻ Deletiond(x1xn1,y1ym1)if yn=ym▻ Ignoring last elt.

এখানে, শেষ বিকল্পটি মূলত বলেছে যে FOOX কে BARX এ রূপান্তর করা FOO কে বারে রূপান্তর করার সমতুল্য। এর অর্থ হ'ল আপনি স্টুটারিং (সদৃশ) প্রভাব অর্জন করতে এবং "এক পর্যায়ে মুছে ফেলা" বিকল্পটি ব্যবহার করতে পারেন। সমস্যা এটি স্বয়ংক্রিয়ভাবে আপনি একটি যোগ করতে দেয় নির্বিচারে স্ট্রিং এর মাঝখানে চরিত্র পাশাপাশি , কিছু আপনি সম্ভবত চাই না। (এই "অভিন্ন শেষ উপাদানগুলিকে উপেক্ষা করা" মুছে ফেলা এবং স্বেচ্ছাসেবী অবস্থানগুলিতে হুড়োহুড়ি অর্জনের আদর্শ উপায় It

যদিও এই কাজটি পুরোপুরি না করে আমি এই ব্রেকডাউনটি অন্তর্ভুক্ত করেছি, যদি অন্য কেউ এটিকে "উদ্ধার" করতে পারে তবে কোনওভাবে because কারণ আমি এটি আমার বৌদ্ধিক সমাধানে, নীচে ব্যবহার করি।

(অবশ্যই, যদি আপনি আসলে এইভাবে আপনার দূরত্বকে সংজ্ঞায়িত করে এমন একটি ব্রেকডাউন পেতে পারেন তবে আপনাকে কেবল স্মৃতি যুক্ত করতে হবে এবং আপনার সমাধান হবে However তবে, আপনি কেবল উপসর্গের সাথে কাজ করছেন না, তাই আমি ডন ' আপনি মনে করতে পারেন না যে আপনি আপনার স্মৃতিচারণের জন্য কেবল সূচকগুলি ব্যবহার করতে পারেন; প্রতিটি কলের জন্য আপনাকে প্রকৃত, সংশোধিত স্ট্রিংগুলি সঞ্চয় করতে পারে যা আপনার স্ট্রিংগুলি যথেষ্ট পরিমাণে আকার ধারণ করলে বিশাল আকার ধারণ করতে পারে))

একটি হিউরিস্টিক সমাধানের দিকে পদক্ষেপ

আরেকটি পদ্ধতির, যা বোঝার পক্ষে সহজ হতে পারে এবং যা কিছুটা কম জায়গা ব্যবহার করতে পারে তা হ'ল আপনার প্রথম স্ট্রিং থেকে আপনার দ্বিতীয়টিতে সংক্ষিপ্ততম "সম্পাদনার পথ" অনুসন্ধান করা, অ্যালগরিদম (মূলত, সেরা- প্রথম শাখা এবং আবদ্ধ)। অনুসন্ধানের স্থানটি আপনার সম্পাদনা ক্রিয়াকলাপ দ্বারা সরাসরি সংজ্ঞায়িত করা হবে। এখন, একটি বড় স্ট্রিং জন্য, আপনি হবেAএকটি বৃহত প্রতিবেশী স্থান পান, যেহেতু আপনি কোনও অক্ষর মুছতে পারেন (প্রতিটি সম্ভাব্য মুছে ফেলার জন্য আপনাকে প্রতিবেশী দেওয়া), বা কোনও চরিত্রের সদৃশ (আবার আপনাকে প্রতিবেশীর একটি রৈখিক সংখ্যক প্রদান), পাশাপাশি উভয় প্রান্তে যে কোনও অক্ষর যুক্ত করা উচিত বর্ণমালার আকারের দ্বিগুণ সমান আপনাকে প্রতিবেশী সংখ্যা দেবে। (কেবলমাত্র আশা করি আপনি পুরো ইউনিকোড ব্যবহার করছেন না ;-) এত বড় ফ্যানআউটের সাহায্যে আপনি একটি দ্বিদলীয় বা কোনও আত্মীয়A ব্যবহার করে যথেষ্ট গতি অর্জন করতে পারেন ।

কাজ করার জন্য , আপনার লক্ষ্যমাত্রার অবশিষ্ট দূরত্বের জন্য আপনার একটি নিম্ন সীমাটি প্রয়োজন। আমি এখানে একটি সুস্পষ্ট পছন্দ আছে কিনা তা নিশ্চিত নই, তবে আপনি যা করতে পারলেন তা হল আমি উপরে যে পুনরাবৃত্তীয় পচন ধরে তার উপর ভিত্তি করে একটি গতিশীল প্রোগ্রামিং সলিউশন বাস্তবায়ন করবো (যদি আপনার স্ট্রিং খুব দীর্ঘ হয় তবে সম্ভাব্য স্থান সংক্রান্ত সমস্যাগুলি নিয়ে)) যদিও সেই ক্ষয়টি আপনার দূরত্বকে হুবহু গণনা করে না, তবুও এটি নীচে আবদ্ধ হওয়ার নিশ্চয়তা দেওয়া হয় (কারণ এটি আরও অনুমোদিত), যার অর্থ এটি হিউরিস্টিক হিসাবে কাজ করবে । (এটি কতটা কড়া হবে, আমি জানি না তবে এটি সঠিক হবে)) অবশ্যই আপনার আবদ্ধ ফাংশনের স্মৃতি আপনার সময়সীমাটির সমস্ত গণনা জুড়ে ভাগ করা যেতে পারে courseAAAচালানো। (সেখানে একটি সময় / স্থান-বাণিজ্য।)

তাই ...

আমার প্রস্তাবিত সমাধানটির কার্যকারিতাটি (1) আপনার স্ট্রিংয়ের দৈর্ঘ্য এবং (2) আপনার বর্ণমালার আকারের জন্য কিছুটা বিশিষ্ট হবে। উভয়ই বিশাল না হলে এটি কার্যকর হতে পারে। এটাই:

  • আমার পুনরাবৃত্তাকার পচন এবং গতিশীল প্রোগ্রামিং (উদাহরণস্বরূপ, একটি মেমোজাইজড, रिकर्सিভ ফাংশন ব্যবহার করে) আপনার দূরত্বের নীচের সীমানাটি কার্যকর করুন।
  • বাস্তবায়ন (অথবা দ্বিমুখী "প্যাচসমূহ" অবস্থায়-স্পেস, এবং গতিশীল প্রোগ্রামিং ভিত্তিক নিম্ন মুখী হিসাবে আপনার অপারেশন সম্পাদন করা সহ)।AA

এটি কতটা দক্ষ হবে তার জন্য আমি সত্যিই কোনও গ্যারান্টি দিতে পারি না, তবে এটি সঠিক হওয়া উচিত , এবং এটি সম্ভবত একটি নিষ্ঠুর শক্তি সমাধানের চেয়ে অনেক ভাল।

আর কিছু না হলে, আমি আশা করি এটি আপনাকে আরও তদন্তের জন্য কিছু ধারণা দেয়।


0

কিছু সম্পর্কিত, ভাল সংজ্ঞায়িত সমস্যা হবে সিক্যুয়েন্স অ্যালাইনমেন্টের সমস্যা । এটি ভিন্ন কারণ এটি সদৃশকরণের ক্রিয়াকলাপ ব্যবহার করে না। সংজ্ঞায়িত ক্রিয়াকলাপগুলি হ'ল: চরিত্রের সন্নিবেশ, চরিত্রের মোছা, চরিত্রের রূপান্তর। এই সমস্যা সমাধানের জন্য জনপ্রিয় আলগোরিদিম Needleman-Wunsch


আমি এটি জানি কিন্তু আমি সত্যই সংজ্ঞায়িত পদক্ষেপের একটি সেট নিয়ে কাজ করতে চাই। আমি এটি করতে পেলাম যে একমাত্র উপায়, এটি হ'ল ব্রুট-ফোর্স রিকার্সিভ অ্যালগরিদম। খুব সুন্দর নয় এবং শব্দের আকার বাড়লে তিনি গণনার নিবিড় হয়ে উঠতে পারেন।
cz3rk

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.