यदि आप समस्या को थोड़ा अलग (लेकिन समतुल्य) तरीके से नियंत्रित करते हैं, तो एक एल्गोरिथ्म अधिक स्पष्ट हो जाता है:
इसमें पार्टियां शामिल हैं: n - 1 व्यक्ति और एक टॉयलेट। चलो पी मैं पैसा पार्टी की राशि हो मैं होना चाहिए के बाद भोजन समाप्त और के लिए भुगतान किया जाता है। उदाहरण के लिए, यदि एलिस के पास $ 36 और $ 25 का बकाया है , तो बॉब के पास $ 12 और $ 11 का बकाया है , और कार्ल के पास $ 30 और 25 डॉलर का बकाया है , हम कहते हैं कि पी 0 रेस्तरां है और है:nएन - 1पीमैंमैंपी0
पी = ( ६१ , ११ , १ , ५ )
यही है, जब भोजन खत्म हो जाता है तो रेस्तरां में $ 61 होना चाहिए, ऐलिस के पास $ 11 होना चाहिए, बॉब के पास $ 1 होना चाहिए और कार्ल के पास $ 5 होना चाहिए ।
खमीटर
बी = ( १ , ५ , १० , २० , १ , १ , ५ , ५ , १० , २० )
बिलों के मूल्य में कोई फर्क नहीं पड़ता है, लेकिन मैंने इस उदाहरण के लिए कागज की अमेरिकी मुद्रा के मूल्यवर्ग को चुना है क्योंकि वे परिचित हैं।
मैंj{ 0 , 1 }सीसी0 , जे= 0j
हमारा उदाहरण जारी है:
C=⎡⎣⎢⎢⎢0011001100110011010101010101010101100110⎤⎦⎥⎥⎥
इंगित करता है कि ऐलिस $ 1, $ 5, $ 10, $ 20 के साथ शुरू हुआ, बॉब ने $ 1, $ 1, $ 5, $ 5 से शुरू किया, और कार्ल ने $ 10 और $ 20 से शुरू किया ।
फिर से, लक्ष्य उन बिलों की संख्या को कम करना है जो हाथों को बदलते हैं। दूसरे शब्दों में:
Minimize:subject to:and∑i=0n−1∑j=0m−1Ci,jxi,j∑i=0n−1xi,j=1 for 0≤j<m,∑j=0m−1xi,jbj=pi for 0≤i<n,xi,j≥0
पहला बाधा कहता है कि समाधान केवल एक पार्टी को एक विशेष बिल सौंप सकता है, और दूसरा यह सुनिश्चित करता है कि हर कोई उचित राशि का भुगतान करता है।
यह 0,1 पूर्णांक समस्या है और NP- पूर्ण है (देखें [ 1972 1972 ])। रैखिक प्रोग्रामिंग के बारे में विकिपीडिया पृष्ठ में विभिन्न एल्गोरिदम के बारे में जानकारी है जो इस प्रकार की समस्याओं के लिए उपयोग किया जा सकता है।
संभावित रूप से कई इष्टतम समाधान हैं; उदाहरण के लिए पहला समाधान हाथ से लेकर मैं आया था:
x=⎡⎣⎢⎢⎢0100100001001000101000000001100010001000⎤⎦⎥⎥⎥
जिसका अर्थ है कि एलिस $ 5 और $ 20 का भुगतान करता है, बॉब बिलकुल $ 1, $ 5 और $ 5 का भुगतान करता है , और कार्ल $ 10 और $ 20 से आगे निकल जाता है और फिर टेबल से $ 5 निकाल देता है ।
मैंने ऋषि मठ प्रणाली के मिश्रित पूर्णांक रैखिक कार्यक्रम मॉड्यूल का भी उपयोग किया, जिसमें विभिन्न सॉल्वर बैकेंड ( GLPK , COIN , CPLEX , या Gurobi ) का उपयोग करने की क्षमता है । इसका पहला हल जो था
x=⎡⎣⎢⎢⎢0100100001001000001010000000100110001000⎤⎦⎥⎥⎥
जो लगभग वैसा ही है सिवाय इसके कि कार्ल ने "अन्य" $ 5 लिया जो बॉब ने टेबल पर रखा।
Cx
उन लोगों के सबसेट को पहचानें जो कम किए गए कुल का भुगतान कर सकते हैं? या शायद लोगों का एक सबसेट जो अभी भी पूरे बिल का भुगतान कर सकता है, यानी वे अपने दोस्त के लिए भुगतान करते हैं।
आपका अंतिम विवरण यह बताता है कि आप इस मामले में रुचि रखते हैं कि बिल के मूल्यवर्ग तय किए गए हैं, लेकिन यह समस्या को नहीं बदलता है।
O(1)