发布日期:2024-06-24 22:03 点击次数:123 |
哈希表(hash table)是计较机科学中最基础也最迫切的数据结构之一AG百家乐下载,它的历史不错记忆到 20 世纪 50 年代早期。哈希表的中枢念念想是通过一个,将恣意畛域的键值映射到一个固定大小的数组空间中。
这种数据结构就像一个广大的抽屉柜,每个数据齐不错被速即放入某个抽屉中,并在需要时快速取出。但当抽屉柜接近装满时,找到适宜的空抽屉就变得越来越勤恳。
也便是说,当一个接近装满时(比如说也曾占用了 99% 的空间),要在剩余空间中找到一个空位至少需要进行与填充率成正比的次数搜索。这就意味着,若是哈希表也曾 99% 满了,那么在最坏情况下,需要纯粹 100 次尝试才能找到一个空位。这个表面规矩就像物理学中的光速极限相通,被以为是弗成跳跃的。
1985 年,图灵奖得主在其具有里程碑意思意思的论文 Uniform Hashing is Optimal 中忽视在具有特定属性的哈希表中,随即选拔抽屉的措施,即均匀探伤(uniform probing)是最优的选拔。
近 40 年来,计较机科学家们普遍以为姚期智的这个筹划是正确的。这种共鸣不仅影响了数据库系统的瞎想,也深刻影响了浩荡依赖高效数据存储的当代应用程序。关连词,这个看似坚弗成摧的表面堡垒,最近被一位年青的本科生撼动了。
这个浮松性的发现源于一个看似无意的契机。2021 年秋天,罗格斯大学的本科生 Andrew Krapivin 在浏览学术论文时,发现了一篇名为 Tiny Pointers 的著作。这篇论文研讨了一种新式的数据指针时间,约略大幅减少计较机内存的使用。当时候 Krapivin 并莫得想太多,但两年后,当他果真脱手深入连系这篇论文时,他坚硬到这里面避讳着更多的可能性。
Tiny Pointers 这篇论文研讨了一个看似肤浅但意思意思深切的问题:若何用更少的比特位来存储计较机中的指针。传统的指针需要 log n 个比特才能在 n 个位置中定位一个元素。但这篇论文忽视了一个奥秘的念念路:若是咱们事先知谈指针属于哪个用户,那么就不错愚弄这个迥殊信息来压缩指针的大小。
恰是这种压缩指针的念念路启发了 Krapivin 对哈希表的新判辨,在哈希表搜索进程中,咱们其实也不错愚弄之前探伤取得的信息来开采后续的搜索。
比较之下,传统措施规假定每次探伤齐是寂寥的、均匀随即的。而 Krapivin 莫得被这一种容貌所拘谨,其实也只是因为他并不知谈这种措施。
他用 Tiny Pointers 进行的探索导致了一种新式的哈希表——一种不依赖于均匀探伤的哈希表。对于这种新的哈希表,最坏情况下的查询和插入所需的时刻与 (log x)2 成正比——比 x 快得多。这一松手径直反驳了姚期智的筹划。
当 Krapivin 向他的前陶冶、Tiny Pointers 的共同作家 Martín Farach-Colton 展示这个瞎想时,后者起先显得相称怀疑。这种严慎是不错判辨的:哈希表是计较机科学中连系最充分的数据结构之一,要紧浮松似乎不太可能。但当论文的另一位伙同者、卡内基梅隆大学的 William Kuszmaul 仔细注视这项责任时,他坚硬到了其立异性意思意思。
“你并不是只是发明了一个新的哈希表,”Kuszmaul 对 Krapivin 说,“你本体上竣工推翻了一个存在了 40 年的筹划!”
最终,他们共同伙同,完成了这篇论文。
康奈尔理工学院的 Alex Conway 评价谈:“这是一项创始性的责任。尽管哈希表也曾有着悠久的历史,但对于它们的责任旨趣,咱们仍然有许多需要了解的场地。这篇论文以令东谈主惊诧的容貌回话了其中的几个根人道问题。”
要判辨这项责任的创始性,咱们需要先明确传统哈希名义临的根人道挑战。
在传统的通达寻址哈希表中,当咱们需要插入一个新元素时,会按照某个预界说的探伤序列一一检讨位置,直到找到第一个空位。这种措施就被称为“蓄意战略”,因为它老是急于接受第一个可用的位置。姚期智在 1985 年的论文中阐发,在这种蓄意战略下,当哈希表接近满载时(比如说留有δ比例的空位),最坏情况下需要 O(δ^-1) 次探伤才能找到一个空位。而况他筹划这个界限对于任何蓄意战略齐是最优的。
关连词,Krapivin 的责任阐发,若是咱们顺耳毁灭蓄意战略,本体上不错取得显赫更好的性能。连系忽视了一种新的哈希表构造措施,定名为“弹性哈希”(Elastic Hashing),告捷终赫然均派探伤复杂度 O(1) 的最优解,同期使得最坏情况的探伤复杂度降至 O(log δ⁻¹)。这一连系不仅推翻姚期智的筹划,还在不依赖重排操作的前提下,初度阐发了更优的探伤复杂度下界。
就像 Tiny Pointers 通过愚弄迥殊的高下文信息来减少存储支拨,弹性哈希通过集聚更多的探伤信息来作念出更有用的扬弃方案。其中枢念念想是将所有这个词哈希表鉴别为多个子数组,并通过一种二元探伤结构进行索引。
在该模子中,哈希表被拆分为一系列大小指数递减的子数组,举例 A₁、A₂、...、A_⌈log n⌉,其中 |Aᵢ₊₁| = |Aᵢ|/2 ± 1。这种脉络结构为非蓄意探伤提供了可能,使得插入操作不错优先在负载较低的区域进行,同期保证查找进程的高效性。连系者引入了一个特定的映射 φ(i,j),使得二维探伤序列 hᵢ,ⱼ (x) 不错映射到一维探伤序列 hφ(i,j)(x),其中 φ(i,j) ≤ O(i·j²)。该映射的瞎想确保了在插入进程中,较早被走访的探伤位置约略更高效地找到空槽,从而镌汰合座探伤复杂度。
具体来说,弹性哈希领受分批次插入战略,以确保各个子数组的负载水平得到合理分拨。起先,在开动批次 B₀中,哈希表的第一个子数组 A₁ 被填充至约 75% 的负载。随后,在后续的批次 Bᵢ 中,ag百家乐交流平台插入操作东要发生在 Aᵢ和 Aᵢ₊₁ 之间,确保每个子数组的负载保捏在合理畛域内。
插入进程中,若是某个子数组仍有较多可用槽位(空位比例高于 δ/2),新元素将尝试在该子数组内找到适宜的位置。而当子数组接近满载时,插入算法会自动转向下一级子数组,以栽种存储后果。此外,在最坏情况下,即所有子数组的空位齐相称有限时,算法会退回到均匀探伤战略,但这种情况的概率极低,确保了合座复杂度的优化。
数学分析标明,该措施约略显赫镌汰均派探伤复杂度和最坏情况探伤复杂度。起先,在均派探伤复杂度方面,连系者阐发了弹性哈希的平均探伤次数为 O(1),这意味着大普遍操作只需要常数次探伤就能完成。远优于均匀探伤的 O(log δ⁻¹)。其根柢原因在于,弹性哈希将大普遍插入操作规矩在负载较低的子数组中,使得普遍元素约略在少许探伤后告捷存储。
其次,在最坏情况探伤复杂度方面,连系标明在无重排的情况下,任何通达寻址哈希的最坏情况探伤复杂度必须至少达到 Ω(log δ⁻¹),而弹性哈希终赫然这一下界的最优匹配。
在弹性哈希措施的基础上,连系者进一步忽视了一种新的蓄意通达寻址(Open Addressing)战略,定名为“漏斗哈希”(Funnel Hashing)。通过构造一种层级结构的哈希表,该措施终赫然最坏情况的祈望探伤复杂度 O(log²δ⁻¹),而况阐发了这一界限的最优性。
漏斗哈希的基本念念想是在哈希表中引入多级结构,使得元素在不同负载水平的区域之间进行分层存储,从而镌汰高负载情况下的探伤次数。具体而言,哈希表被鉴别为多个层级,每一层里面进一步分为几许个等大小的子数组,所有子数组的大小按几何级数递减。假定哈希表的总容量为 n,连系者起先将其鉴别为两部分,其中一部分(记为A_α+1)的大小约为 δn,用于存储最难插入的元素,而剩余部分(记为 A')再细分为 α 个子数组 A₁、A₂、...、Aα。这些子数组的大小递减关系自高 |Aᵢ₊₁| ≈ 3|Aᵢ|/4,而况每个 Aᵢ 进一步鉴别为几许个小块,每个小块的大小设定为 β,其中 β 取 O(logδ⁻¹)。
在插入进程中,每个元素起先会尝试插入最表层的子数组A₁,若是失败则循序尝试 A₂, A3,……直到告捷找到空位或最终参加成心的存储区 A_α+1。在每一层的插入尝试中,元素会随即选拔一个子块,并循序扫描该子块中的位置以寻找空槽。这种分层探伤战略确保了大普遍插入操作不错在前几层完成,而仅有极少数插入会参加最底层的存储区域。
数学分析标明,漏斗哈希的最坏情况祈望探伤复杂度为 O(log²δ⁻¹),显赫优于均匀探伤的 O(δ⁻¹)。其中枢阐发成就在以下几个关键要领之上。
起先,连系者阐发了每个子数组在一定插入次数后齐会达到接近弥散的景象,即子数组里面空槽的数目受严格规矩。这意味着即使在较高负载的情况下,仍然不错保证大普遍插入操作在 O(logδ⁻¹) 次探伤内告捷。其次,通过分析插入元素在不同层级上的散播,连系者阐发了即使在最坏情况下,元素也只需阅历 O(log²δ⁻¹) 次探伤,即可找到一个可用的位置。此外,连系者还阐发了这一界限的最优性,标明任何蓄意通达寻址哈希表齐无法浮松 Ω(log²δ⁻¹) 的最坏情况探伤复杂度。
除了在祈望探伤复杂度上的优化,漏斗哈希还具备细腻的高概率最坏情况保证。连系者进一步阐发,在绝大普遍情况下(即以1-1/poly(n) 的概率),恣意一个元素的最坏情况探伤复杂度不会卓著 O(log²δ⁻¹ + log log n)。这意味着即使在极点负载的情况下,该措施仍然约略保捏较为安适的性能,而不会出现大幅度退化的情况。
总之,这一措施的忽视不仅解答了姚期智在 1985 年忽视的未惩办问题,即最坏情况的祈望探伤复杂度是否不错低于 O(δ⁻¹),还阐发了均匀探伤在蓄意算法框架下并非最优。对于蓄意哈希表,最坏情况下的探伤复杂度不错镌汰到 O(log²δ⁻¹),而对于非蓄意哈希表,平均查询时刻致使不错竣工寂寥于负载因子 δ。
“这只是一个常数,与哈希表是否满无关”,Farach-Colton 说。岂论哈希表是否满,查询的平均时刻齐不错达到常数级别,这个发现致使出乎连系者我方的猜想。
即便当今该连系可能不会立即带来工业界的应用,但判辨数据结构的基础表面相称迫切,因为“你永恒不知谈这么的松手什么时候会解锁某种新的浮松,让本体应用变得愈加高效。”Conway 暗示。
参考府上:
1.https://www.quantamagazine.org/undergraduate-upends-a-40-year-old-data-science-conjecture-20250210/
2.https://doi.org/10.1145/3828.3836
3.https://arxiv.org/abs/2501.02305
4.https://arxiv.org/abs/2111.12800