对于Ruby中无界背包的一个变体,我如何改进这个算法
这个问题是无界背包问题的一个变种,在无界背包问题中,你有相等值但不同权重的物品。这个算法解决了这个问题,但我想优化它的性能。有人有什么建议吗对于Ruby中无界背包的一个变体,我如何改进这个算法,ruby,algorithm,knapsack-problem,Ruby,Algorithm,Knapsack Problem,这个问题是无界背包问题的一个变种,在无界背包问题中,你有相等值但不同权重的物品。这个算法解决了这个问题,但我想优化它的性能。有人有什么建议吗 def knapsack(capacity, bars) if capacity == 0 || bars.nil? || bars[0].nil? return 0 end solutions = [] sum = 0 (1..capacity).each do |i| break
def knapsack(capacity, bars)
if capacity == 0 || bars.nil? || bars[0].nil?
return 0
end
solutions = []
sum = 0
(1..capacity).each do |i|
break if sum > capacity
bars.combination(i).lazy.each do |comb|
sum = comb.reduce(&:+)
solutions << sum
end
end
solutions.select{|i| i <= capacity}.max
end
def背包(容量,条)
如果容量==0 | |巴。零| |条[0]。零?
返回0
结束
解决方案=[]
总和=0
(1.容量)。每个do | i|
如果总和>容量,则中断
酒吧。组合(一)。懒惰。每个都做梳子|
总和=梳减少(&:+)
解决方案您真的希望将最后一次迭代的条
的总和
与容量
进行比较吗?我不知道算法。只是问问而已。也许条
是以某种方式排列的。条可以是正整数的任意组合。例如,4 1 2 1。每个整数表示对象的权重,它们的值都相等。本例中的容量可能为7。是否确实要将最后一次迭代的条
的总和
与容量
进行比较?我不知道算法。只是问问而已。也许条
是以某种方式排列的。条可以是正整数的任意组合。例如,4 1 2 1。每个整数表示对象的权重,它们的值都相等。这种情况下的容量可能是7。