【发布时间】:2014-05-30 11:48:50
【问题描述】:
我想使用浮点值作为键来构造查找表。当我使用给定的浮点键查询表时,我希望它返回键最接近查询键的值。
但是我事先不知道浮点键是否均匀分布。
例如,我的表可能是:
key value
1.0 "red"
1.25 "blue"
2.0 "green"
如果我查询 1.5,我想返回“蓝色”。
有没有办法构造表,使其具有 O(n) 内存和 O(1) 查找? (即哈希表)。如果我存储排序的键/值对,显然有一个 O(log(n)) 算法,但我很好奇这个界限是否可以改进。
【问题讨论】:
-
您是否知道 (1) 浮点值的范围,(2) 所涉及的有效位数或 (3) 两个值之间的最小允许距离/对数字计数的任何限制每个范围?
-
我认为如果没有非常具体的限制,这通常是不可能的。我只是使用二进制搜索。
-
如果我们谈论的是 IEEE 浮点数,那么它们以符号大小顺序表示,您可以针对 32 位(双精度数为 64)整数调整算法。
-
您的意思是“如果我查询 1.24,我想返回‘蓝色’”吗?您不能进行 O(1) 次最近邻搜索。
-
@Apriori Subnormals 在符号大小排序方面表现良好。
标签: algorithm floating-point hashtable