快速散列算法,用于将浮子集合的映射/量化到一小组排序的浮点上

cs.stackexchange https://cs.stackexchange.com/questions/128376

  •  29-09-2020
  •  | 
  •  

使用我的应用程序,我有

  • 集合x:数千个浮点数,值范围[0,1],不排序。
  • 集合Y:11浮子从[0,1]的范围,分类。
  • X的大小是已知的。让它是l。

目标是量化x并将其映射到y上,以便我们获得x的次数的散列阵列。然后,y将被量化到指向它的10个离散的东西上。

一个例子让它更清晰,

  • Y = [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
  • X = [0.678, 0.124, ..., 1.0, ., 0.013, 0.475]

我希望算法输出为基于0的指数:

  • H(Y[0]) = H(0.678) = 6
  • H(Y[1]) = H(0.124) = 1
  • H(Y[n-2]) = H(0.013) = 0
  • H(Y[n-1]) = H(0.475) = 4

尝试

天真地,我尝试了线性和二进制搜索用于将x中的每个元素定位在Y中的元素之间,以便在y中的相邻元素之间找到。

但是,性能对我的应用程序不够好。该量化发生在慢速计算的实时线程中,这是不希望的。

问题

这种散列/量化的最佳方式是什么? x未排序。

谢谢!

有帮助吗?

解决方案

带x,乘以10,000,舍入到最接近的整数。在普通的c,z=(int)中(x次10000.0)。

有10,000个可能的z值。对于z的大多数值,您可以从z确定索引。所以创建一个有10,000个条目的表。在表格中,存储索引i如果您可以证明x应映射到i,知道z和store -1如果您无法证明这一点。

结果,您可以获得正确的值,可能在10,000个值的9,980中,然后使用您的剩余算法在500值中使用任何慢速算法。

ps。相同的表格尺寸将用于双精度数字。无论表尺寸如何,只有很少的值x无法使用此方法正确映射,也许是10或20。如果您拍摄大小10,000,那么99.8%或99.9%映射正确,0.1%或0.2%需要一个慢速算法。双重发生了同样的事情。您可以使用1000个条目,然后10或20个失败的输入将是1%或2%。

和一件好事是,这种方法将工作,但是y值是分布式的。只有在y值的数量较大,那么你可能想要增加表大小。

许可以下: CC-BY-SA归因
不隶属于 cs.stackexchange
scroll top