【问题标题】:Complexity of if statementif 语句的复杂性
【发布时间】:2013-03-16 19:17:47
【问题描述】:

我想知道遵循 if 语句的复杂性

if (isTrue()) //case 1

VS

if(isTrue()==true) //case 2

而isTrue定义为

boolean isTrue(){
//lots of calculation and return true false based on that.
 return output;
}

我在想,if (isTrue()) 的复杂性低于if(isTrue()==true),因为在案例 2 中需要对等号进行额外比较。

空间复杂度如何?

有什么不同的想法吗?

【问题讨论】:

  • 如何进行额外比较?
  • 因为编译器必须检查函数输出的右侧值,然后使用 if 条件进行测试
  • @minhaz 大多数编译器可能会完全优化那些ifs,因为isTrue 只会返回true
  • @minhaz if (foo)if (foo == true) 之间没有区别。 if (foo) 仍然需要检查 foo 是否属实。
  • @DaveNewton 这不正确。按照您给出的相同逻辑,'if (foo == true)' 必须检查 'foo == true' 是否为真。预计编译器会优化掉所有多余的杂物,但这不是一回事。

标签: java c complexity-theory time-complexity space-complexity


【解决方案1】:

它们在速度/空间上都相同。但是第二种方式对于 C/C++ 程序员来说很奇怪。

不同的是,第二种方式可读性较差。

【讨论】:

  • 对 Java 程序员来说也很奇怪。
【解决方案2】:

它们是等价的。并且在进行全局优化时会完全移除条件。

【讨论】:

  • 如果编译器做也增加处理的优化对吗?
【解决方案3】:

如果您或其他人重新定义true 的值,则第二种情况(检查==true)可能会出现问题。

假设我们有以下 C 代码:

#define true 2

bool isEqual(int a, int b)
{
    return (a == b);
}

if (isEqual(5, 5)) {
    printf("isEqual #1\n");
}

if (isEqual(5, 5) == true) {
    printf("isEqual #2\n");
}

这段代码的输出将是

isEqual #1


因此,省略 ==true 的较短形式更可取,不仅因为它可以减少冗长的代码,而且还因为您可以避免此类潜在问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 2017-05-28
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多