在O(1)时间内检查元素数量是否相等的数据结构?

时间:2014-04-06 23:52:16

标签: algorithm data-structures

检查不同类型对象的元素数量是否相同的最佳数据结构是什么?

例如,如果我有

2 a's

3 b's

3 c's

不同类型对象的元素数量不相同。

如果我有

2 a's

2 b's

2 c's

那么这是一样的。

允许您在O(1)时间执行此操作的最佳数据结构是什么?您将如何实现它?

2 个答案:

答案 0 :(得分:3)

一种方法是使用两个词典,以便能够动态地在O(1)中完成。

第一个将每个类型映射到一个计数,{a:2,b:3,c:3}。第二个将每个计数映射到具有该计数的一组类型。 {2:{A},3:{B,C}}。如果第二个字典的大小小于2(0或1)那么显然所有类型具有相同的计数,如果不是这种情况那么在该字典中将至少有两个键 - 项对,假设该字典当计数改变时更新。

  • 添加类型只是意味着将其添加到每个字典中。
  • 删除类型只是意味着从每个字典中删除它。
  • 更新类型需要首先通过删除先前的计数(从第一个字典获得)并添加当前计数来更新第二个字典,然后更新第一个字典。

答案 1 :(得分:0)

Dictionary<Type, int> typeCounts = new Dictionary<Type, int>();

// read and store type counts

Type type = typeof(A);

if (typeCounts.Contains(type))
{
 typeCounts[type]++;
}
else
{
 typeCounts.Add(type, 1);
}

// populate type counts by type and finally:

if (typeCounts[typeA] == typeCounts[typeB])
{
 // so on
}