2011-10-29 20 views
0

当我从教科书中学习算法时,通常伪代码中的算法尽可能通用。将伪代码转换为尽可能相似的实现

一个例子是,为了简化检查或边界情况或何时停止循环,正在使用occusionally -/+ infinity(作为课程的简化)。

例如:

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;

其中例如这些值可以在以后居然变得域值有效。

+2

我不明白伪代码在做什么或为什么。这使翻译很难。 –

+0

伪代码是计算最大子阵列问题算法的一部分。在这部分中,它计算数组中的总和并使用-infinity作为起点。如果您认为有意义,我可以发布更多的伪代码 – Cratylus

回答

1
int current_sum = Integer.MIN_VALUE; 

这给出current_sum最小值int可以有, - (2^31)。

1

通常情况下,您使用的数据类型最大值代表无穷大。

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

这与其他数据类型是一样的。

2

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

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

最后,总是有boolean firstTime = true;的选项,你||第一次遇到你的if条件,并立即将其设置为false

1

Integer.MIN_VALUEInteger.MAX_VALUE坏解决方案,因为在某些情况下,他们可以成为你的域值。更仔细地使用Double.NEGATIVE_INFINITY

例如Double.NEGATIVE_INFINITY + 2 = Double.NEGATIVE_INFINITY

+0

这很有趣,我从来不知道这个属性。凉。 – Cephron

3

我在想,但如果有一个更通用的方式/技巧在一个具体的编程语言

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

因此没有通用/通用解决方案。可以用Integer.MIN_VALUE代替“负无穷”。但是,如果算法要求您使用Integer.MIN_VALUE作为实际值,那么您不能使用也可以使用作为“无值”标记。 Integer.MIN_VALUE不能用作“负无穷”代理的另一种情况是当您使用它来进行算术运算时。 (Integer.MIN_VALUE + x == Integer.MIN_VALUE只适用于x == 0。)

+0

+1用于扩大治疗一般问题 – Cephron