मैंने हाल ही में कुछ कोड लिखे थे जो मुझे बहुत ही अयोग्य लगे, लेकिन चूंकि इसमें केवल कुछ मूल्य शामिल थे, इसलिए मैंने इसे स्वीकार कर लिया। हालाँकि, मैं अभी भी निम्नलिखित के लिए एक बेहतर एल्गोरिथ्म में दिलचस्पी रखता हूं:
- एक्स ऑब्जेक्ट्स की एक सूची, उनमें से प्रत्येक को एक "वजन" सौंपा गया है
- वज़न बढ़ाओ
- 0 से योग तक एक यादृच्छिक संख्या उत्पन्न करें
- वस्तुओं के माध्यम से Iterate, उनके वजन को योग से घटाकर जब तक कि राशि गैर-सकारात्मक न हो
- ऑब्जेक्ट को सूची से निकालें, और फिर उसे नई सूची के अंत में जोड़ें
आइटम 2,4, और 5 सभी n
समय लेते हैं , और इसलिए यह एक O(n^2)
एल्गोरिथ्म है।
क्या इसमें सुधार किया जा सकता है?
एक भारित फेरबदल के उदाहरण के रूप में, एक तत्व के सामने एक उच्च वजन के साथ होने का एक बड़ा मौका है।
उदाहरण (मैं इसे वास्तविक बनाने के लिए यादृच्छिक संख्या उत्पन्न करूँगा):
6 वज़न वाले 6 ऑब्जेक्ट्स 6,5,4,3,2,1; योग 21 है
मैंने 19 को चुना: 19-6-5-4-3-2 = -1
इस प्रकार 2 पहले स्थान पर हैं, अब वेट 6,5,4,3,1 है; योग 19 है
मैंने 16 को चुना: 16-6-5-4-3 = -2
इस प्रकार 3 दूसरी स्थिति में हैं, अब वजन 6,5,4,1 है; योग 16 है
मैंने 3 को चुना: 3-6 = -3
इस प्रकार 6 तीसरे स्थान पर है, अब वज़न 5,4,1 है; योग 10 है
मैंने 8 उठाया: 8-5-4 = -1
इस प्रकार 4 चौथे स्थान पर चला गया, वजन अब 5,1 है; योग 6 है
मैंने ५ उठाया: 5-5=0
इस प्रकार ५ वें स्थान पर जाता है, वज़न अब १ है; योग 1 है
मैंने 1 उठाया: 1-1=0
इस प्रकार 1 अंतिम स्थिति में जाता है, मेरे पास अधिक भार नहीं है, मैं समाप्त करता हूं