日志的拆分和运行时间

时间:2013-05-24 15:47:20

标签: linked-list runtime

抱歉,我在之前的问题中犯了一个错误。因此,我没有得到我想要的答案。

老师告诉我们,每当你将某事物除以2时,运行时间很可能是log n。例如,如果我们将一个数组分成两个,每次遍历其中一个数组时,运行时间就是log n。但是,我们可能会遇到LinkedList的情况,我们可能很容易被误导。例如,我们可能有一个算法,通过从头部或尾部开始将列表的第n个元素设置为其他元素,以便具有小于n的运行时间。从逻辑上讲,我们可能认为运行时间是log n,但事实并非如此。这是为什么?你如何确定?

我们是否需要完全分裂才能获得log n的运行时间?当循环的最大运行时间为n / 2时,我认为说n的运行时没有任何逻辑意义。

1 个答案:

答案 0 :(得分:0)

我认为一些概念需要在这里进行一些改进,因为时间复杂度仅与算法有关,而与您正在操作的数据结构的大小无关。

  

老师告诉我们,每当你将某事物除以2时,运行时间很可能是log n。例如,如果我们将一个数组分成两个,每次遍历一个数组时,运行时就是log n。

现在,遍历一个数组,如

for (int i = 0; i < array.size; i++) {
    variable = array[i];
}

O(n)中运行:执行此类操作所需的时间与数组的大小呈线性关系。对于数组上的binary search之类的操作,您将有O(log n),但是您无法将此概念概括为所有数组操作,尤其是那些需要迭代数组的人。

现在,这句话

  

例如,我们可能有一个算法,通过从头部或尾部开始,将列表的第n个元素设置为其他元素,以使运行时间小于n。

让我相信你认为大O中使用的n和你称之为“第n个元素”的n是直接相关的。他们不是。在链接列表中,您转到元素n的唯一选择是转到列表的开头并按照您要查找的元素的链接(或者在双链表的情况下,转到开头或结尾)取决于您正在寻找的元素的位置,因此该操作具有O(n)的时间复杂度,即与集合的长度线性相关。