21得票7回答
完美哈希函数

我正在尝试对这些值进行哈希处理10, 100, 32, 45, 58, 126, 3, 29, 200, 400, 0 我需要一个函数,将它们映射到一个大小为13的数组中而不会引起任何碰撞。 我花了几个小时思考并搜索,但无法解决。我还没有接近可行的解决方案。 我该如何找到这种类型的哈希函数...

19得票8回答
有没有办法让这个哈希查找更快?

我希望您能够快速处理一定范围内的字符串,并计算它们的值。输入文件的格式如下: January 7 March 22 September 87 March 36 等等。由于行宽度相同,我可以使用fread快速读取一行,并且我已经开发了一个完美的哈希函数,但我想看看是否...

16得票8回答
已知一组键,寻找最快的字符串键查找方法。

考虑一个带有以下签名的查找函数,需要为给定的字符串键返回一个整数: int GetValue(string key) { ... } 此外,需要考虑的是,当编写函数的源代码时,已经预先知道了键值映射和编号N,例如: // N=3 { "foo", 1 }, { "bar", 42 },...

16得票2回答
能否在不使用单独的查找表的情况下创建一个最小完美哈希函数,用于一个小于64的键集?

我最近阅读了这篇文章《扔掉钥匙:易用、极简完美哈希》,讲述了如何为已知的键集生成极简完美哈希表。 该文章似乎假定您需要一个中间表。如果我们假设键集很小(即<64),是否有其他更简单的方法来生成这样的函数? 在我的案例中,我想将一组线程ID映射到数组中的唯一数据块。线程在哈希函数生成之...

16得票2回答
最小完美哈希函数

我有10^8个在范围[0; 2^63-1]内的随机整数。这些整数没有重复。完整的列表在编译时已知,但它只是唯一的随机数。这些数字永远不会改变。 为了显式存储一个整数,需要8个字节,并且每个整数有一个关联的1字节值,因此显式存储需要约860 MB。 因此,我想找到一个最小的完美哈希函数,将[...

8得票3回答
将字符串转换为数字再转换为字符串?

我想了解如何将短的ASCII字符串转换为数字(int、float或数字字符串)。我看到这里的帖子中提到了完美哈希,似乎是我需要的。然而,我对此的数学理解还不够。 你如何将ASCII字符串转换为数字序列,然后再转回字符串? 顺便说一句,将字符串分解为其ASCII字符数字很容易。 fore...

8得票5回答
在编译时生成具有最小开销的函数调度程序

我正在尝试使用编译时生成的数组来实现快速函数调度器,以便在运行时使用O(1)。这里是一些代码以澄清: template<int i> void f() { // do stuff } // specialized for every managed integer...

8得票4回答
在这种情况下,是否可能创建一个最小的完美哈希函数?

我想创建一个哈希映射(或其他结构,如果您有任何建议)来存储键值对。在创建地图的同时,所有键将一次性插入,但我不知道键是什么(任意长度的字符串),直到运行时需要创建地图。 我正在解析类似于这样的查询字符串"x=100&name=bob&color=red&y=150"(...

8得票9回答
签署为正向完美哈希

我有一个整数类型 long,其值介于 Long.MIN_VALUE = 0x80...0 (-2^63) 和 Long.MAX_VALUE = 0x7f...f (2^63 - 1) 之间。我希望以干净高效的方式将其哈希为同类型的正整数(即介于 1 和 Long.MAX_VALUE 之间),并...

7得票2回答
完美哈希函数?

在阅读维基百科上的 鸽笼原理时,我发现 - "在哈希表中不可避免地会发生冲突,因为可能的键的数量超过了数组中索引的数量。没有任何聪明的哈希算法可以避免这些冲突"。但是gperf难道不正是在做这件事吗? 请解惑。