递归背包(分而治之)

时间:2015-11-03 01:15:46

标签: recursion knapsack-problem

我一直试图将这个问题解决3天以上。这是我每周两次任命的一部分。但是,我遇到了障碍。任何帮助都必须得到赞赏。

这项任务的具体内容,我到目前为止已经找到了:

  1. 我必须使用定义(获取和设置)权重的Item类 这些东西的价值
  2. 表arrayList保存
    的值和权重 item array stuffList
  3. 检查最大值(Greedy)是否合适 在包的容量内,并添加这些东西的索引 包arrayList中的table arrayList
  4. 返回包arrayList。
  5. 到目前为止我写的方法(似乎没有用):

    
    
    Public static ArrayList <Integer> greedySelection (Item[] stuffList, int Capacity)
    {
    		ArrayList<Integer> bag = new ArrayList<Integer>();
    		ArrayList<Integer> Table = new ArrayList<Integer>();
    
    		for(int i = 0; i < Table.size(); i++){
    			if(Table.get(i) < Capacity){
    				bag.add(i);
    				Table.remove(i);
    			}
    		}
    		return bag;
    }
    &#13;
    &#13;
    &#13;

1 个答案:

答案 0 :(得分:0)

您的代码有几个问题。您还没有专注于递归算法的基本原则:

  • 检查您是否&#34;击中了底部&#34;。
  • 如果是,请返回简单的结果。
  • 如果没有,则执行一次操作并重复剩余任务。

对于此例程,您需要弄清楚

  • 当你已经触底时#34;当你无法添加任何其他内容时。
  • 此时的简单结果是什么?只需退回现有的包?
  • 要重复,您可以添加最有价值的物品(贪婪),并将其放入包中,并用新的状态称呼自己。这种状况是什么?至少,您需要调整项目列表,行李包内容和剩余容量。

请注意,您的初始状态必须在调用程序中设置并传递到例程中。

这会让你感动吗?