在具有 O(sqrt(n)) 复杂度的链表中删除/插入/检索元素的算法

标签 algorithm linked-list

我们的任务是实现一个链表类来执行以下操作,时间复杂度为 O(sqrt(n)):

  1. 在第i个位置插入一个元素
  2. 删除第i个元素
  3. 检索列表的第 i 个元素。

我发现了一些数据结构,比如跳表。但是时间复杂度应该是O(sqrt(n))。

有人可以帮忙吗?

最佳答案

您是否在理解大 O 表示法时遇到了一些困难?

请记住,大 O 的意思是“上限”。

数学上,f(x) = O( g(x) ) 如果 f(x) <= C ( g(x) ) .

也就是说,我们可以说 f(x) is O(x^2)f(x) is O(x^1000000000) ,因为 O(x^2)O(x^1000000000)都是上限(尽管不一定是“好”上限)。

现在,正如您研究的那样,跳过列表是 O(log n) 时间。

这意味着因为log(n) < sqrt(n) , 我们可以说跳过列表也是O( sqrt(n) ) .

关于在具有 O(sqrt(n)) 复杂度的链表中删除/插入/检索元素的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4072691/

相关文章:

找到一个数字的算法,其中 4 和 7 的乘积在给定范围内最大

algorithm - 谷歌如何知道我输入的 redflower.jpg 我指的是红花?

c++ - 链表头指针在传递给函数 c++ 时发生变化

java - java中的链表删除

c++ - 相同的代码在在线 IDE 和本地 IDE 中给出不同的结果

java - 单调对 - Codility

java - 用于计算距离的修剪集合

java - 二维平面中的 K 最近邻

c++ - Qt QLinkedList 对象追加问题

c++ - C++中的我的反向列表功能不起作用