根据 维基百科上的文章链表, 插入中间的一个链接清单被认为是O(1)。我认为这将是O(n)。不你需要找到节点,这可能是近结束的名单?

做这种分析并不考虑发现的节点工作(尽管它要求),只是插入本身?

编辑:

联列出了具有若干优势阵列。插入一个元素在特定的点上的一个列表是一个定时的操作,而插入一系列可能需要移动一半的元素,或者更多。

上述声明是一个小小的误导我。正确的我,如果我错了,但我认为,结论应当是:

阵列:

  • 找点插入/删除O(1)
  • 执行插入/删除O(n)

联清单:

  • 找点插入/删除O(n)
  • 执行插入/删除O(1)

我想的只是时间你就不会有发现的位置是如果你保持某种形式的针对它的(如头部和尾部在某些情况下)。所以我们不能断然地说,联列出了总是打败阵列,用于插入或删除的选择。

有帮助吗?

解决方案

你是正确的,该条款认为"索引"作为一个独立操作。所以插入本身就是O(1),但是达到这一中点是O(n)。

其他提示

插入本身是O(1)。节点发现O(n)。

没有,当你决定的,你想要插入,这就假定你已经在中间的迭代过该列表。

操作上的联系名单往往是在这样一种方式,他们并不是真正视为一个通用的"清单",但作为一个集合点--认为的本节点本身作为的迭代进你的主循环。所以作为你戳通过你通知的一部分业务逻辑,一个新的节点需要加(或一个老删除)而你这样做。你可以增加50节点在一个单一的迭代,每个节点只是O(1)时取消两个相邻的节点,并插入新的一个。。

编辑:男人,你键入一个第二段和所有的一个突然的而不是被第一个响应你在第5说同样的事情作为第一个4!

为便于比较,与一系列,这是什么意图表示,它O(1)因为你没有把所有的项目后,新的节点。

因此是的,他们是假设你已经有所指认的节点,或者获得的指针是微不足道的。换句话说,问题是表示:"给点在X, 是什么代码插入后,这一点?" 你开始在的插入点。

插入一个链表是不同的迭代。你是不是定位的项目,您重指针,以把项目。不要紧,如果要插入附近的前端或接近尾,插入仍然涉及指正被重新分配。它将取决于它是如何实施的,当然,但是那是力量的名单-你可以插入容易。访问通过指数是一系列照。对于列表,但是,它将通常被O(n)找到nth项目。至少这是我记得从学校。

因为它不涉及任何循环。

插入的是这样的:

  • 插件
  • 链接到以前的
  • 链接到下一个

这是恒定时间在任何情况下。

因此,插入n素后,另一个是O(n)。

做这种分析并不考虑发现的节点工作(尽管它要求),只是插入本身?

你得到了它。插入一个定点的假定你已经举行一个指向该项目要在其后插入:

InsertItem(item * newItem, item * afterItem)

插入O(1)一旦你知道你要去哪里把它。

不,它不账户进行搜索。但如果你已经有了举办的一个指向一个项目中的列表中插入在这一点上是O(1)。

如果你有搜索它,你就会加上的时间用于搜索,这应该是O(n)。

这篇文章是关于比较阵列具清单。找到的插入位于这两个阵列,并列出为O(N),因此该条忽略它。

O(1)根据这一事实,你有一项在那里你将插入新的项目。(之前或之后)。如果你不要,其O(n)因为你必须找到该项目。

我认为这只是你选择什么样的数O()符号。在这种情况下,插入正常操作计数是复制的运作。有一个数组,插入中间涉及复制一切的位置在存储器。与联的清单,这将成为设置两个指针。你需要找到位置,无论什么要插入。

如果你有参考节点插入后的运作是O(1)相联系的名单。
对于一系列它仍然是O(n)因为你必须将所有consequtive节点。

最常见的情况下可能插入在开始时或结束时的列表(和结束的列表中可能需要有时间可以找到).

相反,插入项目在开始时或结束的一系列(其需要调整阵列,如果它结束时,或调整和移动的所有要素,如果它在开始时).

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top