解释背包任务中的无穷大

时间:2016-03-13 16:55:22

标签: java algorithm knapsack-problem

我们有一个递归公式的算法,对于渐近O((n ^ 2)* Vmax)的背包问题,其中n - 项目数,Vmax - 最大值: A [i,x] - 达到值> = x所需的总大小,同时仅使用前i个项目。 A [i,x] = min {A [i-1,x],A [i-1] [xv [i]] + w [i]},其中A [i-1] [xv [i]]如果v [i]> = x,则= 0;基本情况:如果x == 0且加上inf,则[0,x] = 0。否则;

对于+ inf。在java中我使用Integer.Max_VALUE。算法运行时有一个调用:A [0,1],A [0,2] ......矩阵填充负数(int溢出) 我如何能够提出无穷大和无穷大以及数字?

2 个答案:

答案 0 :(得分:0)

如果你没有无限存储无穷大,只是为了比较而使用它,你可以使用双无穷大,它大于int和long max value。

Double.POSITIVE_INFINITY

如果您正在存储数字,并且仍然溢出,则应将数字存储在数组中的长度,然后将其与整数最大值进行比较,这样您就会知道数字大于最大值而没有溢出。其缺点是执行速度较慢,内存消耗较大。

答案 1 :(得分:0)

如果您知道输入的最大值,请尝试使用略大于该值的值。这应该可以解决问题。