Algorithm 从多个集合中的每个集合中找到至少包含一个元素的最小集合的算法是什么
所以,我有几个集合,我需要从所有集合中找到包含至少一个元素的集合的最小数目。为了使这更具体,我有一组服务器名称,每个服务器都有一个服务窗口。给定特定的持续时间,我希望找到覆盖所有给定服务器的最小服务窗口集 我已经有了代码,可以为每台所需的机器生成所有不重叠的N分钟时间段的列表。我本打算通过生成所有可能的组合,并选择唯一元素数量最少的组合来强制执行它,但这似乎效率极低,即使我首先将集合减少为所有主机的唯一窗口(特别是对于多个系统) 然后我想我会做一些事情,比如按照每个时隙中的主机数量对时隙进行排序,选择主机数量最多的时隙,然后为未分配的主机重新生成所有时隙的列表,选择最受欢迎的时隙,重新计算,等等,直到所有主机都被计算在内。虽然这会给我一个答案,但这并没有让我真正有机会选择最平衡的服务窗口集——第二个目标是找到一组在每个服务窗口的主机数量上具有最小标准偏差的服务窗口。因此,如果我有100台主机,我会优先选择每个窗口大约有50台主机的窗口,而不是执行上述算法可能找到的三个“98、1和1”窗口。但如果我的选项是“98、1、1”或10个窗口,每个窗口10个。我宁愿做三个Algorithm 从多个集合中的每个集合中找到至少包含一个元素的最小集合的算法是什么,algorithm,set,graph-algorithm,Algorithm,Set,Graph Algorithm,所以,我有几个集合,我需要从所有集合中找到包含至少一个元素的集合的最小数目。为了使这更具体,我有一组服务器名称,每个服务器都有一个服务窗口。给定特定的持续时间,我希望找到覆盖所有给定服务器的最小服务窗口集 我已经有了代码,可以为每台所需的机器生成所有不重叠的N分钟时间段的列表。我本打算通过生成所有可能的组合,并选择唯一元素数量最少的组合来强制执行它,但这似乎效率极低,即使我首先将集合减少为所有主机的唯一窗口(特别是对于多个系统) 然后我想我会做一些事情,比如按照每个时隙中的主机数量对时隙进行排序
无论如何,似乎可以用某种图形来表示这个问题,但在我的CS路径中,我更多地关注硬件而不是软件,解决图形问题从来都不是我的专长。因此,我甚至希望您能给我一些建议,告诉我在哪里可以阅读更多关于这个特定问题的信息,或者适当的搜索词 考虑与每个时间段关联的单个服务器集。您希望构造这些集合的子集,使其联合包含所有服务器。这被称为,它被证明是NP完全的。这意味着您无法比问题中描述的暴力方法做得更好,因此请尽可能减少来自所有主机的唯一窗口的数量。
另外,我不确定为什么要删除他的答案-我认为这是正确的。
这是集合覆盖优化问题,这是NP难问题。这意味着在最坏的情况下,你不能比暴力做得更好。也就是说,有一些集合的安排,你可以很快找到一个覆盖。但是你绝对可以简化这个问题,特别是在真实世界的数据中
首先,我要对数据进行几次转换。把你的集合想象成一个布尔网格。每列代表一个服务器,每行代表一个集合。单元格中的True表示该集合中存在服务器<>我考虑DP或A星搜索解决方案。我没时间了。我可能以后再画一个草图。好吧,知道有一个很好的理由我不能很快想出一个更有效的解决方案,这确实让我感觉好一点。但这只意味着,每当主机组发生变化时,计算机上就会出现一堆难看的代码和严重的攻击。谢谢你给它起了个名字。:)