我的问题是,我们怎样才能申请5~7组的交集。假设每个集合都有一组元素请帮助我创建一个算法,这将是这个过程的复杂性。

最佳答案

假设集合的元素可以散列,并且您有一些散列键工具,比如字典(或者可以创建自己的散列键工具,这并不难):

List<Set<element-type>> sets;    \\your list of sets to intersect

int size = SUM{List[*].Count};  \\ size for the hash
Dictionary<element-type,int> Tally = New Dictionary<element-type,int>(size);

// Add all elements to the Tally hash
foreach set in sets
{
    foreach e in set
    {
        if (Tally.Exists(e))
            Tally[e]++;
        else
            Tally.Add(e,1);
    }
}

//Now, find the Tally entries that match the number of sets
foreach kvp in Tally.KeyValuePairs
{
    If (kvp.Value == sets.Count)
        // add the Key to output list/set
        Output.Add(kvp.Key);
}

这具有运行时复杂度o(n),其中“n”是所有集合中元素的数目。

10-08 14:24