ন্যাপস্যাক সমস্যার বৈকল্পিক


11

যদি আপনি এখন একটি ধ্রুবক দ্বারা ন্যাপস্যাকের আইটেমের সংখ্যা সীমাবদ্ধ করতে চান তবে আপনি কীভাবে ডায়নামিক প্রোগ্রামিং পরিস্থিতিতে ন্যাপস্যাক সমস্যার সাথে যোগাযোগ করবেন ? এটি একই সমস্যা ( সর্বোচ্চ ওজন , প্রতিটি আইটেমের একটি মান এবং ওজন ) তবে আপনি কেবল ন্যাপস্যাকটিতে আইটেম যুক্ত করতে পারেন এবং অবশ্যই ন্যাপস্যাকের মানটি অপ্টিমাইজ করতে হবে।ডব্লিউ ভি W পিpWvwp

আমাদের কি তৃতীয় মাত্রা দরকার বা আমরা এটি ছাড়া অন্য কোনও পদ্ধতির সন্ধান করতে পারি। আমি সেলটিতে ন্যাপস্যাকের মধ্যে কেবল আইটেমের সংখ্যা যুক্ত করার চেষ্টা করেছি এবং আইটেমের সংখ্যার সাথে শেষে সর্বোচ্চ মানটি নেওয়ার চেষ্টা করেছি <= কিন্তু এটি সেরা সমাধান নয়।p


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

উত্তর:


9

খুব সুন্দর প্রশ্ন!

আপনি দু'বার ঠিক বলেছেন:

  1. ন্যাপস্যাকে আইটেমের সংখ্যা প্রচার করা অনুকূল সমাধানগুলিতে নেতৃত্ব দেয় না।
  2. একটি সমাধান তৃতীয় মাত্রা যুক্ত করে। এটি বরং সহজ তবে এটি করার সময় কিছু তথ্য বিবেচনায় নেওয়া দরকার। তবে খেয়াল করুন যে এটি একমাত্র বিকল্প নয়

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

আসুন প্রথমে টিপিকাল কেসটিতে ফোকাস করি: আইটেমের সংখ্যা সীমিত নয় । এই ক্ষেত্রে, আপনি কেবল একটি টেবিল যেখানে the অনুকূল মান থাকে যখন ন্যাপস্যাকের সামগ্রিক ক্ষমতা এবং কেবল প্রথম আইটেম বিবেচনা করা হয়। এখান থেকে:টি আই , জে আই জেTTi,jij

Ti,j=max{Ti,j1,Tiwj,j1+vj}

যেখানে এবং যথাক্রমে -th আইটেমের ওজন এবং মানের জন্য দাঁড়ায় । যদি আপনার ঝোলা সামগ্রিক ধারণক্ষমতা এবং সেখানে মোট হয় আইটেম সন্তোষজনক সমাধান দেওয়া হয় । এই অ্যালগরিদম সিউডো-পলিনোমিয়াল সময়ে চালিত হিসাবে পরিচিত এবং এর সুন্দরীদের একটি হ'ল এটি কেবলমাত্র সেই সংমিশ্রণগুলিকেই বিবেচনা করে যা সর্বোচ্চ ক্ষমতা অনুসারে মাপসই হয়।বনাম সি এন টি সি , এনwjvjjCNTC,N

তবে আপনার সীমাবদ্ধতা যোগ করার সময় এটি যথেষ্ট নয়: আইটেমের সর্বাধিক সংখ্যক । কারণটি হ'ল পূর্ববর্তী পুনরুক্তি সূত্রটি আইটেমগুলির বিভিন্ন সংমিশ্রণকে বিবেচনা করে না:p

  1. প্রথমত, যদি তবে যাতে -th আইটেমটি বিবেচিত আইটেম, সর্বোচ্চ সংখ্যক সত্ত্বেও ঝোলা যোগ করা হয় --- যাতে আপনি আপনার বাধ্যতা লঙ্ঘন হতে পারে। ঠিক আছে, আপনি প্রতিটি পদক্ষেপে itemsোকানো আইটেমের সংখ্যার উপর নজর রেখে পূর্ববর্তী সূত্রটি প্রয়োগ করার জন্য প্রলুব্ধ হতে পারেন এবং ন্যাপস্যাকের আইটেমের সংখ্যা বর্তমানে ছাড়িয়ে গেলে অন্যকে যোগ করবেন না তবে,টি আই , জে = ( টি আই - ডাব্লু জে , জে - + ভি জে ) জে পি পিTi,j1<(Tiwj,j1+vj)Ti,j=(Tiwj,j1+vj)jpp
  2. দ্বিতীয়ত, যদি তবে যাতে এই আইটেমটি যুক্ত না হয় তবে ইতিমধ্যে ন্যাপস্যাকের মধ্যে সর্বাধিক সংখ্যক আইটেম সন্নিবেশিত হওয়ার ক্ষেত্রে এটি একটি ভুল হতে পারে । কারণটি হ'ল আমরা সঠিকভাবে তুলনা করছি না: একদিকে পূর্ববর্তী মধ্যে নির্বাচিত আইটেমগুলি সমন্বিত অনুকূল সমাধানটি সংরক্ষণ করার জন্য ; অন্যদিকে, তম আইটেমটি সন্নিবেশ করানোর জন্য এবং পূর্ববর্তী মধ্যে আইটেমগুলির সাথে সর্বোত্তম উপসেটটি বিবেচনা করুন ।টি আই , জে = টি আই , জে - টি আই , জে - 1 পি ( জে - 1 ) জে ( পি - 1 ) ( জে - 1 )Ti,j1>(Tiwj,j1+vj)Ti,j=Ti,j1Ti,j1p(j1)j(p1)(j1)

যাতে একটি প্রথম সমাধান তৃতীয় মাত্রা যুক্ত করে। আপনার ক্ষেত্রে জন্য দিন অনুকূল সমাধান হতে যখন ঝোলা ক্ষমতা নেই , কেবলমাত্র প্রথম আইটেম বলে মনে করা হয় এবং এটি চেয়ে বেশি করা অনুমোদিত নয় ঝোলা আইটেম। এখন, আই জে কেTi,j,kijk

  • আপনি যদি এমন আইটেমের সংখ্যার চেয়ে কম বা সমান পরিমাণ আইটেমের জন্য গণনা করছেন তবে ( ) তারপরে যথারীতি এগিয়ে চলুন তবে : same এর একই মান ব্যবহার করেটি আমি , , =Ti,j,kjkkTi,j,k=max{Ti,j1,k,Tiwj,j1,k+vj}
  • এখন, যদি আপনাকে যেতে পারে এমন আইটেমগুলির সংখ্যার ( ) এর চেয়ে কড়াভাবে বড় আইটেমের জন্য গণনা করতে হয় :> কে টি আই , জে , কে = সর্বাধিক {Ti,j,kj>kTi,j,k=max{Ti,j1,k,Tiwj,j1,k1+vj}

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

এই অ্যালগরিদমের একটি কার্যকর প্রয়োগের জন্য সমস্ত জন্য গণনা করার দরকার নেই । নোট পূর্ববর্তী পুনরাবৃত্তি সম্পর্ক স্তর কহা যে সঙ্গে এবং এইভাবে, এটা দুই ধারাবাহিক স্তর (যেমন, যদি আপনার সাথে সন্তোষজনক সমাধান আগ্রহী মধ্যে বিকল্প করা সম্ভব আপনি শুধু পরপর দুই স্তর ব্যবহার: 0 এবং 1, 1 এবং 2, 2 এবং 3, 3 এবং 4 এবং আপনি সম্পন্ন করেছেন)। অন্য কথায়, এই অ্যালগরিদম গতিশীল প্রোগ্রামিংয়ের উপর ভিত্তি করে traditionalতিহ্যবাহী পদ্ধতির দ্বারা প্রয়োজনীয় মেমরির দ্বিগুণ গ্রহণ করে এবং এটি এখনও সিউডো-বহুবর্ষীয় সময়ে চালানো যেতে পারে। কে কে ( কে - 1 ) কে = 4Ti,j,kkk(k1)k=4

তবে সচেতন থাকুন যে এটিই একমাত্র সমাধান নয়! এবং এমন আরও একটি জিনিস রয়েছে যা আপনি আরও মার্জিত দেখতে পারেন। পূর্ববর্তী সূত্র, আমরা সন্তোষজনক সমাধান যার কোন তুলনায় আরো গঠিত উদ্ধার প্রথম মধ্যে আইটেম যেমন । তবে, এটি পরিষ্কার হওয়া উচিত যে এটি কেবল আসল টেবিলটি ব্যবহার করে ঠিক সমান ! উদাহরণস্বরূপ, 1 আইটেম, 2 আইটেম, 3 আইটেম, ... সাথে সর্বোত্তম সমাধানগুলি বিবেচনা করে আইটেম ছাড়া আর সর্বোত্তম সমাধান পুনরুদ্ধার করা যাবে( জে - 1 ) টি আই , জে - 1 , কে - 1 সর্বাধিক পি = 0 , জে - 1 { টি আই , পি } কে ( জে - 1 ) কে(k1)(j1)Ti,j1,k1maxp=0,j1{Ti,p}k(j1)আইটেম ... এই সূত্রটি তৈরির কাজটি করার জন্য আপনার প্রতিটি আংশিক সমাধানে বিবেচিত আইটেমগুলির সংখ্যাও ট্র্যাক করা উচিত যাতে আপনার প্রতি ঘরে প্রতি দুটি পূর্ণসংখ্যার প্রয়োজন হয়। এই মেমরি দখল অ্যালগরিদম উপরে দেখানো (স্তর আকারে তৃতীয় মাত্রা ব্যবহারের অবিকল একই মেমরির প্রয়োজনীয়তা ফলাফল )k

আশাকরি এটা সাহায্য করবে,


খুব দুর্দান্ত প্রতিক্রিয়া, আপনাকে ধন্যবাদ। আমি তৃতীয় মাত্রা বাস্তবায়ন করে আপনার পোস্টের আগে এটি পেতে সক্ষম হয়েছি।
ব্যবহারকারী 11536

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

বহুমাত্রিক ন্যাপস্যাক সমস্যার বিস্ময়কর ব্যাখ্যা ow যাইহোক আমি ভাবছিলাম যে আমাদের ক্ষেত্রে একই রকম ঘটনা রয়েছে তবে ঠিক কে উপাদানগুলির সাথে আমরা কেবল তৃতীয় মাত্রার কাঁথ কলাম দ্বারা ফিরে আসা মানগুলি লক্ষ্য করব I যদি সেখানে মান না থাকে তবে ফিরে আসুন 0.I আমি সঠিক কিনা তা নিশ্চিত নই কারণ আমি এখনও ডায়নামিক প্রোগ্রামিংয়ে নতুন।
স্টিভ আইরউইন

@ কার্লোস লিনারেস ল্যাপেজ দুর্দান্ত উত্তর। আপনি দয়া করে অজগর স্ক্রিপ্ট ভাগ করতে পারেন? এটি gist.github.com এ পোস্ট করতে পারেন?
সাদ মালিক

1
হাই @ কার্লোস! আমি এখানে আপনার বিকল্প সূত্রটি ব্যবহার করার জন্য একটি ফলো-আপ প্রশ্ন পোস্ট করেছি: 0/1 ন্যাপস্যাকে এন-সেরা আইটেমগুলি সন্ধান করা । যাইহোক আমি আশা করি আপনি আপনার ছুটি উপভোগ করছেন!
সাদ মালিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.