如何解决选择具有最大数量不同元素的三个列表的最有效方法是什么?
给定一个列表列表,例如[[0,1],[1,3],[2,4,5],[3,7,9]]
,是否有一种有效的(比强行强制所有可能性更好)的方法来选择三个列表,以使所有三个列表中唯一元素的数量最大化?我只能找到启发式方法,最终导致与蛮力相同的最坏情况。
这是我的蛮力代码:
def maximum_number_of_elements_brute(list):
maximum = 0
maximum_combination = []
for a in range(len(list)):
for b in range(a,len(list)):
for c in range(b,len(list)):
number_of_elements = len(set(list[a] + list[b] + list[c]))
if number_of_elements > maximum:
maximum = number_of_elements
maximum_combination = [a,b,c]
return (maximum,maximum_combination)
应用于示例列表的函数的结果返回:
([0,2,8)
解决方法
这是maximum coverage problem。它是 NP-hard 的事实表明你不能比蛮力做得更好(尽管固定 k 为 3,渐近结果不成立)。当然,你可以做一些可能更快的分支定界:首先考虑最大的集合,如果你有一个至少与剩余集合一样大的联合,则停止搜索可以形成。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。