ডায়নামিক প্রোগ্রামিংয়ের সাব-সমস্যাগুলির বিষয়ে সিদ্ধান্ত নেওয়া


39

আমি ডায়নামিক প্রোগ্রামিংয়ের কৌশলটি একাধিকবার ব্যবহার করেছি তবে আজ একজন বন্ধু আমাকে জিজ্ঞাসা করেছিল যে আমি কীভাবে আমার সাব-সমস্যাগুলি সংজ্ঞায়িত করতে যাচ্ছি, আমি বুঝতে পেরেছিলাম যে আমার কাছে উদ্দেশ্যমূলক আনুষ্ঠানিক উত্তর দেওয়ার কোনও উপায় নেই। আপনি গতিশীল প্রোগ্রামিং ব্যবহার করে যে সমস্যার সমাধান করবেন তা আনুষ্ঠানিকভাবে একটি উপ-সমস্যাটিকে কীভাবে সংজ্ঞায়িত করবেন?


দেখে মনে হচ্ছে বিদ্যমান বিদ্যমান উত্তরগুলির মধ্যে (এপ্রিল, 2019 পর্যন্ত) যথেষ্ট ভাল নয়, বিশেষত নবজাতকদের জন্য। আমি অন্যান্য সাইটে টিউটোরিয়াল সুপারিশ করব।
অ্যাপাস জ্যাক

উত্তর:


35

ডায়নামিক প্রোগ্রামিংয়ের মূলনীতিটি হ'ল টপ-ডাউন (অর্থাত্ পুনরাবৃত্তভাবে) তবে নীচের অংশে সমাধান করা। সুতরাং একটি ডিপি ডিজাইনের জন্য একটি ভাল কৌশল হ'ল সমস্যাটি পুনরাবৃত্তভাবে তৈরি করা এবং উপ-সমস্যাগুলি সেভাবে উত্পন্ন করা।


14
আমি দাবি করি এটিই একমাত্র কৌশল।
জেফই

2
@ জেফ্ হ্যাঁ, আমার অ্যালগরিদম ক্লাসগুলি পড়ানোর সময় আমি আপনার নোটগুলি পড়েছিলাম এবং ব্যবহার করেছি এবং এটি কার্যকর ছিল। উক্তি: "ডায়নামিক টেবিলগুলি পূরণ করার মতো নয় It's এটি স্মার্ট পুনরাবৃত্তি সম্পর্কে!"
দাই

2
ডিপিগুলিকে কীভাবে শেখাতে হবে সে সম্পর্কে আমার বোঝাটি জেফির নোটগুলি দ্বারা খুব বেশি প্রভাবিত :)
সুরেশ

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

1
সর্বশেষে তবে অন্তত নয়, এর বিশাল পারফরম্যান্স সুবিধা থাকতে পারে। উদাহরণস্বরূপ, theতিহ্যবাহী নীচে সাবসেটের যোগফল অ্যালগোরিদম অযাচিত টেবিল এন্ট্রি টন টন গণনা করতে পারে। এই পদ্ধতির সাহায্যে কেবল প্রয়োজনীয় টেবিল এন্ট্রি গণনা করা হবে।
জুলাই

4

@ সুরেশ উল্লেখ করেছেন যে, একবার আপনি যদি জানেন যে আপনার সমস্যাটি ডিপি দ্বারা সমাধান করা যায় (যেমন এটি সর্বোত্তম কাঠামো এবং ওভারল্যাপিং সাব-প্রব্লেমগুলি প্রদর্শন করে), আপনি একটি বিভাজন এবং পুনরাবৃত্তি সমাধানকে জয় করতে পারেন।

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

অতএব, একটি বিভাজন এবং বিজয়ী সমাধান সম্পর্কে চিন্তাভাবনা আপনাকে একটি বিশেষ সমস্যা কী হতে পারে সে সম্পর্কে অন্তর্দৃষ্টি সরবরাহ করবে।


1
"সর্বোত্তম কাঠামো" (যার অর্থ যাই হোক না কেন) সম্ভবত ডিপি-সলভ্যাবিলিটির জন্য পর্যাপ্ত শর্ত নয়। "ওভারল্যাপিং সাব-প্রব্লেমস" অবশ্যই প্রয়োজনীয় নয়।
রাফেল

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

1
এটি আমার গঠন নয়: আপনি এটিকে Cormen, Leiserson, Rivest and Stein র দ্বারা "অ্যালগরিদমের পরিচিতি" এবং অ্যালগরিদমের অন্যান্য অনেক পাঠ্যপুস্তকে খুঁজে পাবেন।
ম্যাসিমো ক্যাফারো

1
জুপ, এবং বেশিরভাগ অন্তত আংশিক ভুল। আপনি যদি কোনও উপযুক্ত প্রশ্ন পোস্ট করেন তবে আমি বিস্তৃত খুশি।
রাফেল

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

2

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

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