排序算法效率



我想问一个一般性的问题。

我正在比较C、Java和Haskell上排序的运行时间。哪种语言,如果提供了相同级别的优化(当然,可能会有所不同),应该运行时间最快,哪种语言(理论上)运行时间最慢?他们都将阅读相同的文本文件,并按字母顺序对单词进行排序。如果我能得到一个深入的解释,那将是非常好的,非常感谢。

谢谢~

对此没有"理论"答案。没有可靠的"理论"可以让你做出准确的预测。

此外,对程序语言性能进行"理论"比较的整个想法是荒谬的。性能比较是关于实际的(非理论的)程序,这些程序是由在实际的(无理论的)机器上运行的实际的(有理论的)编译器在实际的数据集上编译的。


如果你要求根据典型的应用程序、典型的编译器、同等水平的程序员技能以及所需的程序员时间进行"经验法则"猜测,那么:

  • C可能是最快的
  • Java的速度可能是C的1/3到1倍
  • Haskell的速度可能是Java的1/2到1倍

(根据"基准游戏"网站截至2015年2月22日的说法。)

但是。。。对于某些应用程序来说,这可能有所不同,这在很大程度上取决于编译器的成熟度和程序员在各自语言中的技能。

除了。。。一个成熟的软件工程师/项目经理不会仅仅为一个项目选择能给出最快结果的编程语言。其他因素通常比原始速度更重要。

从理论上讲,它们都将执行相同的算法,所以您实际上只是在处理不同语言实现的变幻莫测,这是一个实际的问题,而不是理论上的问题。

回答实际问题的唯一方法是选择具体的实现(语言、编译器、体系结构、程序、输入等),并将它们相互全面地进行基准测试。

引用@coobird的答案,

C没有什么特别之处。这就是它速度快的原因之一

支持垃圾收集的较新语言,动态打字和其他设施,使程序员编写程序。

问题是,存在额外的处理开销,这将降低应用程序的性能。C没有这意味着没有开销,但这意味着程序员需要能够分配内存并将其释放到防止内存泄漏,并且必须处理变量。

也就是说,许多语言和平台,如Java(及其JavaVitual Machine)和.NET(及其公共语言运行库)多年来凭借诸如"及时"之类的冒险改进了性能从字节码到实现更高的性能。

最新更新