ডায়নামিক প্রোগ্রামিং আপনাকে অ্যালগোরিদম ডিজাইন সম্পর্কে চিন্তা করার একটি উপায় দেয়। এটি প্রায়শই খুব সহায়ক হয়।
স্মৃতিচারণ এবং নীচের অংশগুলি পুনরাবৃত্তি সম্পর্কগুলিকে কোডে পরিণত করার জন্য আপনাকে একটি বিধি / পদ্ধতি দেয়। স্মৃতিচারণ একটি তুলনামূলক সহজ ধারণা, তবে সেরা ধারণাটি প্রায়শই হয়!
ডায়নামিক প্রোগ্রামিং আপনাকে আপনার অ্যালগোরিদমের চলমান সময় সম্পর্কে চিন্তা করার একটি কাঠামোগত উপায় দেয়। চলমান সময়টি মূলত দুটি সংখ্যার দ্বারা নির্ধারিত হয়: আপনাকে সমাধান করতে হবে এমন সাব-সমস্যাগুলির সংখ্যা এবং প্রতিটি উপ-সমস্যা সমাধান করতে যে সময় লাগে তা takes এটি অ্যালগোরিদম ডিজাইন সমস্যা সম্পর্কে ভাবার জন্য একটি সুবিধাজনক সহজ উপায় সরবরাহ করে। আপনার যখন প্রার্থীর পুনরাবৃত্তির সম্পর্ক রয়েছে, আপনি এটি দেখতে পারবেন এবং চলমান সময়টি কী হতে পারে তা খুব দ্রুত উপলব্ধি করতে পারবেন (উদাহরণস্বরূপ, আপনি প্রায়শই খুব তাড়াতাড়ি বলতে পারবেন যে সেখানে কতগুলি সাব-প্রবলেমস থাকবে যা নীচের দিকে আবদ্ধ থাকে) চলমান সময়; যদি আপনার খুব দ্রুত সমস্যা সমাধান করতে হয়, তবে পুনরাবৃত্তি সম্ভবত ভাল পদ্ধতির হবে না)। এটি আপনাকে প্রার্থী সাব-প্রবলেম পচে যাওয়া থেকে বিরত করতে সহায়তা করে। উদাহরণস্বরূপ, যদি আমাদের কাছে স্ট্রিং , একটি উপ-সমস্যা সংজ্ঞা দিয়ে একটি উপসর্গ এস [ 1 .. i ] বা প্রত্যয় এস [ জে । । n ] বা এস স্ট্রিং এস [ i । । j ] যুক্তিসঙ্গত হতে পারে (সাব-প্রব্লেমগুলির সংখ্যা এন-এ বহুবর্ষীয়), তবে এস এর সাবকোয়েন্সেস দ্বারা একটি সাব-প্রব্লেম সংজ্ঞা দেওয়াভাল পন্থা হওয়ার সম্ভাবনা নেই (সাব-প্রব্লেমগুলির সংখ্যা এন-তে ক্ষতিকারক)। এটি আপনাকে সম্ভাব্য পুনরাবৃত্তির "অনুসন্ধানের স্থান" ছাঁটাই করতে দেয়।S[1..n]S[1..i]S[j..n]S[i..j]nSn
ডায়নামিক প্রোগ্রামিং আপনাকে প্রার্থীদের পুনরাবৃত্ত সম্পর্কের সন্ধানের জন্য একটি কাঠামোগত পদ্ধতির দেয়। বৌদ্ধিকভাবে, এই পদ্ধতির প্রায়শই কার্যকর। বিশেষত, ইনপুটটির ধরণের উপর নির্ভর করে সাব-প্রবলেমগুলি সংজ্ঞায়নের সাধারণ উপায়গুলির জন্য আপনি স্বীকৃতি দিতে পারেন এমন কিছু হিউরিস্টিক্স / সাধারণ প্যাটার্ন রয়েছে। এই ক্ষেত্রে:
ইনপুট একটি হলে ধনাত্মক পূর্ণসংখ্যা , এক প্রার্থী উপায় subproblem সংজ্ঞায়িত করতে প্রতিস্থাপন হয় এন একটি ছোট পূর্ণসংখ্যা সঙ্গে এন ' (St 0 ≤ এন ' ≤ এন )।nnn′0≤n′≤n
যদি ইনপুটটি স্ট্রিং সাব-প্রব্লেম সংজ্ঞায়িত করার কয়েকটি প্রার্থীর মধ্যে অন্তর্ভুক্ত রয়েছে: এস [ 1 .. n ] কে একটি উপসর্গ এস [ 1 .. i ] দিয়ে প্রতিস্থাপন করুন ; S [ 1 .. n ] কে একটি প্রত্যয় S [ j ] দিয়ে প্রতিস্থাপন করুন । । n ] ; এস [ 1 .. n ] কে একটি স্ট্রিং এস এর সাথে প্রতিস্থাপন করুন [ i । । জে ]S[1..n]S[1..n]S[1..i]S[1..n]S[j..n]S[1..n]S[i..j]। (এখানে সাব-প্রব্লেম এর পছন্দ অনুসারে নির্ধারিত হয় )i,j
যদি ইনপুটটি কোনও তালিকা থাকে তবে স্ট্রিংয়ের জন্য আপনি যেমনটি করেন তেমনই করুন।
ইনপুট একটি হয়, তাহলে গাছ , এক প্রার্থী উপায় subproblem সংজ্ঞায়িত করতে প্রতিস্থাপন করতে হয় টি কোন subtree সঙ্গে টি (অর্থাত, একটি নোড বাছাই এক্স এবং প্রতিস্থাপন টি সাবট্রি এ রুট দিয়ে এক্স ; subproblem পছন্দমত দ্বারা নির্ধারিত হয় এক্স )।TTTxTxx
যদি ইনপুটটি একটি জোড় , তবে প্রতিটিটির জন্য সাব-প্রব্লেম চয়ন করার কোনও উপায় সনাক্ত করতে এক্সের ধরণ এবং y এর ধরণটি বারবার দেখুন। অন্য কথায়, প্রার্থী উপায় subproblem সংজ্ঞায়িত করতে প্রতিস্থাপন করতে হয় ( এক্স , Y ) দ্বারা ( এক্স ' , Y ' ) যেখানে এক্স ' এর জন্য একটি subproblem হয় এক্স এবং ওয়াই ' একটি subproblem হয় Y । (আপনি ফর্মের সাব-সমস্যাগুলিও বিবেচনা করতে পারেন ( x , y)(x,y)xy(x,y)(x′,y′)x′xy′y বা ( x ′ , y ) )(x,y′)(x′,y)
ইত্যাদি। এটি আপনাকে একটি খুব দরকারী .শ্বর্যবাদী দেয়: কেবল পদ্ধতির স্বাক্ষরটি দেখে আপনি সাব-প্রবলেমগুলি সংজ্ঞায়িত করার জন্য প্রার্থীদের উপায়গুলির একটি তালিকা নিয়ে আসতে পারেন। অন্য কথায়, শুধু সমস্যা বিবৃতি দিকে তাকিয়ে - শুধুমাত্র দিকে তাকিয়ে ধরনের ইনপুট - আপনি প্রার্থী টি উপায় subproblem সংজ্ঞায়িত করতে একটি থাবা দিয়ে আসতে পারেন।
এটি প্রায়শই খুব সহায়ক হয়। এটি পুনরাবৃত্তি সম্পর্ক কী তা আপনাকে জানায় না, তবে সাব-প্রব্লেম কীভাবে সংজ্ঞায়িত করা যায় তার জন্য আপনার যখন একটি নির্দিষ্ট পছন্দ থাকে, প্রায়শই এটির সাথে সম্পর্কিত পুনরাবৃত্তির সম্পর্কটি কার্যকর করা খুব কঠিন নয়। সুতরাং, এটি প্রায়শই একটি গতিশীল প্রোগ্রামিং অ্যালগরিদমের নকশাকে কাঠামোগত অভিজ্ঞতায় রূপান্তরিত করে। আপনি স্ক্র্যাপ পেপারে সাবপ্রব্লেমগুলি সংজ্ঞায়িত করার জন্য প্রার্থীদের উপায়গুলির একটি তালিকা লিখেছেন (উপরে বর্ণিত হিউরিস্টিক ব্যবহার করে)। তারপরে, প্রতিটি প্রার্থীর জন্য, আপনি একটি পুনরাবৃত্তি সম্পর্কটি লিখে দেওয়ার চেষ্টা করবেন এবং সাব-প্রব্লেমগুলির সংখ্যা এবং সাবপ্রব্লেম প্রতি ব্যয় করা সময় গণনা করে চলমান সময়টি মূল্যায়ন করুন। প্রতিটি প্রার্থী চেষ্টা করার পরে, আপনি যে সন্ধান করতে পেরেছিলেন তার মধ্যে সেরাটিকে রাখুন। অ্যালগরিদম নকশা প্রক্রিয়াতে কিছু কাঠামো সরবরাহ করা একটি বড় সহায়তা, অন্যথায় অ্যালগরিদম নকশা ভয়ঙ্কর হতে পারে (সেখানে '