【问题标题】:Converting pseudocode to implementation as similar as possible [closed]将伪代码转换为尽可能相似的实现[关闭]
【发布时间】:2011-10-29 08:54:36
【问题描述】:

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

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

例如:

current-sum=

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;

例如,这些值在以后实际上可能成为有效的域值。

【问题讨论】:

  • 我不明白伪代码在做什么或为什么。这使得翻译变得困难。
  • 伪代码是计算最大子数组问题的算法的一部分。在这部分中,它计算数组中的总和并使用 -infinity 作为起点。如果您认为这有意义,我可以发布更多的伪代码

标签: java algorithm loops computer-science


【解决方案1】:

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

一般不会。没有办法将“负无穷大”表示为始终有效的整数。经常使用可能的最小整数值(在 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

【讨论】:

    【解决方案3】:
    int current_sum = Integer.MIN_VALUE;
    

    这给 current_sum 一个 int 可以具有的最小值,-(2^31)。

    【讨论】:

      【解决方案4】:

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

      例如,如果你有 +inifity,你可以使用Integer.MAX_VALUE。 和-infinity一样,可以使用Integer.MIN_VALUE

      其他数据类型也是如此。

      【讨论】:

        【解决方案5】:

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

        例如Double.NEGATIVE_INFINITY + 2 = Double.NEGATIVE_INFINITY

        【讨论】:

        • 这很有趣,我从来不知道那个属性。酷。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-07
        • 2013-03-18
        • 1970-01-01
        • 1970-01-01
        • 2012-02-22
        相关资源
        最近更新 更多