Time complexity 算法或程序的时间复杂度会随着不同的编程语言而变化吗?

Time complexity 算法或程序的时间复杂度会随着不同的编程语言而变化吗?,time-complexity,big-o,Time Complexity,Big O,在读一本《数据结构和算法》的书时,作者说,算法或程序的时间复杂度几乎永远不会随着各种编程语言的变化而变化。编程语言的什么时候或什么特性可能导致罕见的实例在时间复杂度的大o表示法中发生变化?好吧,这实际上取决于你所说的复杂度 让我们以备受诟病的泡沫为例。这基本上是时间复杂度。但是,这取决于需要执行的底层操作(比较和交换项)都是O(1) 您可能会争辩说,如果交换是一个O(n)操作(例如,它只能通过删除和插入来完成,并且后续的移位对于这两个操作都是必需的),那么复杂性就变成了O(n3) 顺便说一句,我

在读一本《数据结构和算法》的书时,作者说,算法或程序的时间复杂度几乎永远不会随着各种编程语言的变化而变化。编程语言的什么时候或什么特性可能导致罕见的实例在时间复杂度的大o表示法中发生变化?

好吧,这实际上取决于你所说的复杂度

让我们以备受诟病的泡沫为例。这基本上是时间复杂度。但是,这取决于需要执行的底层操作(比较和交换项)都是
O(1)

您可能会争辩说,如果交换是一个
O(n)
操作(例如,它只能通过删除和插入来完成,并且后续的移位对于这两个操作都是必需的),那么复杂性就变成了
O(n3)

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


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

通常,如果您没有一种故意减慢处理速度的编程语言,那么它就无关紧要了。此外,这取决于如何实现算法。例如,在函数式编程语言中,大多数数据都是不可变的,但使用fingertree之类的数据结构来执行高效的“更新”。例如,一台带有k个磁带的图灵机,最多可运行T(n)^2步数: