什么是确定arraylist中全局最大值的好方法

时间:2013-01-24 11:29:51

标签: java algorithm

在我的程序中,我有一个循环,它计算整数值并将其一个接一个地放入arraylist。 computetd整数值越高,它就越好。 现在我想继续计算,直到看起来不会有更好的整数值。也就是说,当计算的整数在一个范围内减小时,或者它不再变化时。我正在考虑,将当前计算值与最后一个x进行比较(我需要考虑多少值?)如果它总是小于或等于最后x个元素中的任何一个,我就停止计算。但是通过这种策略,我不能保证这是全球最大值,而只是一个本地......

这样做的好策略是什么?

修改 我知道找不到全局最大值是无法保证的。 但我对该功能的行为有一点了解: 我已计算的值越多,全局最大值出现的可能性就越小。

2 个答案:

答案 0 :(得分:1)

嗯,似乎你需要假设一些启发式来评估何时停止。既然你不能说“我现在停下来,因为我发现了我的最大值”,你可以采用下列时装之一:

  • 保持当前最大值并将下一个值与当前值进行比较,如果值较小,则增加计数器。如果计数器达到X(您的参数),则停止
  • 使用概率分布函数,其概率为0为0,0为+ inf。这可以根据您的喜好量身定制。然后,您只需增加查看值的数量或较小值的计数器,并使用该计数器估算使用该函数的概率。如果概率< X(再次你的参数)你停下来。

希望这会给你一些想法

答案 1 :(得分:1)

Reservoir Sampling。将值存储在较小的数组 A 中,该数组表示计算的整数值中的随机x样本。现在,对于一系列计算值,您可以将每个值与数组 A 中的值进行比较,如果找到递减趋势,则可以停止。这可以保证您处理全局最大值而不是本地。