【发布时间】:2018-05-21 23:10:13
【问题描述】:
最好用例子来解释。如果 python 列表是 -
[[0,1,2,0,4],
[0,1,2,0,2],
[1,0,0,0,1],
[1,0,0,1,0]]
我想选择 两个子列表,这将产生出现的零的最大总和 - 其中总和将按如下方式计算
SUM = No. of zeros present in the first selected sub-list + No. of zeros present in the second selected sub-list which were not present in the first selected sub-list.
在这种情况下,答案是 5。(第一个或第二个子列表和最后一个子列表)。 (请注意,不要选择第三个子列表,因为它在第三个索引中存在零,这与我们必须选择的第一个/第二个子列表中的相同,并且它的总和为 4,如果我们考虑最后一个子列表)
如果我们要在大输入上应用哪种算法最合适?有没有比 N2 时间更好的方法来做到这一点?
【问题讨论】:
-
这在我看来是 n^2。您需要将每个列表与
(n-1)其他列表进行比较。我会将每个列表转换为看起来像[x==0 for x in sublst]并在它们上映射 XOR,对结果求和。 -
您能否尝试重新解释您的示例。我不太明白为什么第三个子列表失败了
-
@AdamSmith n!比n^2差很多,枚举对不考虑顺序是n(n-1)~n^2,即n以下的值的总和而不是它们的乘积
-
@JaredGoguen bleh,今天是星期一,谢谢指正:)
-
你说“条件是它们不在同一个位置”。这到底是什么意思呢?假设输入是
[[0, 1], [0, 0], [3, 4]]。预期的输出是什么?[0, 0]与任何其他列表相结合,因为它在不同的地方有最多的零?或者[0, 0]与[0, 1]结合起来根本不是有效的输出,因为它们共享一个 0 作为第一个元素?或者 是[0, 0]+[0, 1]一个有效的输出,但它只算 1 零?
标签: python algorithm list permutation