मैं संयोजन पर एक निश्चित बजट और अधिकतम सीमा दिए गए सितारों की संख्या को अधिकतम करने के लिए देख रहा हूं।
उदाहरण प्रश्न:
500 यूरो के बजट के साथ, केवल अधिकतम अनुमत रेस्तरां या उससे कम, भोजन करें और सबसे अधिक संभव सितारों को इकट्ठा करें।
मैं एक कुशल एल्गोरिथ्म लिखना चाह रहा हूं, जो 10 अधिकतम रेस्तरां के लिए संभावित रूप से 1 मिलियन रेस्तरां उदाहरणों को संसाधित कर सकता है।
ध्यान दें, यह एक प्रश्न है जो मैंने कल पूछा था: क्रॉस: एक क्षेत्र पर आधारित वस्तुओं की एक बड़ी सूची का सबसे कुशल संयोजन प्राप्त करें
नीचे दिए गए समाधान r8
रेस्तरां को 15 डॉलर प्रति स्टार प्रदान करेंगे , जिसका अर्थ है कि सूची बनाते समय, यह सूची में पहले स्थान पर रखता है, और शेष 70 डॉलर के साथ कुल 4 सितारों को देने वाले केवल 2 और सितारों को प्राप्त कर सकता है। हालांकि, अगर यह r8
रेस्तरां को छोड़ने के लिए पर्याप्त स्मार्ट था (भले ही यह प्रति स्टार अनुपात में सबसे अच्छा डॉलर हो) तो r1
रेस्तरां वास्तव में बजट के लिए एक बेहतर विकल्प होगा, क्योंकि यह $ 100 लागत और 5 स्टार है।
किसी को भी समस्या का प्रयास और वर्तमान समाधान को हरा सकते हैं?
import itertools
class Restaurant():
def __init__(self, cost, stars):
self.cost = cost
self.stars = stars
self.ratio = cost / stars
def display(self):
print("Cost: $" + str(self.cost))
print("Stars: " + str(self.stars))
print()
r1 = Restaurant(100, 5)
r2 = Restaurant(140, 3)
r3 = Restaurant(90, 4)
r4 = Restaurant(140, 3)
r5 = Restaurant(120, 4)
r6 = Restaurant(60, 1)
r7 = Restaurant(40, 1)
r8 = Restaurant(30, 2)
r9 = Restaurant(70, 2)
r10 = Restaurant(250, 5)
print()
print("***************")
print("** Unsorted: **")
print("***************")
print()
restaurants = [r1, r2, r3, r4, r5, r6, r7, r8, r9, r10]
for restaurant in restaurants:
print(restaurant.ratio, restaurant.stars)
print()
print("***************")
print("** Sorted: **")
print("***************")
print()
sorted_restaurants = sorted(restaurants, key = lambda x: x.ratio, reverse = True)
for restaurant in sorted_restaurants:
print(restaurant.ratio, restaurant.stars)
print()
print("*********************")
print("** Begin Rucksack: **")
print("*********************")
print()
max = 5
budget = 100
spent = 0
quantity = 0
rucksack = []
for i in itertools.count():
if len(rucksack) >= max or i == len(sorted_restaurants):
break
sorted_restaurants[i].display()
if sorted_restaurants[i].cost + spent <= budget:
spent = spent + sorted_restaurants[i].cost
rucksack.append(sorted_restaurants[i])
print("Total Cost: $" + str(sum([x.cost for x in rucksack])))
print("Total Stars: " + str(sum([x.stars for x in rucksack])))
print()
print("*****************")
print("** Final List: **")
print("*****************")
print()
for restaurant in rucksack:
restaurant.display()
budget
= किग्रा में अधिकतम रूकसाक वजन, max
= आइटम की संख्या जो दस्ता रख सकती है, stars
= आइटम पर कुछ मूल्य और cost
किलो में आइटम का वजन
r8
रेस्तरां को 15 डॉलर प्रति स्टार प्रदान करता है , जिसका अर्थ है कि सूची बनाते समय, यह सूची में पहले स्थान पर रखता है, और शेष 70 डॉलर के साथ इसे केवल 2 और सितारे मिल सकते हैं। हालाँकि, अगर यह स्मार्ट को छोड़ दिया जाए (भले ही यह प्रति स्टार अनुपात में सबसे अच्छा डॉलर हो, तो r1
रेस्तरां वास्तव में बजट के लिए बेहतर विकल्प होगा, क्योंकि यह $ 100 लागत और 5 स्टार है