10

我们正在编写一个 C# 应用程序,该应用程序将有助于删除不必要的数据重复器。只有在它接收到的所有数据都被其他转发器接收到的情况下,才能移除转发器。我们需要的第一步解释如下:

例如,我收集了 int 数组

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

湾。{2, 4, 6, 7}

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

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

进行此类操作的最佳方法是什么?

4

2 回答 2

4

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

为数组成员制作丰度字典。例如:

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

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

于 2014-12-02T20:10:58.763 回答
4

获得最小数量的剩余数组(与不能删除更多数组的数组子集相反)是 NP 硬集覆盖问题。然而,即使有数千个数组,如果您将混合整数程序求解器应用于链接的 Wikipedia 文章中的公式,它也很有可能找到最佳解决方案。

于 2014-12-02T20:36:12.737 回答