为什么这里没有为哈希表定义Big O?

时间:2017-10-18 17:07:56

标签: computer-science

在此备忘单中,访问哈希表的平均时间复杂度列为N / A.

我很好奇为什么。由于散列表主要是带有循环的数学,我认为它将像其他操作一样是O(1)...搜索,插入,删除。

http://bigocheatsheet.com/

1 个答案:

答案 0 :(得分:1)

在该表中,访问'列指的是按索引访问给定元素的时间。这就是为什么在数组中,访问被描述为O(1) - 返回数组的第i个元素是一个恒定时间操作。类似地,对于链接列表,它是一个O(n)操作 - 如果你有一个链表,并希望索引为i的项目,你需要从链接跳转到链接,i次。

现在,在哈希表(字典,哈希图等)中,我们没有谈论索引i的'元素。 - 我们根本不谈索引!这就是这个表的含义,即将NA作为“访问”的值。用于哈希表。我们根本不做(在这里使用的意义上)'访问'对哈希映射的操作。

也许一个明确的例子可能有所帮助。

myLinkedList = ['red','blue','orange']

myArray = ['black','white','green','yellow']

myHashMap = {'address':'10 wall st', 'gender':'male'}'

在前两个示例中,我们可以访问给定索引处的元素。

即:

myLinkedList[1] == 'blue'myArray[0] == 'black'

但我们无法通过索引访问哈希映射。

在此实例中未定义

myHashMap[0]!所以'访问'对于哈希映射是NA。

但是,在此上下文中,我们具有等效操作:按键搜索。

即:

myHashMap['address'] == '10 wall st'

O(1)操作。

你是否因为你不知道数据结构内部问题而提出这个问题(在这种情况下,要学习它们,这是值得的),或者如果你只是对那个备忘单上的术语感到困惑,我希望这个答案有所帮助。