【发布时间】:2014-01-26 03:22:12
【问题描述】:
我正在研究算法,但我不了解恒定时间算法。
这意味着什么以及与线性时间算法有何不同。
谢谢,
【问题讨论】:
-
时间成本不会随着输入数据大小的增加而增加。
我正在研究算法,但我不了解恒定时间算法。
这意味着什么以及与线性时间算法有何不同。
谢谢,
【问题讨论】:
恒定时间只是意味着无论函数输入的大小如何,成本始终保持不变。
这是一个简单的例子,假设你有一个名为deleteHead的函数,当给定链表中的一个节点时,它会返回下一个:
function deleteHead(list) {
if(list == null)
return null;
return list.next;
}
不管你给这个函数的列表有多大(十个或十亿个),它总是只做一件事情,使它成为一个常数时间算法 O(1)。
相比之下,线性算法必须检查链表的所有 N 个元素以执行一些计算,这意味着处理更大的列表需要更多时间。传统上,如果您不维护结束指针,则将元素添加到链表的末尾是线性时间。
【讨论】:
这可以在大多数基础计算机科学书籍中找到。
它只是描述了一个输入长度之间的依赖关系 算法或对象的大小(取决于应用程序)和 一次手术所花费的时间。例如。使用列表需要固定数量的步骤来添加 前/后的对象,无论列表有多大。
在列表中查找特定项目需要线性时间(在最坏和平均的情况下)- 如果列表的长度是原来的两倍,则必须查看两倍的项目才能找到要查找的项目
【讨论】:
对于恒定时间算法,执行时间与输入的大小无关。对于线性时间,执行时间随输入大小线性增加。
【讨论】:
当更改恒定时间算法的输入大小时,运行时不会增长。
例如线性算法,当改变输入大小时,运行时间(线性)增长。
对于更糟糕的运行时间,比如指数,运行时间在改变输入大小时呈指数增长。
【讨论】: