স্ট্রিং কাটা উপর গতিশীল প্রোগ্রামিং অনুশীলন


16

আমি এই বইটি থেকে নিম্নলিখিত সমস্যা নিয়ে কাজ করছি ।

একটি নির্দিষ্ট স্ট্রিং-প্রক্রিয়াকরণ ভাষা একটি আদিম ক্রিয়াকলাপ সরবরাহ করে যা একটি স্ট্রিংকে দুটি টুকরো টুকরো করে। যেহেতু এই অপারেশনটিতে মূল স্ট্রিংটি অনুলিপি করা জড়িত তাই কাটা অবস্থান নির্বিশেষে এটি দৈর্ঘ্যের এন স্ট্রিংয়ের জন্য n ইউনিট সময় নেয়। ধরুন, এখন, আপনি অনেকগুলি টুকরো টুকরো করতে চান। ক্রমগুলি যাতে ক্রমগুলি করা হয় তা মোট চলমান সময়কে প্রভাবিত করতে পারে। উদাহরণস্বরূপ, আপনি যদি এবং পজিশনে 20-অক্ষরের স্ট্রিংটি কাটাতে চান তবে পজিশনে প্রথম কাটতে মোট ব্যয় হয় , যখন পজিশন 10 করার সময় আরও ভাল ব্যয় হয় ।10 3 20 + 17 = 37 20 + 10 = 30310320+ +17=3720+ +10=30

আমার একটি ডায়নামিক প্রোগ্রামিং অ্যালগরিদম দরকার যা কাট দেয়, স্ট্রিং কে টুকরো করে নূন্যতম ব্যয় করে ।মি + 1মিমি+ +1

উত্তর:


10

প্রাথমিক ধারণাটি হ'ল: প্রথম পছন্দ হিসাবে সমস্ত কাটা অবস্থানগুলি চেষ্টা করে দেখুন, সংশ্লিষ্ট অংশগুলি পুনরাবৃত্তভাবে সমাধান করুন, ব্যয় যুক্ত করুন এবং সর্বনিম্ন চয়ন করুন।

সূত্রে:

Mino(গুলি,সি)={|গুলি|,|সি|=1|গুলি|+ +সর্বনিম্নসি[Mino(গুলি1,,{'সি|'<}) + + Mino(গুলি+ +1,|গুলি|,{'-সি|'>})], আর

নোট করুন যে এই পুনরাবৃত্তিতে স্মৃতিচারণ প্রয়োগ করা কার্যত একইভাবে তিনটি সাবপ্রব্লেমস সমাধানের ফলে ক্রমাগতভাবে প্রয়োগ করা কোনও কাট জোড়ায় ক্রম পরিবর্তন করে work


1

প্রথমে একটি পুনরাবৃত্ত আলগোরিদিম সন্ধান করা এবং তারপরে এটি একটি টেবিলে পরিণত করা সর্বদা ভাল ধারণা।

  1. (সি,এন)
  2.   যদি (সি = ) 0 ফিরে আসে;
  3.   আর
  4.     opt = অনন্ত;
  5.     প্রতিটি করতেসি
  6.       ডি={সি:<}
  7.       ={-:ডি,>}
  8.       পিটি=মিআমিএন{পিটি,(ডি,)+ +(,এন-)}
  9.     রিটার্ন ;পিটি+ +এন

সুতরাং আপনি জিজ্ঞাসা করতে পারেন: একটি টেবিলের জন্য সি এর খুব বেশি সাবসেট নেই? লক্ষ্য করুন যে কেবলমাত্র 'একটানা' সাবলেট দরকার। এবং তাদের মধ্যে কেবল ((কেন?) অন্য একটি সমস্যা হ'ল: কিছু এন্ট্রি মান পরিবর্তন করবে । আমরা দৈর্ঘ্য নির্দিষ্ট করে না দিয়ে প্রতিটি শুরু এবং শেষ নির্দেশ করে এটি ঘুরে বেড়াতে পারি ।(এন2)


0

এটি একটি মাল্টিসেটে কুইকসোর্টের সাথে খুব মিল; এটি সর্বোত্তম যখন কাটা পয়েন্ট মাঝের নিকটে থাকে এবং তারপরে আমরা পুনরাবৃত্তি করি।

যদি আমি আপনাকে মাল্টিসেট এম = {1,1,1..1,2,2 ... 2, ...., মি, মি.. মি of এর একটি পরিবর্তিত সংস্করণ দিই যেখানে প্রতিটি কাটা পয়েন্টে রান শেষ হয়} , আপনি পিভট হিসাবে মাঝের কাছাকাছি একটি কাটা বাছাই করে এটি সর্বোত্তমভাবে জিজ্ঞাসা করবেন । উপাদানগুলি বাম এবং ডান পার্টিশনে বিভক্ত করার ক্রিয়া n ক্রিয়াকলাপ ঠিক একইভাবে গ্রহণ করে, সুতরাং আপনি কুইকসোর্টের মতো একই আর্গুমেন্টটি ব্যবহার করে দেখতে পারেন যে মধ্যমটি সর্বোত্তম। গুলি

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