সংক্ষিপ্ত বিবরণ
জেফ শটকের উত্তর সঠিক যে এটি গণিতবিদরা যেমন সম্মিলিত অপ্টিমাইজেশান সমস্যার সমতুল্য (বা আইসোমোরফিক) লিখেছেন তবে এটি 1-মাত্রিক বিন প্যাকিং সমস্যার সমতুল্য , ন্যাপস্যাক সমস্যা নয় ।
আপনার জন্য ভাগ্যবান, আমার কাছে কিছু শেয়ার করার মত কোড রয়েছে যা আপনার বা অন্য কারও কাছে নেট নেট ফ্রেমওয়ার্ক ইনস্টলডের কমপক্ষে 3.5 সংস্করণ সহ একটি উইন্ডোজ কম্পিউটারে অ্যাক্সেস সহ এই সমস্যাটি সমাধান করবে।
একটি রাফ সমাধান
প্রথমে, লিনকুইপ্যাড ডাউনলোড এবং ইনস্টল করুন ।
দ্বিতীয়ত, আমি স্রেফ লিখেছি লিনকিপ্যাড কোয়েরিটি ডাউনলোড করুন - কাঁচা ফাইলে এখানে লিনাক (হেক্টর) রয়েছে। এটি একটি লিংক ফাইল হিসাবে সংরক্ষণ করুন এবং এটি লিনকপ্যাডে খুলুন।
পরামিতিগুলি পরিবর্তন করুন:
আপনার যে পরিবর্তনটি করা উচিত লিনকপ্যাড কোয়েরি কোডের অংশটি এখানে:
int binSizeMb = 4476; // This is the (floor of the) total size of a DVD+R reported by CDBurnerXP.
string rootFileFolderPath = @"F:\2006 - Polyester Pimpstrap Intergalactic Extravaganza multicam";
binSizeMb
আপনার 'বিন' আকারে পরিবর্তন করুন , উদাহরণস্বরূপ সিডি, ডিভিডি, প্রাক্তন। int binSizeMb = 650;
একটি সিডি জন্য।
দ্রষ্টব্য - binSizeMb
মানটিকে কখনও কখনও একটি মেবিবাইট হিসাবে উল্লেখ করা হিসাবে ব্যাখ্যা করা হয় । আমার শৈশবের বিপরীতে, যখন সমস্ত বাইট গুণগুলি 'বাইনারি' ছিল, কখনও কখনও 'এমবি' এখন একটি 'দশমিক মেগাবাইট' বা ঠিক 1,000,000 বাইট বোঝায়, আমার কোডটিতে ব্যবহৃত একটি মেগাবাইট (এমআইবি) এর 1,048,576 বাইটের বিপরীতে । আপনি যদি এটি পরিবর্তন করতে চান const int bytesPerMb = 1048576;
তবে কোডের লাইনটি এতে পরিবর্তন করুন const int bytesPerMb = 1000000;
।
rootFileFolderPath
আপনি যে ফাইলগুলিতে 'পিন ইন প্যাক করতে চান' সেগুলি সহ ফোল্ডারের পুরো পথে পরিবর্তন করুন , প্রাক্তন। string rootFileFolderPath = @"C:\MySecretBinFilesFolder";
।
কোয়েরি ট্যাবটির উপরের বামে এক্সিকিউট বোতামটি চাপ দিয়ে F5বা ক্লিক করে কোয়েরিটি চালান ।
ফলাফল
ক্যোয়ারী কোডটি rootFileFolderPath
ফোল্ডারের সমস্ত ফাইলকে পুনরাবৃত্তভাবে গণনা করবে , এর অর্থ এটি সাবফোল্ডারগুলির মধ্যেও সমস্ত ফাইল অন্তর্ভুক্ত করবে।
তারপরে এটি ফাইলের জন্য 'বিনস' তৈরি করবে যাতে প্রতিটি বিনের সমস্ত ফাইলের মোট আকার নির্দিষ্ট করা বিনের চেয়ে কম বা সমান হয়।
লিংকপ্যাড ফলাফল ফলকে আপনি দুটি তালিকা দেখতে পাবেন।
আকারটি হ্রাস ক্রমে তালিকাভুক্ত সমস্ত ফাইলের মধ্যে প্রথম তালিকা।
দ্বিতীয় তালিকাটি হ'ল ফাইলগুলি এবং তাদের মাপের তালিকা এবং সেইসাথে বিনের বাকী আকারের সাথে 'ফাইলগুলি প্যাকিং' দ্বারা তৈরি করা বিনগুলি।
এখানে দ্বিতীয় স্ক্রিনশট তৈরি করা এবং প্রথম দুটি বিন তৈরি করা দেখানো হয়েছে:
কার্সারি বিশ্লেষণ
উইকিপিডিয়া অনুসারে, আমি ব্যবহৃত অ্যালগরিদম - ফার্স্ট ফিট ডিক্রেসিং (এফএফডি) কৌশলটি খুব খারাপ হওয়া উচিত নয়; উইকিপিডিয়া বলেছেন:
2007 সালে, এটি প্রমাণিত হয়েছিল যে এফএফডি-র জন্য 11/9 OPT + 6/9 সীমাবদ্ধ শক্ত।
'ওপিটি' সর্বোত্তম কৌশলকে বোঝায় (কোনও সম্ভাব্য অ্যাক্সেসযোগ্য কিছু হিসাবে, কোনও নির্দিষ্ট আসল কৌশল নয়)।
জড়িত গাণিতিক পদগুলির আমার কিছুটা অস্পষ্ট স্মৃতির উপর ভিত্তি করে, এর অর্থ এই হওয়া উচিত যে এফএফডি কৌশলটি সবচেয়ে খারাপভাবে আইটেমগুলিকে সর্বোত্তম কৌশলটি যে বিনের সংখ্যার তুলনায় 1.22 ডলার করে তুলবে pack সুতরাং, এই কৌশলটি আইটেমগুলিকে 4 এর পরিবর্তে 5 টি বিনে প্যাক করতে পারে I
একই উইকিপিডিয়া নিবন্ধে আরও বলা হয়েছে যে একটি "সঠিক অ্যালগরিদম" রয়েছে । আমি এটিও বাস্তবায়নের সিদ্ধান্ত নিতে পারি। আমাকে প্রথম কাগজটি পড়তে হবে যা প্রথমে অ্যালগরিদম বর্ণনা করে।