(加倍)链表get()的复杂性

时间:2014-01-15 08:50:53

标签: algorithm data-structures complexity-theory

为什么在双链表中get(index)的复杂度等于O(n)而不是O(1)?为什么它不像数组O(1)?是因为我们必须遍历以前的节点来获取一个节点吗?

2 个答案:

答案 0 :(得分:3)

这是定义。如您所知,要到达列表中的第i个元素,必须遍历所有先前的项目。

作为练习,请为自己实施链接列表。

答案 1 :(得分:2)

是的,必须“遍历以前的节点才能获得一个”正是它。

在链接列表中,要查找元素#n,您可以使用以下内容:

def getNodeNum (n):
    node = head
    while n > 0 and node != NULL:
        n = n - 1
        node = node.next
    return node

数组为O(1)的原因是因为所有元素都布置在连续的内存中。要获取元素42的地址,只需将42乘以元素大小,然后添加数组基数。元素编号3的成本与元素编号999的成本相同。

你不能用列表来做,因为元素在内存中不一定是连续的,因此你必须走列表才能找到你想要的那个。因此,找到3号元素的成本实际上远低于查找元素号999的成本。