当涉及到映射hash key --> bucket instance
时,什么算法会产生最佳分布?换句话说,假设我有散列函数(可能是SHA-1),并且我有n
存储桶;我使用什么算法将密钥映射到存储桶?例如。低位,高位,别的东西?存储桶实例的散列键
4
A
回答
2
通常,你只需要mod
你的散列值与桶的数量。在不太可能的情况下,存储桶的数量是2的幂,您可以使用按位进行转换。
维基百科上hash function的摘录:
一个常见的解决方案是计算一个固定的散列函数具有非常 大范围(比如,0〜2 - 1),除以结果n,并使用 分部的余数。如果n本身是2的幂,则可以通过位掩码和位移进行 。使用此方法时,必须选择散列函数 ,以便结果在0和n-1之间具有相当一致的 分布,对于可能发生在 应用程序中的任何n。根据功能的不同,其余部分可能只是对于某些n是统一的,例如 。奇数或素数。
0
SHA-1和其他cryptographic hash functions应该已经给你一个漂亮的均匀分布,倾向于表现得像一个随机函数(以相同的概率生成所有输出)。
所以,只需从函数的输出中选择合适的位数,即可给出您想要的范围内的数字。
您应该研究关于散列函数和散列表的文献以更好地理解空间,以便根据您的要求做出明智的选择。您可以从Wikipedia或算法教科书(如CLR)开始。最终你会想要移动到Knuth。
相关问题
- 1. 快速存储桶实现
- 2. 如何将S3存储桶保护到实例的角色?
- 3. 存储在列表中以存储单独实例的Python类实例
- 4. 备份s3存储桶最佳实践
- 5. ElasticSearch:获取存储桶中的存储桶密钥scripted_metric
- 6. 什么数据结构我们通常使用散列表存储散列键?
- 7. 重新散列后,存储在同一个存储桶中的元素是否可以重新分配为单独的存储桶?
- 8. MongoDB GridFS存储桶?
- 9. 存储在存储桶列表中的项目数量
- 10. 公有Google Cloud Storage存储桶列表
- 11. 如何在Ruby中使对象实例成为散列键?
- 12. 许多实例变量或散列与许多键?
- 13. 的NodeJS LAMBDA S3存储桶
- 14. 将对s3存储桶的访问仅限于特定的ec2实例
- 15. AWS S3存储桶策略允许从我的实例进行只读访问
- 16. Google Cloud Storage存储桶:挂载在具有全局权限的Linux实例中
- 17. 如何从Elastic Beanstalk实例访问S3存储桶中的docker配置文件
- 18. 将AWS S3存储桶限制为只针对/ GET请求的某些实例
- 19. 如何实现散列键导航?
- 20. 实例不存储值
- 21. 单实例存储层
- 22. AWS实例存储使用
- 23. Django ElasticBeanstalk更改存储桶
- 24. 上传到S3存储桶
- 25. Amazon S3存储桶策略
- 26. Couchbase API存储桶创建
- 27. 在C中解散hashmap桶阵列
- 28. 如何在创建实例时将文件从S3存储桶移至EC2
- 29. 当从实例复制到存储桶时,AWS CLI:复制命令失败
- 30. 如何将S3存储桶装载到EC2实例并使用PHP写入?