Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于Ruby中无界背包的一个变体,我如何改进这个算法_Ruby_Algorithm_Knapsack Problem - Fatal编程技术网

对于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。