gpt4 book ai didi

c - Knapsack - 编程时无法理解某个部分

转载 作者:太空宇宙 更新时间:2023-11-04 03:24:30 24 4
gpt4 key购买 nike

最近,我正在尝试研究和实现背包问题(我几年前研究过)。所以我可以理解并有最优解的想法,比如如果背包值(value)是 100,并且有特定的权重,比如 40、60、100。那么最优解将是 100 来填充或相当于背包值(value)。我停留在编程的一个部分,尽管尝试使用教程进行递归,但无法弄清楚这实际上是如何工作的。让我评论一下我已经理解:

/*A function or method to determine the max number*/
int max(int a, int b)
{
return (a > b) ? a : b;
}

/*Knapsack function or method with parameters knapsack value - w, weights, amounts, number of elements*/
int Knapsack(int w, int weight[], int amt[], int n)
{
if(n == 0 || w == 0)
{
return 0;
}

if(weight[n - 1] > w) /*If the nth value is greater than the knapsack value, then there will no optimal solution*/
{
return Knapsack(w, weight, amt, n - 1);
}
else
{
return max(amt[n - 1] + Knapsack(w - weight[n - 1], weight, amt, n - 1), Knapsack(w, weight, amt, n - 1)); /*Stuck in this section - It returns perfect solution but unable to understand how it's working. Debugged not getting the answer as expected*/
}
}

int main(void)
{
int amt[3], weight[3], w, i, elements, n;

/*printf("Enter number of elements: ");
scanf("%d", &elements);*/

printf("Enter the weight and amount individually up to 3: ");

for(i = 0; i < 3; i++)
{
scanf("%d %d", &weight[i], &amt[i]);
}

printf("\nEnter the knapsack value: ");
scanf("%d", &w);

n = sizeof(amt) / sizeof(amt[0]);

printf("%d %d", Knapsack(w, weight, amt, n), n);

return 0;
}

如果有人有时间简要解释一下我无法理解的编程中的工作过程,我将不胜感激。甚至尝试为其使用动态编程。却显得文静复杂。这是研究背包问题的完美解决方案吗:

Knapsack Problem

最佳答案

我试图为用户输入所有重量、数量、w 值后发生的调用顺序绘制一个树结构。

在我的示例中,以下是变量的值,

重量[0]=18 数量[0]=17 重量[1]=14 数量[1]=15 重量[2]=15 数量[2]=10

W=20(背包容量)根据程序 n 的值为 3。

对于来自 main 的第一次调用,值将为 K(w, W[], a[], n)====> K(20,w[], a[], 3)然后 a[n-1]==>a[2]==>10w[n-1]==>w[2]==>15 等等...值改变

注意:请记住每次调用函数后值的变化。还要密切关注 IF 条件。

请忽略手写。谢谢。

enter image description here

当我们处理递归问题时,我们需要记住我们正在处理 STACK,因此是 LIFO(后进先出)。

在递归函数的情况下,最后调用的函数将首先返回结果,而调用 First 的函数将最后返回结果。如果您看到树结构,您就会明白您的问题。谢谢。

关于c - Knapsack - 编程时无法理解某个部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42423177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com