我的背包算法有问题。说实话,我不知道出了什么问题。当我使用程序一次,所有工作都错了,但是当我在循环中使用我的程序(进行测试)时,我遇到了很多问题。
例如:
文件中的重量/ Val:100
最大背包容量:1000
第一次迭代:
最大利润:2597
由此产生的重量:994/1000
它很好,但现在是另一个迭代
第二次迭代:
最大利润:2538
产生的重量:1004/1000 < - 并且有我的问题,超过我的最大上限。
第3,第4个是okey,然后第5个是错的(1355/1000),依此类推。
我的功能可能出现问题:
void intoKnapsack(int k, float actual_profit, float actual_weight)
{
if (actual_weight + weight[k] <= cap)
{
tmp[k] = 1;
if (k <= number_items)
intoKnapsack(k + 1, actual_profit + value[k], actual_weight + weight[k]);
if (((actual_profit + value[k]) > final_profit) && (k == number_items))
{
final_profit = actual_profit + value[k];
final_weight = actual_weight + weight[k];
for (j = 0; j <= k; j++)
knap[j] = tmp[j];
}
}
else if ((bound(actual_profit, actual_weight, k) >= final_profit))
{
tmp[k] = 0;
if (k <= number_items)
intoKnapsack(k + 1, actual_profit, actual_weight);
if ((actual_profit > final_profit) && (k == number_items))
{
final_profit = actual_profit;
final_weight = actual_weight;
for (j = 0; j <= k; j++)
knap[j] = tmp[j];
}
}
}
有人可以帮我解决问题吗?
答案 0 :(得分:0)
好的,所以当我只准备一次相同的N(如上面的例子中的100)那么它工作正常,但是当我在循环中这样做时:
void algorytm::sort() {
int a;
int b;
float c;
for (i = 0; i < number_items; i++)
factor[i] = (float) val[i] / (float) weight[i]; //to sort from best to worst
for (i = 0; i < number_items - 1; i++) {
for (j = i + 1; j < number_items; j++) {
if (factor[i] < factor[j]) {
c = factor[i]; //
factor[i] = factor[j];
factor[j] = c;
a = val[i]; //
val[i] = val[j];
val[j] = a;
b = weight[i]; //
weight[i] = weight[j];
weight[j] = b;
}
}
}
}
所以当我自己做例如写(50),然后在同一个程序写(51)等等它工作得很好,但是当我写(50),然后另一个写(50),然后我有错误的算法。
也许当我进行排序时,在清除Knapsack之前它在另一个循环中不起作用,但另一方面我首先需要进行排序。
有我的排序功能
create-react-app your-new-app-name