编译器和语言的选择是否会影响时间复杂性?

时间:2012-07-30 20:35:15

标签: algorithm math compiler-construction time time-complexity

当人们谈论使用计算机科学策略解决数学问题所涉及的时间复杂性时,编译器,计算机或语言的选择是否会影响单个等式可能产生的时间?在x86机器上运行汇编算法比在x64机器上创建相同的公式产生更快的结果吗?

编辑:这个问题从原来的分支出来,如果编译器和语言的选择无关紧要,那么算法本身是其时间复杂度的唯一决定因素吗?

2 个答案:

答案 0 :(得分:4)

渐近分析的全部意义在于我们不必考虑由不同的编译器,体系结构,实现等引入的细微差别。只要算法实现的方式遵循时间分析中使用的假设,其他因素可以安全地忽略。

我主要谈论的是非平凡的算法。例如,我可能有代码:

for(int i=0; i<N; i++){}

标准分析会说这段代码的运行时间为O(N)。然而,一个好的编译器会意识到这只是一个nop并优化它,留下你O(1)。但是,编译器还不够聪明(尚未)对任何非平凡的事情做任何渐近重要的优化。

某些分析假设不成立的示例是您没有随机存取内存。因此,您必须确保您的编程平台满足所有这些假设。否则,必须进行不同的分析。

答案 1 :(得分:1)

除非你使用某些特殊语言,例如brainfuck,它没有内置函数用于常见操作(+, - ,/,*,...),时间复杂度不依赖于语言。

但是,如果您使用tail-rec函数,则空间复杂性取决于编译器。