【问题标题】:What is the most efficient way to select three lists with maximum number of different elements?选择具有最大不同元素数量的三个列表的最有效方法是什么?
【发布时间】:2021-07-10 19:32:53
【问题描述】:

给定一个列表列表,例如@ 987654321@,是否有一种有效的(比强制所有可能性更好)的方法来选择三个列表,从而使所有三个列表中唯一元素的数量最大化?我只能找到启发式方法,最终导致与蛮力相同的最坏情况。 这是我的蛮力代码:

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,3], 8)

【问题讨论】:

  • 您需要最大化什么?三个选定列表中的元素数量,唯一元素的数量,还是它们的总和?
  • @jfaccioni 问题标题显示不同元素的最大数量
  • @wim 和正文读取选择三个列表,使得所有三个列表中的元素数量最大,因此我感到困惑。
  • 如果是最大总和,或者不考虑唯一性的最大数量,那么问题将是微不足道的。因此,最大化数量的唯一元素是唯一有意义的 IMO 解释。
  • 改善您的问题的建议: 1. 展示您的蛮力和/或启发式代码,作为有效方法需要击败的示例以及正确结果的示例。 2. 修改示例,使其成为一个不平凡的案例(在此示例中,第一个列表已经是第二个列表的子集,所以这里没有太多可做的)。 3. 说明在解决方案不唯一的情况下您要做什么 - 返回所有可能的解决方案,还是只选择任何一个?

标签: python list selection


【解决方案1】:

这是maximum coverage problem。它是 NP-hard 的事实表明,你不能比蛮力做得更好(尽管固定的 k 为 3,渐近结果不成立)。当然,您可以进行一些可能更快的分支定界:首先考虑最大的集合,如果您的联合至少与其余集合一样大,则停止搜索可以形成。

【讨论】:

    猜你喜欢
    • 2014-01-26
    • 2021-07-11
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 2022-08-13
    • 2013-09-28
    • 1970-01-01
    相关资源
    最近更新 更多