【发布时间】:2021-01-16 19:19:55
【问题描述】:
底层哈希算法对密钥的每个字符进行哈希处理,我理解这是 O(n),其中 n 是密钥的长度。
当哈希表的底层方法之一为 O(n) 时,如何将其视为 O(1)?我认为最坏情况的复杂性优先。
【问题讨论】:
-
取决于你做什么。插入
n元素,当然需要O(n)操作。但是随后检索单个元素在O(1)中,因为您只需要一个哈希操作。密钥的长度与复杂度类无关。 -
@derpirscher 我一定理解错了。插入一个元素时,hash 方法使用循环来更新键中每个字符的哈希值。循环运行的次数与键中的字符数一样多,因此哈希方法肯定会运行 O(n) 次,即使它是单个哈希操作。我在这里错过了什么?
-
首先
n是map中的元素个数,与key的大小无关。其次,O(n) 表示法是一种理论结构。这里重要的是比较或散列操作的数量。散列一个键被算作一次操作,不管键的大小。 -
@derpirscher 因此,无论该方法的时间复杂度如何,对另一种方法的调用总是被计为一个步骤?
标签: time-complexity big-o