ডায়নামিক প্রোগ্রামিংয়ের উপযোগী হিসাবে আপনি কীভাবে কোনও সমস্যা চিহ্নিত করেন?


19

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

আমি বেশিরভাগ প্রাথমিক ডিপি সমস্যা এবং এমআইটি সংস্থান ইত্যাদির মধ্য দিয়ে চলেছি gone

উত্তর:


17

আমি একটি পদার্থবিজ্ঞানের পটভূমি থেকে এসেছি এবং এইভাবে প্রচুর গণিত। ইন্ডাকশন দ্বারা প্রুফের সাথে মিলগুলির সন্ধান করে আমি পুনরাবৃত্ত / গতিশীল প্রোগ্রামিং সমাধানগুলির জন্য উপযুক্ত সমস্যাগুলিকে স্পষ্ট করে দেখতে পাই ।

প্রবেশন দ্বারা প্রমাণ হিসাবে আপনার দুটি অংশ রয়েছে:

  • আপনি প্রমাণ করেছেন যে কিছু যদি পুনরাবৃত্তি N এর জন্য সত্য হয় তবে এটি পুনরাবৃত্তি N + 1 এর ক্ষেত্রেও সত্য
  • আপনি প্রমাণ করেছেন যে এটি পুনরাবৃত্তি 1 এর ক্ষেত্রে সত্য

পুনরাবৃত্ত প্রোগ্রামিং / গতিশীল প্রোগ্রামিংয়ে:

  • আপনি একটি প্রস্থান শর্ত চিহ্নিত করুন (উদাহরণস্বরূপ, আপনি পুনরাবৃত্তি 1 এর সমাধানটির জন্য শক্ত ওয়্যারটি করেছেন)
  • আপনি পুনরাবৃত্তি এন -1 এর সমাধান প্রদত্ত পুনরাবৃত্তি এন এর সমাধান গণনা করুন

সুতরাং, অন্যরা যেমন উত্তর দিয়েছে, এটি অভিজ্ঞতা এবং ইঙ্গিতগুলি বাছাইয়ের বিষয়, তবে আপনি গাইড করতে অন্য দক্ষতা পুনরায় ব্যবহার করতে পারেন। এর পরে, আপনার দুটি পৃষ্ঠাগুলি সর্বদা থাকা দরকার যা আমি উল্লেখ করেছি: যদি আপনি তা না করেন তবে এটি কার্যকর হবে না।

উদাহরণস্বরূপ, একটি সেট সমস্ত অনুমতি উত্পন্ন করতে:

  • প্রস্থান শর্ত: আপনার যদি কেবল একটি উপাদান থাকে তবে তা ফিরিয়ে দিন
  • পুনরাবৃত্তি: এন আইটেমগুলির একটি সেটের ক্রম হ'ল প্রতিটি উপাদান বেছে নিয়ে এবং উপাদানটি সরিয়ে আপনি যে উপসেটটি পেয়ে থাকেন তার সমস্ত এন -1 সেট (বহু) ক্রমশনের সাথে একত্রিত করে আপনি পেয়ে থাকেন সেগুলি নির্ধারণ করে।

8

সর্বাধিক গতিশীল প্রোগ্রামিং সমস্যা স্মৃতিচারণের মাধ্যমে সমাধান করা যেতে পারে। মেমোয়েজেশন সাধারণত উভয় স্বজ্ঞাত এবং কোড করা সহজ। আপনি ডিপির পরিবর্তে স্মৃতিচারণের শর্তাবলী বিবেচনা করতে সহায়ক হতে পারেন।

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

টি এল; ডিআর; সংস্করণ: স্মৃতিচারণের ক্ষেত্রে আপনি গতিশীল প্রোগ্রামিং বোঝার পক্ষে আরও সহজ পেতে পারেন।

স্ট্যাকওভারফ্লোটিও দেখুন : ডায়নামিক প্রোগ্রামিং এবং মেমোয়েজেশন: ডাউন-আপ বনাম টপ-ডাউন পন্থাগুলি


4

ডায়নামিক প্রোগ্রামিং সংজ্ঞা অনুসারে দুটি জিনিস:

  1. সর্বোত্তম কাঠামো
    বড় সমাধানগুলি ছোট সমাধানগুলি থেকে প্রাপ্ত হতে পারে; সমাধান দ্বিপাক্ষিক নয়।

  2. ওভারল্যাপিং সাব-
    সমস্যাগুলি ছোট সমাধানগুলি বহুবার পুনরায় ব্যবহৃত হবে। সাব-সমস্যাগুলি যদি একেবারে ওভারল্যাপ না হয় তবে আপনি ডিপি / স্মৃতিচারণ থেকে কোনও উপকার পাবেন না; আপনার যা আছে তা বিভক্ত এবং পরিবর্তে বিজয়ী

ডিপি সমস্যা সম্পর্কে সাধারণ পদ্ধতি হ'ল:

  • কাজ করে এমন একটি নির্লজ্জ পুনরাবৃত্ত বা পুনরাবৃত্ত সংস্করণ লিখুন।

  • লক্ষ্য করুন যে ফাংশনটি অপ্রয়োজনীয় কাজ করছে।

  • প্রায়শ স্মরণে করে সেই অপ্রয়োজনীয় কাজটি এড়াতে একটি উপায় সন্ধান করুন।


এগুলি সবই একটি তাত্ত্বিক স্ট্যান্ড পয়েন্ট থেকে সত্য। দ্রুত সনাক্তকরণের জন্য আইএমও আরও বেশি অনুশীলন করা প্রয়োজন :)
ব্যবহারকারী 110036

2

আমি কখনই একটি একক ডায়নামিক প্রোগ্রামিং সলভার প্রয়োগ করিনি - আমার ব্যাকগ্রাউন্ডটি গণিত / পদার্থবিজ্ঞান / সংখ্যাসূচক কম্পিউটিং প্রয়োগ করা হয়, সিএস নয় - কয়েক বছর আগে যখন আমি প্রকল্প ইউলারের সমস্যাগুলি শুরু করেছিলাম until সেখানে ডিপি-সলভযোগ্য সমস্যা (যেমন, 76 , 158 , 161 , 242, তবে আরও অনেকগুলি রয়েছে) আমার প্রিয় ধরনের হয়ে উঠেছে। এটি কার্যকর কৌশল হয়ে উঠলে আপনি স্পষ্টতই আরও ভাল হয়ে উঠবেন: মূলত এমন জিনিসগুলির সন্ধান করুন যা দেখে মনে হয় যে এগুলি কোনও ধরণের পুনরাবৃত্ত, বিভাজন এবং বিজয়ী পদ্ধতির মাধ্যমে সমাধান করা যেতে পারে যেখানে প্রয়োজনীয় পথগুলির বিস্ফোরণকে নিয়ন্ত্রণ করতেও এটি সম্ভব where পুনরাবৃত্তি হওয়া সাব-প্রবলেমগুলি সনাক্ত করে এবং পূর্ববর্তী গণিত ফলাফলগুলি পুনরায় ব্যবহার করে অন্বেষণ করা হবে; ন্যূনতম রাষ্ট্র ভেক্টরকে স্মরণে রাখতে চিহ্নিত করতে সক্ষম হওয়া - এবং কী অপ্রাসঙ্গিক "ইতিহাস" মুছে ফেলা যায় - এটি গুরুত্বপূর্ণ পদক্ষেপ।

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