【发布时间】:2014-12-11 15:26:46
【问题描述】:
我们正在编写 c# 程序,该程序将帮助我们删除一些不必要的数据中继器,并且已经在 Finding overlapping data in arrays 的帮助下找到了一些要删除的中继器。现在我们要检查一下,也许我们可以取消其他学期的一些中继器。问题是:
我们有数字数组
{1, 2, 3, 4, 5, 6, 7, ...}, {4, 5, 10, 100}, {100, 1, 20, 50}
有些数字可以在其他数组中重复,有些数字可以是唯一的并且只属于特定的数组。当我们准备从数组中丢失最多 N 个数字时,我们想删除一些数组。
解释:
{1, 2}
{2、3、4、5}
{2, 7}
我们准备从这些数组中丢失最多 3 个数字,这意味着我们可以删除数组 1,因为我们只会丢失数字“1”,它是唯一的数字。我们也可以删除数组 1 和 3,因为我们会丢失数字“1”、“7”或数组 3,因为我们只会丢失数字“7”并且它少于 3 个数字。
在我们的输出中,我们想要给出可以删除的最大数组数量,条件是我们将丢失少于 N 的条件,其中 N 是我们准备丢失的项目数。
【问题讨论】:
-
当你说你准备输三个号码时,你的意思是你可以选择任何三个号码吗?你有没有想过你会怎么做?
-
@Jim Mischel 不,我说我准备好输掉最多 3 个号码,无论其中哪个号码。我找不到任何有效的解决方案来解决这些问题。
-
但是你能找到any解决问题的方法吗?很多时候,即使是低效的解决方案也能帮助您找到更有效的方法。
-
@Jim Mischel 其中一个想法是采用具有最多重叠数的最短数组,然后简单地开始以不同的组合删除它们,并检查每次迭代后删除了多少数字。我们可以大量并行进行。
-
您是否真的需要所有组合,或者您是否计划在以后应用某些选择标准?如果是后者,那么找到一种首先考虑到这一标准的算法几乎肯定是个好主意。
标签: algorithm graph-algorithm array-algorithms