我们正在编写一个C#应用程序,它将帮助删除不必要的数据中继器。只有在接收到的所有数据被其他中继器接收的情况下,才能删除中继器。作为第一步,我们需要的是下面的解释:
例如,我收集了int数组。
a. {1、2、3、4、5} b. {2、4、6、7} c. {1、3、5、8、11、100}
可能是数千个这样的数组。我需要找到可以删除的数组。只有在所有数字都包含在其他数组中时,才能删除数组。在上面的示例中,可以删除数组a,因为它的数字2和4位于数组b中,数字1、3、5位于数组c中。
做这样的手术最好的方法是什么?
发布于 2014-12-02 20:10:58
这是而不是的优化解决方案,只剩下最少的数组。
为数组的成员制作丰富字典。例如:
1 => 2
2 => 2
3 => 2
4 => 2
5 => 2
6 => 1
7 => 1
...
检查每个数组,如果所有成员的丰度大于1,则删除数组并减少字典中每个数字的计数。
发布于 2014-12-02 20:36:12
获得剩余数组的最小数量(相对于不能删除更多数组的数组子集)是NP硬集合覆盖问题。然而,即使有数千个数组,如果将混合整数程序求解器应用到链接Wikipedia文章中的公式中,也很有可能找到最佳解决方案。
https://stackoverflow.com/questions/27257896
复制相似问题