- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
给定一组代表(成本, yield )的样本数据
items = [ (1000, 300), (500, 150), (400, 120), (300, 100), (200, 50), (55, 25) ]
我有一个算法可以找到这些项目的倍数的最佳组合来填补给定的成本
f(项目,容量,最大成本)
将生成一个条目,指定受容量和成本限制的最有效的项目数量。
class BestCombo(object):
def __init__(self, items, qtyLimit, costLimit):
self.bestPerf = 0
self.best = None
self.items = items
self.qtyLimit = qtyLimit
self.costLimit = costLimit
self._findBest(load=[], qty=0, cost=0, perf=0)
def _findBest(self, load, qty, cost, perf):
idx = len(load)
if idx >= len(self.items):
if qty <= self.qtyLimit and cost <= self.costLimit:
if perf > self.bestPerf:
self.bestPerf = perf
self.best = list(load)
return
item = self.items[idx]
maximum = min(self.qtyLimit - qty, (self.costLimit - cost) // item[0])
for q in range(0, maximum + 1):
self._findBest(load + [[item, q]], qty + q, cost + item[0] * q, perf + item[1] * q)
items = [ (1000, 300), (500, 150), (400, 120), (300, 100), (200, 50), (55, 25) ]
print("3, 900")
print(BestCombo(items, 3, 900).best)
print("3, 1100")
print(BestCombo(items, 3, 1100).best)
print("3, 3000")
print(BestCombo(items, 3, 3000).best)
print("10, 900")
print(BestCombo(items, 10, 900).best)
print("42, 21000")
print(BestCombo(items, 42, 21805).best)
所以这会产生一个“最佳”,表示 3 个单位的 900 perf 最适合 (300,100) 项中的 3 个,而 3, 1100 会产生 1x500 和 2x300 的最佳值。
虽然这种方法有效,但对于非平凡的值来说速度非常慢。
我尝试了多种变体,包括基于产量的变体,但它们都因某些变体而变慢(我似乎无法想出一个好的方法来实现不会产生荒谬的产量生命周期中的列表数)
“项目”列表可能最多有 64-90 个项目,容量不太可能超过 255 个。
我似乎记得过去使用算法来解决这个问题,但是,也许是因为我对 Python 比较陌生,而且我是用 Python 做的,所以我在那里画了一个空白。
是否可以通过非暴力破解找到结果?
最佳答案
这看起来很像 http://en.wikipedia.org/wiki/Knapsack_problem .在一般情况下,这将花费指数时间,但其中一种动态规划方法可能会被证明是实用的,特别是如果您准备对一些数字进行四舍五入以获得对四舍五入数字问题的准确答案,这将是一个您的问题的大致答案。
关于python - 优化最佳增益与容量/成本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24598366/
我试过了 alBufferf (myChannelId, AL_MAX_GAIN (and AL_GAIN), volumeValue); 并收到错误0xA002。 最佳答案 0xA002是Linux
我正在使用 Matlab 从 2 点灰度相机 (Flea2) 捕捉图像,我想更改相机的一些参数,例如自动曝光、增益和快门速度。到目前为止,我已经使用了这些命令: %Creating the two v
我正在尝试调整网络摄像头的亮度。我需要 3 张不同亮度设置的不同照片。我不想让它成为手动的,所以如果想在程序中包含设置。 下面是我正在使用的代码。使用方法 GetFrame() 可以从网络摄像头获取下
我想问一个我试图自己回答但无法想出任何解决方案的问题。 我想知道任何具有这些属性的算法(或者是否有可能至少证明一个算法是否存在) +-----------+ status_
我有一个OSX应用程序,该应用程序使用音频单元记录音频数据。可以将音频单元的输入设置为任何可用的输入源,包括内置输入。问题是,我从内置输入获得的音频经常被剪切,而在诸如Audacity(甚至Quick
我是一名优秀的程序员,十分优秀!