浮点哈希表

时间:2014-04-15 21:58:55

标签: algorithm floating-point hashtable

我想使用浮点值作为键来构造查找表。当我使用给定的浮点键查询表时,我希望它返回其键最接近查询键的值。

但是我事先并不知道浮点键是否均匀分布。

例如,我的表可能是:

key     value
1.0     "red"
1.25    "blue"
2.0     "green"

如果我查询1.5,我想回来"蓝色"。

有没有办法构造表,以便它有O(n)内存和O(1)查找? (即哈希表)。如果我存储了已排序的键/值对,那么显然是一个O(log(n))算法,但我很好奇是否可以改进该边界。

1 个答案:

答案 0 :(得分:1)

您可以忽略您的密钥是浮点数这一事实,因为它实际上不会影响答案。如果您的输入是32位(相当于float)或64位(相当于double)整数,答案将是相同的。而且,我相信答案是'不'。

为了找到最近的邻居,您需要按键进行排序。如果你有一个32位或64位密钥(它可能有助于澄清哪些)这意味着你真的别无选择,只能拥有一个排序数据结构(树?堆?排序数组?)你做了一个O (log(n))搜索。

很容易获得对特定条目的恒定时间访问,但是获得对特定条目的最近邻居的恒定时间访问要么需要具有40亿条目(用于浮动)或魔术的查找表。