Hash 如何分配唯一值来表示唯一整数列表

Hash 如何分配唯一值来表示唯一整数列表,hash,integer,set,Hash,Integer,Set,我需要比较两个唯一整数列表,为每个列表分配一个唯一的值来表示它的整数。我可以应用哪种方法/算法来解决这个问题,这种方法/算法计算量不太大,并且生成一个相对较短的id/哈希集 两个列表: 具有一组从1到1000的唯一整数 订购 例如: l1 = [1,2,3,4...55,57...999] l2 = [1,2,3,4...54,56...999] l1缺失56,而l2缺失55。 在这种情况下,我需要知道的是列表不完全相同,因此我可以更新l2。在注释后更新 请参阅下面的解释,了解为什么不能使

我需要比较两个唯一整数列表,为每个列表分配一个唯一的值来表示它的整数。我可以应用哪种方法/算法来解决这个问题,这种方法/算法计算量不太大,并且生成一个相对较短的id/哈希集

两个列表:

  • 具有一组从1到1000的唯一整数
  • 订购
例如:

l1 = [1,2,3,4...55,57...999]
l2 = [1,2,3,4...54,56...999]
l1缺失56,而l2缺失55。
在这种情况下,我需要知道的是列表不完全相同,因此我可以更新l2。

在注释后更新

请参阅下面的解释,了解为什么不能使用哈希代码为“每个列表指定一个表示其整数的唯一值”

但是,哈希代码可能很有用。假设您为每个列表创建一个哈希代码。您需要确保在计算哈希代码之前对列表中的项目进行排序,因为顺序在哈希代码计算中肯定很重要。这不一定会为每个列表生成唯一的哈希代码,但如果两个列表的哈希代码不相同,则列表肯定不同。如果哈希代码相同,则列表可能相同。代码如下所示:

bool AreListsIdentical(list1, list2)
{
    if (list1.hashCode != list2.hashCode)
    {
        // hash codes are different, so lists are definitely not identical
        return false;
    }
    // hash codes are equal. Lists might be identical.
    if (list1.Count != list2.Count)
    {
        // lists have different numbers of items. Definitely not identical.
        return false;
    }
    // have to compare individual items
    for (int i = 0; i < list1.Count; ++i)
    {
        if (list1[x] != list2[x])
        {
            return false;
        }
    }
    return true;
}
bool AreListsIdentical(列表1、列表2)
{
if(list1.hashCode!=list2.hashCode)
{
//散列码是不同的,所以列表肯定不相同
返回false;
}
//哈希代码相等。列表可能相同。
if(list1.Count!=list2.Count)
{
//列表中的项目数不同。绝对不相同。
返回false;
}
//必须比较各个项目
对于(int i=0;i

先前的答案

您有多个列表,每个列表都包含范围为1到1000的唯一数字。你不会说每个列表有多大,但为了便于说明,我会说每个列表包含10个数字

你也不会说在列表中顺序是否重要。列表
[1,7,99206]
是否与
[99,7206,1]
相同?不管怎样,我都会给你看计算结果

每次10件物品的排列(订单事项)数量为9.56E+29。组合数(顺序无关紧要)为2.63E+23。这些都是巨大的数字

你说你想要一个“相对较短的id”。我们可以很容易地用12个字符的字符串来表示64位的值,所以假设你想要创建一个64位的哈希代码。有1.84E+18个可能的64位值

可能的排列比可能的散列码多100万亿倍。组合的数量是散列码的100000倍

应用,你有n件东西要放在m个盒子里。由于n>m,至少有一个框将包含多个项目。每个列表不可能有唯一的64位值


(事实上,假设一个好的散列函数,每个散列码将代表大致相同数量的不同列表。)

集合中整数的范围?理论上更糟的是,当您要求对大范围整数进行短哈希时,会发生哈希冲突。您尝试过任何代码吗?一般来说,您所要求的是不可能的。但是,如果您提供更多信息,例如列表的大小以及这些集合中的整数范围,我们可能会为您提供解决方案。@JimMischel每个列表都有从1到1000的唯一整数。是否在列表中显示许多整数?最多1000个?此外,列表中的顺序是否重要?是否认为
[1,2,3,4]
[4,2,3,1]
不同?你希望有多少份名单?“相对较短”的id有多长?32位数字?64位数字?一个固定长度的字母数字序列?谢谢你的输入。我已经修改了我的问题以包括更多的信息