二维数组和链表的Big-O

Big-O for 2 dimensional array and Linked list

我用9个链表做了一个游戏,另外1个链表得到了另外9个链表的所有地址。因此,通过使用链表,类似于二维数组。

我正在尝试计算我的数据结构适合且优于二维数组的 Big-O,但我担心三件事。

  1. 2 维数组 a[10][10] 存在,当我插入 a[5][5]=1 是 O(1)?

  2. 一个链表存在N个节点,那么为了找到最后一个节点是O(N)吗?

  3. 正如我之前所说,我制作了一个链表,看起来像 二维数组,每个链表有 N 个节点。 如果我找到每个链表的最终节点并将其移动到每个头。是 O(N^2) 吗?

你说的第一个是对的。 你对第二个也是正确的。 现在,关于第三个。你有 9 个链表。访问链表的最后一个节点是 O(n)。因此,访问您拥有的 9 个链表中每一个的最终节点仍然是 O(n),因为您的链表数量是恒定的。

2 dimensional array called a[10][10] exists, when I insert a[5][5]=1 is it O(1)?

不是,是O(行索引+列索引),因为需要遍历找到一个linked list,然后通过又一次遍历。

A linked list exists with N nodes, then in order to find the final node is it O(N)?

这取决于实施。有的特殊的link到最后一个节点,然后就是O(1)。单 linked 列表确实是 O(n).

As I said before, I've made a linked list which looks like a 2 dimensional array and each linked list has N nodes. If i find each linked list's final node and moves it to each head. Is it O(N^2)?

这取决于前一点:O(n)O(n^2).