【问题标题】:Is there a way to map a list of integers to a unique number or a unique hash?有没有办法将整数列表映射到唯一数字或唯一哈希?
【发布时间】:2015-10-21 17:44:40
【问题描述】:

整数列表的排列也应该保留在哈希中——即,包含不同顺序的相同数字的列表应该有不同的哈希。

这样做的一种方法是将整数列表连接成一个字符串,但如果列表很大,这可能是一个昂贵的比较测试。

上下文:如果我已经对 5 个大型数组进行了“分析”和哈希处理,我将能够快速检查传入的数组是否是新的。

【问题讨论】:

    标签: arrays performance hash integer comparison


    【解决方案1】:

    https://en.wikipedia.org/wiki/Pigeonhole_principle

    “在数学中,鸽笼原理指出,如果将 n 件物品放入 m 个容器中,且 n > m,那么至少一个容器必须包含多于一件物品”

    当然可以创建一个唯一的数字,只是它非常大。

    考虑

    [1,2,3]
    

    一个简单的列表,但是为了确保我们的鸽子有足够的洞,我们需要在每个槽中为最大的整数留出空间,所以假设每个项目有 4 个字节,我们需要一个 12 字节的整数来存储唯一地散列,或 ~3.4028237e+38 个不同的值。这只是 3 个整数。

    不,有效的散列很少是唯一的,但好的散列不太可能发生相似值的冲突。

    要回答有关检查存在性的问题,请考虑以下几点:

    如果你有一个包含 n 项的数组,为了对它进行哈希处理,你需要执行 n 步。为了检查是否存在,您最多需要 n 个步骤依次检查每个项目。

    在任何一种情况下,您将花费大约相同的时间比较数组。

    【讨论】:

      【解决方案2】:

      数组结构似乎是索引区分元素的完美选择,或者您可以使用元素列表,其中元素在插入之前分配了索引值。

      永远不要将字符串用作列表结构,因为它有自己的属性,比如不变性(在 Java 的情况下)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-23
        • 2014-05-11
        • 2011-02-15
        • 1970-01-01
        • 2013-09-12
        • 1970-01-01
        • 2011-04-10
        • 2014-11-29
        相关资源
        最近更新 更多