高效实现的常规与近似通用哈希

0 下载量 6 浏览量 更新于2024-07-14 收藏 578KB PDF 举报
"Regular and Almost Universal Hashing - An Efficient Implementation - 2016 (1609.09840) - 计算机科学" 本文主要探讨了在计算机科学中,尤其是数据结构领域,如哈希表的高效实现策略。随机哈希是提供性能保证的有效方法,即使在对抗性环境中也能保持稳定。"Regular and Almost Universal Hashing" 是一种旨在优化哈希函数性能的理论与实践相结合的技术。 "Universal Hashing" 是一种常见的概念,它保证了在给定两个不同的数据对象时,它们被映射到相同哈希值的概率较低。这意味着,如果我们随机选择哈希函数,对于任意两个数据对象,它们有很小的可能性得到相同的哈希码。这种性质对于避免哈希冲突至关重要,冲突会降低哈希表的查找效率。 然而,通用哈希函数并不能确保所有函数都表现良好。为了进一步提高性能,文章引入了“Regular Hashing”的概念。在随机选取数据对象的情况下,常规哈希要求对于任何固定的哈希函数,数据对象有较低的概率得到相同的哈希值。这样可以更均匀地分布哈希值,从而减少冲突。 作者D. Ivanchykhin、S. Ignatchenko和D. Lemire提出了一种名为“PM+”的非加密哈希函数家族,该家族同时具备良好的运行时间、内存使用效率以及理论上区分的保证:几乎普适性和分组件规则性。"Almost Universality" 指的是即使在最坏情况下,哈希函数仍然能保持较低的碰撞概率;而"Component-wise Regularity" 则意味着在各个组件或维度上,哈希函数的行为都是均匀的。 在多种平台上的测试显示,"PM+" 实现的性能可与当前最先进的哈希函数相媲美。特别是在最新的Intel处理器上,PM+的表现尤为出色,这表明其在现代计算环境中的高效性。 这篇论文为数据结构和算法领域提供了新的思考方向,即如何设计并实现既能保证理论性能又能实现实用效率的哈希函数。通过引入“Regular”和“Almost Universal”特性,研究人员能够构建出在实际应用中更加可靠的哈希数据结构,这对于大数据处理、数据库索引、机器学习等多个领域都有重要的应用价值。

Failed to find entry-points: System.Exception: Unexpected exception while collecting types in assembly `Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null` ---> Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly: 'GameFramework, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' at Mono.Cecil.BaseAssemblyResolver.Resolve (Mono.Cecil.AssemblyNameReference name, Mono.Cecil.ReaderParameters parameters) [0x00105] in <ebb9e4250ed24cbfa42055e3532ef311>:0 at zzzUnity.Burst.CodeGen.AssemblyResolver.Resolve (Mono.Cecil.AssemblyNameReference name) [0x00039] in <a2dd15248a25411e914af2a2c82fb63f>:0 at Burst.Compiler.IL.AssemblyLoader.Resolve (Mono.Cecil.AssemblyNameReference name) [0x00079] in <a2dd15248a25411e914af2a2c82fb63f>:0 at Mono.Cecil.MetadataResolver.Resolve (Mono.Cecil.TypeReference type) [0x00038] in <ebb9e4250ed24cbfa42055e3532ef311>:0 at Mono.Cecil.ModuleDefinition.Resolve (Mono.Cecil.TypeReference type) [0x00006] in <ebb9e4250ed24cbfa42055e3532ef311>:0 at Mono.Cecil.TypeReference.Resolve () [0x00006] in <ebb9e4250ed24cbfa42055e3532ef311>:0 at Burst.Compiler.IL.Server.EntryPointMethodFinder.CollectGenericTypeInstances (Mono.Cecil.TypeReference type, System.Collections.Generic.List`1[T] types, System.Collections.Generic.HashSet`1[T] visited) [0x0002f] in <a2dd15248a25411e914af2a2c82fb63f>:0 at Burst.Compiler.IL.Server.EntryPointMethodFinder.CollectGenericTypeInstances (Mono.Cecil.AssemblyDefinition assembly, System.Collections.Generic.List`1[T] types, System.Collections.Generic.HashSet`1[T] visited) [0x00057] in <a2dd15248a25411e914af2a2c82fb63f>:0 at Burst.Compiler.IL.Server.EntryPointMethodFinder.FindEntryPoints (System.String[] rootAssemblyNames, Burst.Compiler.IL.Hashing.CacheRuntime.HashCacheAssemblyStore assemblyStore, Burst.Compiler.IL.AssemblyLoader assemblyLoader, Burst.Compiler.IL.NativeCompilerOptions options, Burst.Compiler.IL.Server.ProfileDelegate profileCallback, System.Boolean includeRootAssemblyReferences, System.Boolean splitTargets, Burst.Compiler.IL.Helpers.DebugLogWriter debugWriter) [0x0019d] in <a2dd15248a25411e914af2a2c82fb63f>:0 --- End of inner exception stack trace --- at Burst.Compiler.IL.Server.EntryPointMethodFinder.FindEntryPoints (System.String[] rootAssemblyNames, Burst.Compiler.IL.Hashing.CacheRuntime.HashCacheAssemblyStore assemblyStore, Burst.Compiler.IL.AssemblyLoader assemblyLoader, Burst.Compiler.IL.NativeCompilerOptions options, Burst.Compiler.IL.Server.ProfileDelegate profileCallback, System.Boolean includeRootAssemblyReferences, System.Boolean splitTargets, Burst.Compiler.IL.Helpers.DebugLogWriter debugWriter) [0x001d9] in <a2dd15248a25411e914af2a2c82fb63f>:0 at Burst.Compiler.IL.Server.FindMethodsJob.Execute (Burst.Compiler.IL.Server.CompilerServerJobExecutionContext context) [0x00133] in <a2dd15248a25411e914af2a2c82fb63f>:0

2023-05-10 上传
2023-06-07 上传