ডাইনামিক প্রোগ্রামিং কীভাবে ব্রুট ফোর্সের চেয়ে আলাদা


19

আমি নীচের উদ্ধৃতিটি যখন এসেছিলাম তখন আমি ডায়নামিক প্রোগ্রামিং পড়ছিলাম

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

নিম্নলিখিত উদাহরণ দেওয়া হয়েছিল

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

ব্রুট ফোর্স সেরা সমাধানের সিদ্ধান্ত নেওয়ার আগে প্রতিটি সম্ভাব্য সমাধানের চেষ্টা করছে।

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

আমি কি এটা বলতে পারি যে ডায়নামিক প্রোগ্রামিং ব্রুট ফোর্স পদ্ধতির একটি উপসেট ??


1
ট্র্যাফিকের পরিস্থিতি একটি লাল রঙের হারিং। আপনি যে কোনও অ্যালগরিদমে এগুলি বিবেচনা করতে পারেন।
যুবাল ফিল্মাস


আপনার প্রথম উদ্ধৃতি গতিশীল প্রোগ্রামিং সংজ্ঞা দেয় না।
পুনরায় পোস্টার

@ রিনিয়ারপোস্ট ভাল, এটি সেখানে যাওয়ার চেষ্টা করে intelligent, brute forceতবে "বুদ্ধিমান" অংশটি বর্ণনা করতে ভুলে যায়
ইজকাটা

@ ইজকাটা সেই যুক্তি অনুসারে, প্রতিটি অ্যালগরিদম হ'ল বুদ্ধিমান ব্রুট ফোর্স "(যা যাইহোক, একটি অক্সিমোরন)।
রাফেল

উত্তর:


17

একটি গতিশীল প্রোগ্রামিং অ্যালগরিদম সমস্যা সমাধানের সমস্ত সম্ভাব্য উপায় পরীক্ষা করে এবং সেরা সমাধানটি বেছে নেবে।

এই বিবৃতি ঠিক সাধারণ ভুল।

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

মূল সমস্যাটির জন্য এটি সর্বোত্তম সমাধান দেয় এটি তুচ্ছ নয় এবং বাস্তবে কেবল কিছু সমস্যার জন্য রয়েছে। যাহারা সর্বোত্তমতার বেলম্যান নীতিটি পূরণ করে (সর্বাধিক মৎস্যপূর্ণ, ভুল বোঝাবুঝির "সংজ্ঞা" যা নিয়মিতভাবে উদ্ধৃত হয়)। সে সম্পর্কে আরও কিছু ধারণার জন্য এখানে দেখুন ।

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


"এই বিবৃতিটি কেবল সাধারণ ভুল" - এটি ঠিক করুন
nmclean

4
@nmclean উইকিপিডিয়ায় অ্যালগরিদম সম্পর্কিত নিবন্ধ সম্পাদনা করার আমার অভিজ্ঞতাটি আনন্দদায়ক চেয়ে কম ছিল, তাই না। আমি বরং আমার সময় এখানে বিনিয়োগ করতে চাই।
রাফেল

আমি আমার ভাগ্য চেষ্টা করে নিবন্ধটি সম্পাদনা করেছি। আশা করি এটি এখন কিছুটা কম ভুল।
সি

9

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


9
এটি স্মৃতিচারণ , যা ডিপি নিযুক্ত অনেক কৌশলগুলির মধ্যে একটি।
বেন ভয়েগট

4
স্মৃতিচারণ সহ ব্রুট ফোর্স এখনও অদক্ষ; কেবলমাত্র ডিপি পুনরাবৃত্তির দ্বারা সরবরাহিত অতিরিক্ত কাঠামো / ছাঁটাই স্মৃতিচারণ বন্ধ করে দেয়।
রাফেল

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

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

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

3

উইকিপিডিয়া নিবন্ধটি যে পার্থক্যটি তৈরি করতে চাইছে তা হ'ল তিন প্রকারের অ্যালগরিদমের মধ্যে:

  1. অনুকূলটি চয়ন করে যা সমস্ত সম্ভাব্য সমাধান ছাড়াই অ্যালগরিদম।

  2. অ্যালগরিদমগুলি যা সমস্ত সম্ভাব্য সমাধানগুলির একটি উপসেট অতিক্রম করে, তা বেছে নেওয়া হয়েছে যাতে সর্বোত্তম সমাধানটি উপসেটের অন্তর্ভুক্ত।

  3. সর্বোত্তম সমাধান সাবসেটের অন্তর্গত যে গ্যারান্টি ছাড়াই সমস্ত সম্ভাব্য সমাধানের একটি উপসেট অতিক্রম করে এমন অ্যালগরিদম।

প্রথম দুটি ধরণের অ্যালগরিদম অনুকূল সমাধান উত্পাদন করে, তৃতীয় প্রকারটি অনুকূল সমাধানের পরিবর্তে "ভাল" সমাধান উত্পাদন করে। আমার মতে, প্রথম দুটি ধরণের পার্থক্য এতটা পরিষ্কার কাট নয়।

সংক্ষিপ্ততম পথের প্রসঙ্গে (আপনি যে উদাহরণটি দিয়েছেন) প্রসঙ্গে তিনটি ধরণের অ্যালগরিদমের সহজ উদাহরণ দিয়ে আমাকে শুরু করতে দিন।

  1. সমস্ত সম্ভাব্য পাথ চেষ্টা করুন। এটি ব্রুট ফোর্স হিসাবে পরিচিত ।

  2. এখন পর্যন্ত ন্যূনতম সমাধানের ট্র্যাক রেখে সমস্ত সম্ভাব্য পাথ চেষ্টা করুন। আপনি যে বর্তমান পাথটি নির্মাণ করছেন তা এখন পর্যন্ত ন্যূনতম সমাধানের চেয়ে ব্যয়বহুল, এটিকে ত্যাগ করুন এবং অন্য একটি চয়ন করুন (আমরা ধারণা করি যে দূরত্বটি একটি বিভাগ-বাই-বিভাগের ভিত্তিতে গণনা করা হয়েছে)। একে ছাঁটাই বলা হয় ।

  3. মানচিত্রটি দেখুন, কয়েকটি পথ বিবেচনা করুন এবং তাদের মধ্যে সেরাটি বেছে নিন। এটি কম্পিউটারের চেয়ে মানুষের জন্য একটি অ্যালগরিদম।

এই উদাহরণগুলি বরং অপরিশোধিত, এবং সম্ভবত খুব সঠিক ছবি আঁকবে না। ছাঁটাই অনেক পরিস্থিতিতে গুরুত্বপূর্ণ, উদাহরণস্বরূপ কম্পিউটার দাবাতে। আপনি যদি কৌতূহলী হন তবে * অ্যালগরিদমটি দেখুন , যা আসলে সবচেয়ে ছোট পথের জন্য ব্যবহৃত হয়।

ডায়নামিক প্রোগ্রামিং উল্লেখযোগ্যভাবে ব্রুট ফোর্স অ্যালগরিদমকে গতি বাড়ানোর জন্য একটি কৌশল। এটি কিছুটা বিভ্রান্তিকর, তবে এটি এইভাবে চিন্তা করা। অপটিমাইজেশন সমস্যা সমাধানের জন্য এটি একটি অ্যালগরিদমিক কৌশল। আপনি ডায়নামিক প্রোগ্রামিংয়ের প্রসঙ্গে ছাঁটাই বাস্তবায়ন করতে পারেন।

টিটিটি+ +1টি


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

0

ডাইনামিক প্রোগ্রামিং ব্রুট ফোর্সের চেয়ে অনেক দ্রুত। ব্রুট ফোর্সটি তাত্পর্যপূর্ণ সময় নিতে পারে, যখন ডায়নামিক প্রোগ্রামিং সাধারণত দ্রুত হয়।

ব্রুট ফোর্সের সাথে উপমাটি একটি খুব আলগা। ডায়নামিক প্রোগ্রামিং কোনও ম্যাজিক সিলভার বুলেট নয় যা আপনাকে যে কোনও ব্রুট ফোর্স অ্যালগোরিদম চায় এবং এটি দক্ষ করে তোলে।


5
এটি একটি পরিণতি, ব্যাখ্যা নয়।
রাফেল

-2

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


"যদি অনুসন্ধানের জায়গার কোনও সমাধান না হয়, ডায়নামিক প্রোগ্রামিং (সাধারণত) অনুসন্ধান স্থানের প্রতিটি উপাদান দিয়ে একটি অনুসন্ধান করবে" " - ভুল, আমার উত্তর দেখুন।
রাফেল

-2

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


1
"আপনি প্রতিটি ছোট টুকরো সমাধান করতে নিষ্ঠুর শক্তি ব্যবহার করবেন" - ভুল। আপনি সাধারণত একই পদ্ধতি পুনরাবৃত্তভাবে ব্যবহার করবেন।
ফ্রাঙ্কডব্লিউ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.