mirror of
https://github.com/krahets/hello-algo.git
synced 2025-07-13 02:38:34 +08:00
deploy
This commit is contained in:
@ -15,7 +15,7 @@
|
||||
<link rel="canonical" href="https://www.hello-algo.com/chapter_hashing/hash_map/">
|
||||
|
||||
|
||||
<link rel="prev" href="../../chapter_stack_and_queue/summary/">
|
||||
<link rel="prev" href="../../chapter_binary_search/binary_search/">
|
||||
|
||||
|
||||
<link rel="next" href="../hash_collision/">
|
||||
@ -25,7 +25,7 @@
|
||||
|
||||
|
||||
|
||||
<title>6.1. 哈希表 - Hello 算法</title>
|
||||
<title>7.1. 哈希表 - Hello 算法</title>
|
||||
|
||||
|
||||
|
||||
@ -79,7 +79,7 @@
|
||||
<div data-md-component="skip">
|
||||
|
||||
|
||||
<a href="#61" class="md-skip">
|
||||
<a href="#71" class="md-skip">
|
||||
跳转至
|
||||
</a>
|
||||
|
||||
@ -113,7 +113,7 @@
|
||||
<div class="md-header__topic" data-md-component="header-topic">
|
||||
<span class="md-ellipsis">
|
||||
|
||||
6.1. 哈希表
|
||||
7.1. 哈希表
|
||||
|
||||
</span>
|
||||
</div>
|
||||
@ -441,8 +441,6 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
|
||||
@ -504,23 +502,9 @@
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_computational_complexity/space_time_tradeoff/" class="md-nav__link">
|
||||
2.4. 权衡时间与空间
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_computational_complexity/summary/" class="md-nav__link">
|
||||
2.5. 小结
|
||||
2.4. 小结
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -832,6 +816,61 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
|
||||
6. 二分查找
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_7">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
6. 二分查找
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_binary_search/binary_search/" class="md-nav__link">
|
||||
6.1. 二分查找
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -843,7 +882,7 @@
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" checked>
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8" checked>
|
||||
|
||||
|
||||
|
||||
@ -855,15 +894,15 @@
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
|
||||
6. 散列表
|
||||
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
|
||||
7. 散列表
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_7">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="true">
|
||||
<label class="md-nav__title" for="__nav_8">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
6. 散列表
|
||||
7. 散列表
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
@ -883,12 +922,12 @@
|
||||
|
||||
|
||||
<label class="md-nav__link md-nav__link--active" for="__toc">
|
||||
6.1. 哈希表
|
||||
7.1. 哈希表
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<a href="./" class="md-nav__link md-nav__link--active">
|
||||
6.1. 哈希表
|
||||
7.1. 哈希表
|
||||
</a>
|
||||
|
||||
|
||||
@ -907,29 +946,22 @@
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#611" class="md-nav__link">
|
||||
6.1.1. 哈希表效率
|
||||
<a href="#711" class="md-nav__link">
|
||||
7.1.1. 哈希表常用操作
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#612" class="md-nav__link">
|
||||
6.1.2. 哈希表常用操作
|
||||
<a href="#712" class="md-nav__link">
|
||||
7.1.2. 哈希函数
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#613" class="md-nav__link">
|
||||
6.1.3. 哈希函数
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#614" class="md-nav__link">
|
||||
6.1.4. 哈希冲突
|
||||
<a href="#713" class="md-nav__link">
|
||||
7.1.3. 哈希冲突
|
||||
</a>
|
||||
|
||||
</li>
|
||||
@ -950,7 +982,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../hash_collision/" class="md-nav__link">
|
||||
6.2. 哈希冲突处理
|
||||
7.2. 哈希冲突处理
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -964,126 +996,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../summary/" class="md-nav__link">
|
||||
6.3. 小结
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
|
||||
7. 树
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_8">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
7. 树
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_tree/binary_tree/" class="md-nav__link">
|
||||
7.1. 二叉树
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_tree/binary_tree_traversal/" class="md-nav__link">
|
||||
7.2. 二叉树遍历
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_tree/binary_search_tree/" class="md-nav__link">
|
||||
7.3. 二叉搜索树
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_tree/avl_tree/" class="md-nav__link">
|
||||
7.4. AVL 树 *
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_tree/summary/" class="md-nav__link">
|
||||
7.5. 小结
|
||||
7.3. 小结
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1121,17 +1034,21 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="0">
|
||||
8. 堆
|
||||
8. 树
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_9_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_9">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
8. 堆
|
||||
8. 树
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
@ -1141,8 +1058,8 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_heap/heap/" class="md-nav__link">
|
||||
8.1. 堆
|
||||
<a href="../../chapter_tree/binary_tree/" class="md-nav__link">
|
||||
8.1. 二叉树
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1155,8 +1072,8 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_heap/build_heap/" class="md-nav__link">
|
||||
8.2. 建堆操作 *
|
||||
<a href="../../chapter_tree/binary_tree_traversal/" class="md-nav__link">
|
||||
8.2. 二叉树遍历
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1169,8 +1086,36 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_heap/summary/" class="md-nav__link">
|
||||
8.3. 小结
|
||||
<a href="../../chapter_tree/binary_search_tree/" class="md-nav__link">
|
||||
8.3. 二叉搜索树
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_tree/avl_tree/" class="md-nav__link">
|
||||
8.4. AVL 树 *
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_tree/summary/" class="md-nav__link">
|
||||
8.5. 小结
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1208,19 +1153,17 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_10" id="__nav_10_label" tabindex="0">
|
||||
9. 图
|
||||
9. 堆
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_10_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_10">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
9. 图
|
||||
9. 堆
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
@ -1230,8 +1173,8 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_graph/graph/" class="md-nav__link">
|
||||
9.1. 图
|
||||
<a href="../../chapter_heap/heap/" class="md-nav__link">
|
||||
9.1. 堆
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1244,8 +1187,8 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_graph/graph_operations/" class="md-nav__link">
|
||||
9.2. 图基础操作
|
||||
<a href="../../chapter_heap/build_heap/" class="md-nav__link">
|
||||
9.2. 建堆操作 *
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1258,22 +1201,8 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_graph/graph_traversal/" class="md-nav__link">
|
||||
9.3. 图的遍历
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_graph/summary/" class="md-nav__link">
|
||||
9.4. 小结
|
||||
<a href="../../chapter_heap/summary/" class="md-nav__link">
|
||||
9.3. 小结
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1316,14 +1245,14 @@
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_11" id="__nav_11_label" tabindex="0">
|
||||
10. 查找算法
|
||||
10. 图
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_11_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_11">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
10. 查找算法
|
||||
10. 图
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
@ -1333,8 +1262,8 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_searching/linear_search/" class="md-nav__link">
|
||||
10.1. 线性查找
|
||||
<a href="../../chapter_graph/graph/" class="md-nav__link">
|
||||
10.1. 图
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1347,8 +1276,8 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_searching/binary_search/" class="md-nav__link">
|
||||
10.2. 二分查找
|
||||
<a href="../../chapter_graph/graph_operations/" class="md-nav__link">
|
||||
10.2. 图基础操作
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1361,8 +1290,8 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_searching/hashing_search/" class="md-nav__link">
|
||||
10.3. 哈希查找
|
||||
<a href="../../chapter_graph/graph_traversal/" class="md-nav__link">
|
||||
10.3. 图的遍历
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1375,7 +1304,7 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_searching/summary/" class="md-nav__link">
|
||||
<a href="../../chapter_graph/summary/" class="md-nav__link">
|
||||
10.4. 小结
|
||||
</a>
|
||||
</li>
|
||||
@ -1517,7 +1446,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_sorting/bucket_sort/" class="md-nav__link">
|
||||
11.6. 桶排序(New)
|
||||
11.6. 桶排序
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1531,7 +1460,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_sorting/counting_sort/" class="md-nav__link">
|
||||
11.7. 计数排序(New)
|
||||
11.7. 计数排序
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1545,7 +1474,7 @@
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_sorting/radix_sort/" class="md-nav__link">
|
||||
11.8. 基数排序(New)
|
||||
11.8. 基数排序
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1593,17 +1522,21 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_13" id="__nav_13_label" tabindex="0">
|
||||
12. 回溯算法
|
||||
12. 搜索算法
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_13_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_13">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
12. 回溯算法
|
||||
12. 搜索算法
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
@ -1613,8 +1546,36 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_backtracking/backtracking_algorithm/" class="md-nav__link">
|
||||
12.1. 回溯算法(New)
|
||||
<a href="../../chapter_searching/searching_algorithm_revisited/" class="md-nav__link">
|
||||
12.1. 搜索算法(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_searching/replace_linear_by_hashing/" class="md-nav__link">
|
||||
12.2. 哈希优化策略
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_searching/summary/" class="md-nav__link">
|
||||
12.3. 小结
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1648,19 +1609,17 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_14" id="__nav_14_label" tabindex="0">
|
||||
13. 附录
|
||||
13. 回溯算法
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_14_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_14">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
13. 附录
|
||||
13. 回溯算法
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
@ -1670,22 +1629,8 @@
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/installation/" class="md-nav__link">
|
||||
13.1. 编程环境安装
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/contribution/" class="md-nav__link">
|
||||
13.2. 一起参与创作
|
||||
<a href="../../chapter_backtracking/backtracking_algorithm/" class="md-nav__link">
|
||||
13.1. 回溯算法(New)
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -1718,6 +1663,77 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<label class="md-nav__link" for="__nav_15" id="__nav_15_label" tabindex="0">
|
||||
14. 附录
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
</label>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_15_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_15">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
14. 附录
|
||||
</label>
|
||||
<ul class="md-nav__list" data-md-scrollfix>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/installation/" class="md-nav__link">
|
||||
14.1. 编程环境安装
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="../../chapter_appendix/contribution/" class="md-nav__link">
|
||||
14.2. 一起参与创作
|
||||
</a>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
</li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
|
||||
|
||||
|
||||
|
||||
|
||||
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_16" >
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1730,8 +1746,8 @@
|
||||
|
||||
</div>
|
||||
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_15_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_15">
|
||||
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_16_label" aria-expanded="false">
|
||||
<label class="md-nav__title" for="__nav_16">
|
||||
<span class="md-nav__icon md-icon"></span>
|
||||
参考文献
|
||||
</label>
|
||||
@ -1772,29 +1788,22 @@
|
||||
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#611" class="md-nav__link">
|
||||
6.1.1. 哈希表效率
|
||||
<a href="#711" class="md-nav__link">
|
||||
7.1.1. 哈希表常用操作
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#612" class="md-nav__link">
|
||||
6.1.2. 哈希表常用操作
|
||||
<a href="#712" class="md-nav__link">
|
||||
7.1.2. 哈希函数
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#613" class="md-nav__link">
|
||||
6.1.3. 哈希函数
|
||||
</a>
|
||||
|
||||
</li>
|
||||
|
||||
<li class="md-nav__item">
|
||||
<a href="#614" class="md-nav__link">
|
||||
6.1.4. 哈希冲突
|
||||
<a href="#713" class="md-nav__link">
|
||||
7.1.3. 哈希冲突
|
||||
</a>
|
||||
|
||||
</li>
|
||||
@ -1822,30 +1831,21 @@
|
||||
|
||||
|
||||
|
||||
<h1 id="61">6.1. 哈希表<a class="headerlink" href="#61" title="Permanent link">¶</a></h1>
|
||||
<h1 id="71">7.1. 哈希表<a class="headerlink" href="#71" title="Permanent link">¶</a></h1>
|
||||
<p>哈希表通过建立「键 key」与「值 value」之间的映射,实现高效的元素查询。具体而言,我们向哈希表输入一个 key,则可以在 <span class="arithmatex">\(O(1)\)</span> 时间内获取对应的 value 。</p>
|
||||
<p>以一个包含 <span class="arithmatex">\(n\)</span> 个学生的数据库为例,每个学生都有“姓名 <code>name</code>”和“学号 <code>id</code>”两项数据。假如我们希望实现查询功能,例如“输入一个学号,返回对应的姓名”,则可以采用哈希表来实现。</p>
|
||||
<p><img alt="哈希表的抽象表示" src="../hash_map.assets/hash_map.png" /></p>
|
||||
<p align="center"> Fig. 哈希表的抽象表示 </p>
|
||||
|
||||
<h2 id="611">6.1.1. 哈希表效率<a class="headerlink" href="#611" title="Permanent link">¶</a></h2>
|
||||
<p>除哈希表外,还可以使用以下数据结构来实现上述查询功能:</p>
|
||||
<ol>
|
||||
<li><strong>无序数组</strong>:每个元素为 <code>[学号, 姓名]</code> ;</li>
|
||||
<li><strong>有序数组</strong>:将 <code>1.</code> 中的数组按照学号从小到大排序;</li>
|
||||
<li><strong>链表</strong>:每个节点的值为 <code>[学号, 姓名]</code> ;</li>
|
||||
<li><strong>二叉搜索树</strong>:每个节点的值为 <code>[学号, 姓名]</code> ,根据学号大小来构建树;</li>
|
||||
</ol>
|
||||
<p>各项操作的时间复杂度如下表所示(详解可见<a href="https://www.hello-algo.com/chapter_tree/binary_search_tree/">二叉搜索树章节</a>)。无论是查找元素还是增删元素,哈希表的时间复杂度都是 <span class="arithmatex">\(O(1)\)</span> ,全面胜出!</p>
|
||||
<p>除哈希表外,我们还可以使用数组或链表实现查询功能,各项操作的时间复杂度如下表所示。</p>
|
||||
<p>在哈希表中增删查改的时间复杂度都是 <span class="arithmatex">\(O(1)\)</span> ,全面胜出!因此,哈希表常用于对查找效率要求较高的场景。</p>
|
||||
<div class="center-table">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>无序数组</th>
|
||||
<th>有序数组</th>
|
||||
<th>数组</th>
|
||||
<th>链表</th>
|
||||
<th>二叉搜索树</th>
|
||||
<th>哈希表</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -1853,31 +1853,25 @@
|
||||
<tr>
|
||||
<td>查找元素</td>
|
||||
<td><span class="arithmatex">\(O(n)\)</span></td>
|
||||
<td><span class="arithmatex">\(O(\log n)\)</span></td>
|
||||
<td><span class="arithmatex">\(O(n)\)</span></td>
|
||||
<td><span class="arithmatex">\(O(\log n)\)</span></td>
|
||||
<td><span class="arithmatex">\(O(1)\)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>插入元素</td>
|
||||
<td><span class="arithmatex">\(O(1)\)</span></td>
|
||||
<td><span class="arithmatex">\(O(n)\)</span></td>
|
||||
<td><span class="arithmatex">\(O(1)\)</span></td>
|
||||
<td><span class="arithmatex">\(O(\log n)\)</span></td>
|
||||
<td><span class="arithmatex">\(O(1)\)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>删除元素</td>
|
||||
<td><span class="arithmatex">\(O(n)\)</span></td>
|
||||
<td><span class="arithmatex">\(O(n)\)</span></td>
|
||||
<td><span class="arithmatex">\(O(n)\)</span></td>
|
||||
<td><span class="arithmatex">\(O(\log n)\)</span></td>
|
||||
<td><span class="arithmatex">\(O(1)\)</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<h2 id="612">6.1.2. 哈希表常用操作<a class="headerlink" href="#612" title="Permanent link">¶</a></h2>
|
||||
<h2 id="711">7.1.1. 哈希表常用操作<a class="headerlink" href="#711" title="Permanent link">¶</a></h2>
|
||||
<p>哈希表的基本操作包括 <strong>初始化、查询操作、添加与删除键值对</strong>。</p>
|
||||
<div class="tabbed-set tabbed-alternate" data-tabs="1:10"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><input id="__tabbed_1_4" name="__tabbed_1" type="radio" /><input id="__tabbed_1_5" name="__tabbed_1" type="radio" /><input id="__tabbed_1_6" name="__tabbed_1" type="radio" /><input id="__tabbed_1_7" name="__tabbed_1" type="radio" /><input id="__tabbed_1_8" name="__tabbed_1" type="radio" /><input id="__tabbed_1_9" name="__tabbed_1" type="radio" /><input id="__tabbed_1_10" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">Java</label><label for="__tabbed_1_2">C++</label><label for="__tabbed_1_3">Python</label><label for="__tabbed_1_4">Go</label><label for="__tabbed_1_5">JavaScript</label><label for="__tabbed_1_6">TypeScript</label><label for="__tabbed_1_7">C</label><label for="__tabbed_1_8">C#</label><label for="__tabbed_1_9">Swift</label><label for="__tabbed_1_10">Zig</label></div>
|
||||
<div class="tabbed-content">
|
||||
@ -2203,7 +2197,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h2 id="613">6.1.3. 哈希函数<a class="headerlink" href="#613" title="Permanent link">¶</a></h2>
|
||||
<h2 id="712">7.1.2. 哈希函数<a class="headerlink" href="#712" title="Permanent link">¶</a></h2>
|
||||
<p>哈希表的底层实现为数组,同时可能包含链表、二叉树(红黑树)等数据结构,以提高查询性能(将在下节讨论)。</p>
|
||||
<p>首先考虑最简单的情况,<strong>仅使用一个数组来实现哈希表</strong>。通常,我们将数组中的每个空位称为「桶 Bucket」,用于存储键值对。</p>
|
||||
<p>我们将键值对 key, value 封装成一个类 <code>Entry</code> ,并将所有 <code>Entry</code> 放入数组中。这样,数组中的每个 <code>Entry</code> 都具有唯一的索引。为了建立 key 和索引之间的映射关系,我们需要使用「哈希函数 Hash Function」。</p>
|
||||
@ -3072,7 +3066,7 @@ f(x) = x \% 100
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h2 id="614">6.1.4. 哈希冲突<a class="headerlink" href="#614" title="Permanent link">¶</a></h2>
|
||||
<h2 id="713">7.1.3. 哈希冲突<a class="headerlink" href="#713" title="Permanent link">¶</a></h2>
|
||||
<p>细心的你可能已经注意到,<strong>在某些情况下,哈希函数 <span class="arithmatex">\(f(x) = x % 100\)</span> 可能无法正常工作</strong>。具体来说,当输入的 key 后两位相同时,哈希函数的计算结果也会相同,从而指向同一个 value 。例如,查询学号为 <span class="arithmatex">\(12836\)</span> 和 <span class="arithmatex">\(20336\)</span> 的两个学生时,我们得到:</p>
|
||||
<div class="arithmatex">\[
|
||||
f(12836) = f(20336) = 36
|
||||
@ -3164,7 +3158,7 @@ f(12836) = f(20336) = 36
|
||||
<nav class="md-footer__inner md-grid" aria-label="页脚" >
|
||||
|
||||
|
||||
<a href="../../chapter_stack_and_queue/summary/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 5.4. &nbsp; 小结" rel="prev">
|
||||
<a href="../../chapter_binary_search/binary_search/" class="md-footer__link md-footer__link--prev" aria-label="上一页: 6.1. &nbsp; 二分查找" rel="prev">
|
||||
<div class="md-footer__button md-icon">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
|
||||
</div>
|
||||
@ -3173,20 +3167,20 @@ f(12836) = f(20336) = 36
|
||||
上一页
|
||||
</span>
|
||||
<div class="md-ellipsis">
|
||||
5.4. 小结
|
||||
6.1. 二分查找
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
<a href="../hash_collision/" class="md-footer__link md-footer__link--next" aria-label="下一页: 6.2. &nbsp; 哈希冲突处理" rel="next">
|
||||
<a href="../hash_collision/" class="md-footer__link md-footer__link--next" aria-label="下一页: 7.2. &nbsp; 哈希冲突处理" rel="next">
|
||||
<div class="md-footer__title">
|
||||
<span class="md-footer__direction">
|
||||
下一页
|
||||
</span>
|
||||
<div class="md-ellipsis">
|
||||
6.2. 哈希冲突处理
|
||||
7.2. 哈希冲突处理
|
||||
</div>
|
||||
</div>
|
||||
<div class="md-footer__button md-icon">
|
||||
|
Reference in New Issue
Block a user