【问题标题】:Floating point hash table浮点哈希表
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2018-01-18
    • 2010-10-31
    • 1970-01-01
    • 2023-03-31
    • 2020-05-31
    • 2019-07-14
    相关资源
    最近更新 更多