c - 以有效随机顺序散列 8 字节经常升序指向唯一 8 字节整数的指针?

标签 c hash

首先介绍一点背景知识,我试图在数据结构中存储一堆指针,并且我想查找值。我不关心按顺序访问。我想将结构存储在树中以用于查找目的,但是 malloc 倾向于产生顺序地址,这会导致简单树的病态行为。我知道我可以将指针存储在某种自平衡树中,但我没有一个库来为我实现它。 Vanilla C在这里。所以我想做的是混合我想要存储的指针位,这样我就可以实现一个简单的树并避免病理情况。

我需要一些能够很好地混合这些位的东西,因为最高位可能全部相同,而最低位通常是页面对齐的,因此底部位通常为空。

有什么好的方案可以在没有大量开销的情况下产生良好的混合效果吗?

最佳答案

乘以一个大的奇数值可能就足够了:(uintptr_t) ptr * 0xcba9876543210fed。唯一输入值的图像是唯一的,由Sun Tzu Theorem .

我邀请其他人对乘数的选择和替代方案发表评论。

关于c - 以有效随机顺序散列 8 字节经常升序指向唯一 8 字节整数的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15528910/

相关文章:

java - Go SHA-256 哈希不同于 Java SHA-256 哈希

c - 将双指针数组的大小加倍?

c - MPI 主进程不等待其他进程计算

c# - 在 C# 中有两个散列函数的字典?

assembly - 在 NASM 汇编中计算哈希

ruby - 哈希键作为类中的访问器

c - 暂停()信号处理程序

c - gcc 找不到包含的 header

android - 堆损坏 - Android native 代码中的 SEGV_MAPERR

algorithm - 合并散列删除算法