एक बैग पैक करने के बारे में थोड़ा सा

बहुत से लोग बैकपैक को पैक करने के तथाकथित कार्य को जानते हैं।
मुझे आपको संक्षेप में याद दिलाना है: वस्तुओं के ढेर से आपको इस तरह का चयन करने की आवश्यकता है कि बैकपैक नेत्रगोलक के लिए crammed है और इसे अभी भी निकाल दिया जा सकता है।
अधिक औपचारिक रूप से बोलते हुए, इस सेट से आवश्यक है कि संख्याओं के जोड़े A (i) b (i) का चयन करें ताकि संख्याओं का योग पूर्व निर्धारित S से अधिक न हो, और संख्याओं का योग अधिकतम हो। Σa (n)) S, Σb (n) = मैक्स।

स्रोत सेट:

Σ
एक3142526322282319163
1112530312519273233225


अंतिम कॉलम सभी वस्तुओं के कुल वजन और उनकी कुल लागत को दर्शाता है। सेट S (वहन क्षमता) Sa से अधिक नहीं होनी चाहिए, अन्यथा समाधान तुच्छ है - हम सब कुछ ले सकते हैं। इन सीमाओं को देखते हुए, कुल लागत ,b का उपयोग करके, हम यह मूल्यांकन कर सकते हैं कि परिणामी समाधान की कुल लागत निरपेक्ष अधिकतम से कितनी भिन्न है।

इस समस्या को हल करने के कई तरीके हैं, उन्हें विकिपीडिया में वर्णित किया गया है।
हम "लालची" एल्गोरिथ्म में रुचि रखते हैं।
इसमें प्रत्येक जोड़ी के मान d = a / b की गणना की जाती है, जिसके द्वारा जोड़े को क्रमबद्ध किया जाता है और फिर चुना जाता है।

मान सेट d:

Σ
एक3142526322282319163
1112530312519273233225
3.670.860.21.150.9712.50.681.1732.03.67


D सेट द्वारा सॉर्ट किया गया
Σ
एक1239232632142825163
3225113327303112195225
32.012.53.673.671.171.150.970.860.680.20


आइए S = 60 पर एक समाधान खोजने की कोशिश करते हैं।
Σ
एक1239232632142825163
3225113327303112195225
32.012.53.673.671.171.150.970.860.680.20

पहले पांच आइटम हमें fivea = 38, =b = 128 देंगे। अगला आइटम फिट नहीं है। इसके साथ, ita = 64।
पहले पाँच वस्तुओं को बिछाने के बाद जो छेद छोड़ा गया उसका आकार निकला: 60-38 = 22। यदि आप सेट को अंत तक देखते हैं, तो एक और वस्तु है जो इस छेद में रखी गई है।
Σ
एक1239232632142825163
3225113327303112195225
32.012.53.673.671.171.150.970.860.680.20
कुल: .a = 52, Σb = 140।

दुर्भाग्य से, यह एक इष्टतम समाधान नहीं है।

यदि हम आइटम को 23-27 से 26-30 के साथ प्रतिस्थापित करते हैं,

Σ
एक1239232632142825163
3225113327303112195225
32.012.53.673.671.171.150.970.860.680.20
फिर thena = 55, =b = 143, जो पहले से ही एक इष्टतम समाधान है।

सीमित मामले पर विचार करें। हमारे पास दो आइटम हैं जिन्हें व्यक्तिगत रूप से एक बैकपैक में रखा गया है, लेकिन एक साथ नहीं। एक प्राकृतिक समाधान एक अधिक महंगी वस्तु लेना होगा, इसके अधिक वजन के बावजूद। जाहिर है, स्टैक्ड आइटम की कीमत में वजन की तुलना में अधिक प्राथमिकता होती है।
डी के मूल्य का एक छोटा पुनर्मूल्यांकन हमें उस दिशा में प्राथमिकता को स्थानांतरित करने की अनुमति देता है जिसकी हमें आवश्यकता है।

सरल अनुपात के बजाय d = b / a, d = b 2 / a और फिर भी d से क्रमबद्ध करें।

D = b 2 / a सेट द्वारा सॉर्ट किया गया
Σ
एक1293262332142825163
3225331130273112195225
1024312.512140.3334.631.730.010.312.91.0

उसी एस = 60 के लिए
Σ
एक1293262332142825163
3225331130273112195225
1024312.512140.3334.631.730.010.312.91.0
Σa = 55, =b = 143। हम तुरंत इष्टतम समाधान के लिए आते हैं।

इस प्रकार, बैकपैक बिछाने का कार्य रैखिक समय में हल किया गया है और पूर्ण एनपी नहीं है।

Source: https://habr.com/ru/post/In205890/


All Articles