输出错误为0x03BB7390

2024-10-02 02:24:13 发布

您现在位置:Python中文网/ 问答频道 /正文

def fastMaxVal(w, v, i, aW):
    global numCalls
    numCalls += 1
    try: return m[(i, aW)]
    except KeyError:
        if i == 0:
            if w[i] <= aW:
                m[(i, aW)] = v[i]
                return v[i]
            else:
                m[(i, aW)] = 0
                return 0
        without_i = fastMaxVal(w, v, i-1, aW)
        if w[i] > aW:
            m[(i, aW)] = without_i
            return without_i
        else:
            with_i = v[i] + fastMaxVal(w, v, i-1, aW - w[i])
        res = max(with_i, without_i)
        m[(i, aW)] = res
        return res

def maxVal0(w, v, i, aW):
    m = {}
    return fastMaxVal

weights = [1, 1, 5, 5, 3, 3, 4, 4]
vals = [15, 15, 10, 10, 9, 9, 5, 5]
numCalls = 0
res = maxVal0(weights, vals, len(vals) - 1, 8)
print ('max Val =', res, 'number of calls =', numCalls)

这个程序是关于背包问题的。我用决策树来解决这个问题。但是,我运行了这个程序,得到了以下结果

max Val = function fastMaxVal at 0x03BB7390 number of calls = 0

我的程序怎么了


Tags: 程序returnifdefwithreselsemax
2条回答
def fastMaxVal(w, v, i, aW, m):
    global numCalls
    numCalls += 1
    try: return m[(i, aW)]
    except KeyError:
        if i == 0:
            if w[i] <= aW:
                m[(i, aW)] = v[i]
                return v[i]
            else:
                m[(i, aW)] = 0
                return 0
        without_i = fastMaxVal(w, v, i-1, aW, m)
        if w[i] > aW:
            m[(i, aW)] = without_i
            return without_i
        else:
            with_i = v[i] + fastMaxVal(w, v, i-1, aW - w[i], m)
        res = max(with_i, without_i)
        m[(i, aW)] = res
        return res

def maxVal0(w, v, i, aW):
    m = {}
    return fastMaxVal(w, v, i, aW, m)

weights = [1, 1, 5, 5, 3, 3, 4, 4]
vals = [15, 15, 10, 10, 9, 9, 5, 5]
numCalls = 0
res = maxVal0(weights, vals, len(vals) - 1, 8)
print ('max Val =', res, 'number of calls =', numCalls)

我把右边放在上面。我附上结果如下

max Val = 48 number of calls = 50

maxVal0函数中,返回的是fastMaxVal函数本身,而不是它的调用结果

我想应该是这样的:

def maxVal0(w, v, i, aW):
    m = {}
    return fastMaxVal(w, v, i, aW)

另外,您的fastMaxVal正在使用m,但它不在其范围内

相关问题 更多 >

    热门问题