实现了一个递归深度优先搜索方法,使用分支和绑定来解决背包问题。一切都很好,最多1000件(我得到一个即时结果)。但是,当我使用10,000个项目运行测试时,会出现堆栈溢出错误。
我是否正确地说,任何时候最大的递归呼叫都等于项目数? 我想我知道为什么我会收到堆栈溢出,这是一段代码片段:
ArrayList<Item> newChosen = new ArrayList<Item>(chosen);
newChosen.add(nextItem);
//This is where i believe my code is inefficient.
// there must be a better way of passing a new list
// need to make a new array list due to different
// recursive instances modifying their lists
calculateKnapsack(new ArrayList<Item>(newChosen), new ArrayList<Item> (toVisit));
calculateKnapsack(new ArrayList<Item>(chosen), new ArrayList<Item>(toVisit));
我想真正的问题是,递归传递列表的更好方法是什么,或者更好的方法是递归dfs分支和绑定?
非常感谢你们。
注意:这适用于Coursera上的离散优化课程