我正在研究一个处理0-1背包问题的项目,在该项目中,我需要研究解决/近似解决方案的不同方法。
第一个算法是回溯方法。我需要确定这一个的时间复杂度:
Knapsack(length, currentWeight):
global currentSolution, optimalSolution, optimalValue
if(length == N) then
if(sum(i = 1 to numberItems of vi * xi) > optimalValue) then
optimalValue = sum(i = 1 to numberItems of vi * xi)
optimalSolution = currentSolution
end
else
if(currentWeight + weights[length] <= maxWeight) then
currentSolution[length] = 1
Knapsack(length + 1, currentWeight + weights[length])
currentSolution[length] = 0
Knapsack(length + 1, currentWeight)
else
currentSolution[length] = 0
Knapsack(length + 1, currentWeight)
end
end
我不知道从何处以及如何开始。我在课堂上看到的示例是算法,其中每次递归调用时数据大小都会减小。
我是否应该只考虑最坏的情况,即所有递归调用都是从第一部分(其中currentWeight + weights[length] <= maxWeight
为真)进行的?
谢谢!