给定情况下的良好哈希函数是什么
what is the good hash function for given situation?
在
二维平面中给出了一个点,我想计算最大共线点,为此我计算了所有可能的线斜率及其截距。为了解决这个问题,我尝试构建一个哈希表,但我找不到一个哈希函数,通过它我可以轻松地将所有共线点指向一个哈希键中。所以帮我找出适合这种情况的哈希函数吗?
这是不可能的,因为共线性不是传递的。 即,假设 A B 和 C 位于一条线上(即共线)。因此,A B 和 C 应该获得相同的哈希键。接下来,C D和E也位于另一条线上。因此,C D 和 E 也应该获得相同的哈希键。因此,A B 接收与 D 和 E 相同的哈希键,这是错误的,因为这些点不是共线的。
此外,共线性是在点集上定义的,所以我上面的定义相当模糊。 也就是说,你不能说A和B是共线的(嗯,你可以,但如果你只考虑两个点,每对点都是共线的)。
您可以做的是将共线点集保存在哈希图中。然后,一个好的哈希函数将仅由斜率 s 和纵坐标截距 i 组成。例如,您可以使用 s * 31i。此哈希图可用于向集合添加新点,并最终计算集合的大小以检索您的答案。
你也可以考虑一种基于霍夫变换的算法。Hough 变换允许您通过计算具有给定斜率和截距(或线与原点的角度和距离)的线中落下的点数来检测图像中的线。因此,在您的特定情况下,您可以将每个距离/角度对的投票存储在二维矩阵中,然后从该矩阵中获取最大值。这将为您提供最大数量的共线点。如果您允许近似值,那么您可以找到一个小矩形网格,而不是寻找单个值,提供最大值的总和。
相关文章:
- 如何为位集找到/实现一个好的哈希函数
- 对于短字符串来说,这是一个很好的哈希函数吗?
- 我在C++中使用提升哈希函数将 3 个双精度组合成一个面临冲突的哈希
- 无冲突的哈希函数
- Qt5 哈希函数在 Windows 7 和 Windows10 上不会返回相同的哈希
- 解决由于在哈希函数中使用了不完整的类型而导致的编译失败
- 使用 Murmur2 64 位哈希函数生成会导致冲突的输入
- 错误:哈希函数必须可使用键类型的参数进行调用
- unordered_set是否适合存储矢量<int>元素的数据结构?如果是这样,我将如何实现哈希函数?
- 为什么C++哈希函数的返回类型是 std::size_t,而不是独立于平台的类型?
- 哈希函数计算
- 哈希函数中同一键的不同值和良好的哈希值排序
- 将 C# 哈希函数转换为C++
- 如何创建用于生成噪声的哈希函数
- 插入不从哈希函数中检索键
- 简单的 C++11 哈希函数无法编译
- 对于这个英语单词列表来说,什么是好的哈希函数?
- std::bitset 哈希函数算法
- 如何生成伪随机 32 字节字符串以用作加密哈希函数中的盐?
- C unordered_map自定义的哈希函数碰撞