|
|
1
3
假设你说的是时间复杂性。
散列表的时间复杂度可以是好的,也可以是差的,这取决于散列表的填充方式。 在最好的情况下,每个bucket最多有一个条目,通过key访问是O(1)。这是哈希表通常引用的复杂性。 在最坏的情况下,每个键都有相同的哈希值,按键访问有效地搜索一个列表,从而导致O(n)行为。 现实世界中的使用通常介于这两个极端之间,希望更接近O(1)。 你的另一个被接受的答案 question |
|
2
0
阿尔伯特,你的问题的关键是,没有一个哈希表,而是有很多哈希表。 这里问题的核心是一些操作的big-O复杂性。平均来说,哈希表应该产生O(1)复杂度来查找一个项。二叉树的平均结果是O(logn)。 就速度而言,它实际上取决于N的大小,因为这些都是渐进的复杂性,因此当N很大(比如百万)时,它们代表数量级,而对于小集合,实际速度可能有很大的不同。 因此,与其试图详细阐述你的问题,我认为你应该更好地掌握哈希表。快速概述:
阅读维基百科上的文章,它将阐述这些观点以及更多。 |
|
3
0
如果表被广泛链接(即已满),那么探测过程将花费更多的时间来解决冲突。在理论上最坏的情况下,所有值都将映射到同一个哈希键,哈希函数将花费所有时间跟踪链,即O(n)。 在实践中,除非你的散列函数真的被破坏了,否则你应该得到O(1)来满足所有的实际目的(注意,对于较小的表,你可以取一个较大散列值的模)。如果您有一个可以扩展的基于哈希表的容器,那么它可能会执行扩展操作,这将非常昂贵(1)。 树将是O(logn)而不是O(1),尽管如果树是不平衡的,那么搜索也可以变成有效的线性操作。请注意,这在某些常见场景中是一个问题,例如按键顺序插入节点时(假设对基于树的集合执行浅层复制操作)。通常,使用诸如红黑树之类的平衡树算法来保持树的效率。树的另一个优点是可以按顺序遍历树并生成键的有序列表,而不必显式地对它们进行排序。
|
|
|
4
0
实现可以很容易地减少“超大”haskey。例如,它可以使用以下结构:
当然,在实践中,HashSize不是一个常数。如果插入的元素超过几千个,则会导致性能急剧下降。而且,如果元素较少,它会占用相当多的内存。因此,实现用这个内部参数做一些聪明的事情。因此,每个bucket的值数是O(1),找到正确的bucket也是O(1)。这就是这样一个实现如何检索O(1)中的任何值。 |
|
|
bairog · 从按属性筛选的对象数组字典中创建值数组 10 月前 |
|
|
prayner · 更新嵌套字典包含列表中的项 10 月前 |
|
|
KGB91 · 初始化一个用C存储函数的字典# 10 月前 |
|
|
Pavel Foltyn · 如何在C中生成逆字典# 11 月前 |
|
|
user24242514 · 将嵌套查询字符串请求转换为字典 11 月前 |
|
|
Pernoctador · Python映射可以复制吗?我需要参考地图 11 月前 |
|
|
masher · 如何将字典键的值直接赋值给另一个变量? 1 年前 |
|
|
Lyapunov1729 · 如何按项目连接字典 1 年前 |