将伪代码转换为尽可能相似的实现

时间:2011-10-29 08:54:36

标签: java algorithm loops computer-science

当我从教科书中学习算法时,通常伪码的算法尽可能通用。

一个例子是,为了简化检查或边界情况或何时停止循环,使用了 - / +无穷大(当然是简化)。

例如:

current-sum= enter image description here

total-sum=0  
for i=x downto low  
 total-sum=total-sum+A[i]  
     if(total-sum > current-sum)  //so that in first iteration we will enter the if statement

etc

好的,当在编程语言中实现算法时,可以替换负无穷大,其值在我们的问题域中是不期望的。

我想知道是否有更通用的方法/技巧来表示在使用具体编程语言(例如Java)实现算法时,而不是: 例如
current-sum = -1;
current-sum = -10000;

例如,

这些值后来实际上可以作为域值有效。

5 个答案:

答案 0 :(得分:3)

  

我想知道在用具体的编程语言实现算法时是否有更通用的方法/技巧来表示

一般没有。无法将“负无穷大”表示为始终有效的整数。通常使用最小的整数值(在Java Integer.MIN_VALUE中)。但您需要查看特定算法以了解此解决方案是否有效。

因此没有通用/通用解决方案。


在您的示例中,Integer.MIN_VALUE可用于代替“负无穷大”。然而, 如果算法要求您使用Integer.MIN_VALUE作为实际值,则您不能 将其用作“无值”标记。 Integer.MIN_VALUE不能作为“负无穷大”代理的另一种情况是当你用它来算术时。 (Integer.MIN_VALUE + x == Integer.MIN_VALUE仅适用于x == 0。)

答案 1 :(得分:2)

您可以使用Integer.MIN_VALUE这是最小的32位可表示值(-2 ^ 31)。

或者,如果这实际上可能是您问题中的有效值,则可以扩展到64位并使用Long.MIN_VALUE

最后,boolean firstTime = true;始终可以||选择if第一次false条件,并立即将其设置为{{1}}。

答案 2 :(得分:1)

int current_sum = Integer.MIN_VALUE;

这为current_sum提供了int可以拥有的最小值, - (2 ^ 31)。

答案 3 :(得分:1)

通常,您使用适合您的数据类型的最大值来表示无穷大。

例如,如果您有+ inifity,则可以使用Integer.MAX_VALUE。 与-infinity相同,您可以使用Integer.MIN_VALUE

与其他数据类型相同。

答案 4 :(得分:1)

Integer.MIN_VALUEInteger.MAX_VALUE糟糕的解决方案,因为在某些情况下,它们可以成为您网域中的值。更谨慎地使用Double.NEGATIVE_INFINITY

例如Double.NEGATIVE_INFINITY + 2 = Double.NEGATIVE_INFINITY