使用浮点数/双打的Hashtables/Dictionaries

Joa*_*nge 2 dictionary hashtable data-structures

我在某处读到了类似于哈希表,字典的其他数据结构,但不是使用整数,而是使用浮点数/双精度等.

谁知道它们是什么?

Ree*_*sey 8

如果你的意思是使用浮点数/双精度作为哈希中的键,那很容易.例如,在.NET中,它只是使用Dictionary<double,MyValueType>.

如果你所说的哈希是基于double而不是int ....

从技术上讲,您可以将任何元素作为内部哈希.通常,这是使用int或long完成的,因为它们很快,并且散列算法很容易计算.

然而,散列实际上只是一个BitArray,所以任何事情都可行.除了可能允许更大的哈希值集合(例如:如果你的哈希值为8字节或更大的类型),除了int或long之外,实际上没有太大的优势.

  • 是的:从技术上讲,使用long作为哈希与使用double(64位数组)相同.如果你想要更长的时间,你可以使用128位类型,例如GUID(在.NET中相当于十进制).但是,对于整数类型,数学通常比浮点类型更快. (2认同)

Dav*_*ley 6

你的意思是钥匙?这让我觉得很棘手.

如果你将它们用作任意键,它们并不比整数更好.

如果您希望计算浮点值并使用它在哈希表中查找某些内容,那么您的生活非常危险.浮点数不具有无限精度,并且以两种略微不同的方式计算相同的事物可能导致结果中的微小差异.散列键依赖于每次都得到完全相同的东西,所以你必须小心圆,并且在任何时候以完全相同的方式进行舍入.顺便说一句,这比它听起来更棘手.

那么,你会用浮点哈希做什么?