python版本背包问题的动态规划实现

电脑杂谈  发布时间:2020-04-25 11:10:03  来源:网络整理

0 1背包问题动态规划算法_数据结构背包问题_背包问题 动态规划 python

经典背包问题. 背包最多只能容纳固定的空间. 在不同的空间中有几个项目可供选择. 每个项目都有不同的值. 该程序遍历每种可能的组合以选择最佳选择. 解决方案,最大程度地提高了背包中所装物品的价值. 该算法的时间复杂度是指数O(n ^ k). 使用旧的例程,计算机存储空间可以交换所消耗的时间背包问题 动态规划 python背包问题 动态规划 python,可以有效地提高程序性能并降低时间复杂度:

数据结构背包问题_背包问题 动态规划 python_0 1背包问题动态规划算法

def fast_knapsack(w, v, i, aw, m):
    global numCalls;
    numCalls += 1
    try:
        return m[(i, aw)]
    except KeyError:
        if i == 0:
            if w[i] < aw:
                return v[i]
            else:
                return 0
        without_i = fast_knapsack(w, v, i - 1, aw, m)
        if w[i] > aw:
            return without_i
        with_i = fast_knapsack(w, v, i - 1, aw - w[i], m) + v[i]
        res = max(without_i, with_i)
        m[(i, aw)] = res
        return res
def knapsack(w, v, i, aW):
    global numCalls
    numCalls += 1
    if i == 0:
        if w[i] <= aW:
            return v[i]
        else:
            return 0
    without_i = knapsack(w, v, i - 1, aW)
    if w[i] > aW:
        return without_i
    else:
        with_i = v[i] + knapsack(w, v, i - 1, aW - w[i])
    return max(with_i, without_i)
if __name__ == '__main__':
    # n = 10
    # w = [2, 6, 5, 4]
    # v = [3, 5, 4, 6]
    # n = 5
    # w = [5,3,2]
    # v = [9,7,8]
    # 
    n = 10
    w = [2, 1, 5, 5, 3, 3, 4, 4]
    v = [15, 15, 10, 10, 9, 9, 5, 5]
    numCalls = 0
    res = knapsack(w, v, len(w) - 1, n)
    print('optimum solution: ', res)
    print('call funstion times: ', numCalls)
    print('')
    numCalls = 0
    res = fast_knapsack(w, v, len(w) - 1, n, {})
    print('optimum solution: ', res)
    print('call funstion times: ', numCalls)

数据结构背包问题_背包问题 动态规划 python_0 1背包问题动态规划算法

运行结果:


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-188265-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...