【问题标题】:Does time complexity for an algorithm or program ever change with different programming languages?算法或程序的时间复杂度是否会随着不同的编程语言而改变?
【发布时间】:2020-08-08 23:41:59
【问题描述】:

正在阅读一本数据结构和算法的书,作者说算法或程序的时间复杂度几乎永远不会在各种编程语言之间发生变化。编程语言的什么时候或什么特性可能会导致这种罕见的实例在时间复杂度的大符号上发生变化?

【问题讨论】:

  • 通常,如果您没有一种故意减慢处理速度的编程语言,那也没关系。此外,这取决于您如何实现算法。例如在函数式编程语言中,大多数数据是不可变的,但是使用像 fingertree 这样的数据结构来执行有效的“更新”。例如,带有 k 个磁带的图灵机最多只能运行 T(n)^2 个步骤:users.cs.duke.edu/~reif/courses/complectures/books/AB/…

标签: time-complexity big-o


【解决方案1】:

嗯,这真的取决于你所说的复杂性。

让我们以备受诟病的冒泡排序为例。这基本上是O(n<sup>2</sup>) 的时间复杂度。但是,这依赖于这样一个事实,即需要完成的底层操作(比较和交换项目)都是O(1)

可以争辩说,如果交换是一个O(n) 操作(例如它只能通过删除和插入来完成,随后的移位将是这两个操作所必需的) ,复杂度变为O(n<sup>3</sup>)

顺便说一句,我知道没有这样的语言可以做到这一点,但是很容易设想一种非常简单的脚本语言,其中所有数组都是关联数组(以字符串作为键,并且未排序)并且对给定元素的查找是因此是顺序搜索。

您可以同样争辩说,底层操作与算法的复杂性无关,它们只是底层限制引入的额外成本.我倾向于使用这个定义,因为您讨论的是算法本身的复杂性,而不是它如何在不同的底层系统上工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    相关资源
    最近更新 更多