我们正在编写一个C#应用程序,它将帮助删除不必要的数据中继器。转发器只能在其接收的所有数据被其他转发器接收的情况下被删除。下面将解释我们作为第一步所需要的内容:
我有int数组的集合,例如
一个。 {1,2,3,4,5}
湾{2,4,6,7}
℃。 {1,3,5,8,11,100}
可能有数千个此类阵列。我需要找到可以删除的数组。只有在其所有数字都包含在其他数组中的情况下才能删除数组。在上面的示例中,可以删除数组 a ,因为数字2和4在数组 b 中,数字1,3,5在数组 c
进行此类操作的最佳方法是什么?
答案 0 :(得分:4)
这是不优化的解决方案,可以保留最少数量的数组。
为数组成员创建丰度字典。例如:
1 => 2
2 => 2
3 => 2
4 => 2
5 => 2
6 => 1
7 => 1
...
检查每个数组,如果所有成员的数量大于1,则删除数组并减少字典中每个数字的计数。
答案 1 :(得分:4)
获得剩余数组的最小数量(而不是可以删除更多数组的数组子集)是NP-hard set cover problem。然而,即使有数千个阵列,如果你将一个混合整数程序求解器应用于链接的维基百科文章中的公式,它也很有可能找到最佳解决方案。