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



在这个备忘单中,访问哈希表的平均时间复杂度列为N/a。

我很好奇为什么。由于哈希表大多是数学性质的,没有循环,我认为它和其他运算一样是O(1)。。。搜索、插入、删除。

http://bigocheatsheet.com/

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

现在,在哈希表(字典、hashmap等)中,我们不谈论"索引i处的元素"——我们根本不谈论索引!这就是该表将NA作为哈希表的"访问"值的含义。我们只是不在hashmap上执行(在这里使用的意义上)"访问"操作。

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

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

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

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

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

Ie:

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

但我们不能通过索引访问哈希图。

此实例中未定义myHashMap[0]!因此,"访问"对于哈希图来说是不适用的。

然而,在这种情况下,我们有等效的操作:按关键字搜索。

Ie:

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

O(1)运算。

无论你问这个问题是因为你不知道数据结构的内部结构(在这种情况下,一定要学习它们,这是值得的),还是如果你只是被备忘单上的术语弄糊涂了,我希望这个答案能有所帮助。

最新更新