哈希表
克里斯蒂安Takvam和Jimin Khim做出了贡献
的哈希表最常用的数据结构是用来实现的吗关联数组.它的特性 平均搜索时间,使其成为用于缓存、索引和其他时间关键操作的有效数据结构。
最小的实现
哈希表通过使用数组固定大小。要插入键/值对,首先对键进行散列。由于哈希值只是一个大整数,因此哈希值对数组的大小取模,生成一个索引。然后将键/值对插入到桶指数。
桶是必需的,因为生日问题说哈希冲突是不可避免的;因此,不是每个索引存储单个键/值对,而是存储一桶键/值对。在最基本的实现中,桶是通过使用实现的链表.
注意,bucket数组的大小并不限制可以存储在哈希表中的键/值对的数量。在上面的动画中,桶数组的长度是6,但是插入了8个键/值对。对的数目与桶的数目之比称为负荷系数.
随着载重系数的增加,碰撞更有可能发生。随着越来越多的冲突发生,性能下降。在绝对最坏的情况下,一个哈希表只有一个桶,哈希表的行为就像一个链表 搜索、插入和删除时间。
渐近的复杂性
参见:大O符号.
平均 | 最糟糕的 | |
空间 | ||
搜索 | ||
插入 | ||
删除 |
Python实现示例
这个示例是一个哈希表的最小实现,它的键必须是字符串。它使用DJB2 (xor
变体)作为其哈希函数。桶是通过链表实现的。(注意Python的内置Dictionary类型是用哈希表实现的。此示例实现纯粹用于学术目的。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
|
试一下:
1 2 3 4 5 6 7 8 9 10 |
|
12 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
引用:哈希表。Brilliant.org.检索从//www.parkandroid.com/wiki/hash-tables/