在数组中查找重叠数据

我们正在编写一个C#应用程序,它将帮助删除不必要的数据中继器。 转发器只能在其接收的所有数据都被其他转发器接收的情况下被移除。 下面将解释我们作为第一步所需要的:

例如,我有int数组的集合

一个。 {1,2,3,4,5}

湾 {2,4,6,7}

C。 {1,3,5,8,11,100}

它可能是数千个这样的arrays。 我需要找到可以删除的数组。 只有在其所有数字都包含在其他数组中的情况下,才能删除数组。 在上面的示例中,可以删除数组a,因为数字2和4在数组b中 ,数字1,3,5在数组c中

做这种手术的最佳方法是什么?

对于剩下的最小数量的数组,这不是优化的解决方案。

为数组成员创建丰度字典。 例如:

 1 => 2 2 => 2 3 => 2 4 => 2 5 => 2 6 => 1 7 => 1 ... 

检查每个数组,如果所有成员的数量大于1,则删除数组并减少字典中每个数字的计数。

获得剩余数组的最小数量(与不能删除更多数组的数组子集相对)是NP-hard set cover问题 。 但是,即使有数千个数组,如果将混合整数程序求解器应用于链接的维基百科文章中的公式,它也很有可能找到最佳解决方案。