Java递归DFS背包stackoverflow具有非常大的输入,更好的方式传递列表

时间:2015-04-02 14:58:37

标签: java recursion stack-overflow depth-first-search knapsack-problem

实现了一个递归深度优先搜索方法,使用分支和绑定来解决背包问题。一切都很好,最多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上的离散优化课程

0 个答案:

没有答案