【发布时间】:2016-10-17 17:38:06
【问题描述】:
例如,如果输入列表是
[1, 2, 3, 4]
我希望输出是
[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
如果可能,我想要一个比使用两个 for 循环的蛮力方法更好的解决方案。我该如何实现?
【问题讨论】:
-
n 个元素的集合有 2^n 对组合。所有解决方案都需要指数级的时间来生成所有组合;嵌套的 for 循环将使您处于最快解决方案的恒定因子内。除非你只是在寻找更紧凑的东西。
-
@lungj 我已经有一段时间没有正式学习数学了,但是你从哪里得到
2^n的数字?订购的对是 4! /(4 - 2)! (== 12) 和无序对是 4 选择 2 (== 6) -
@brianpck 哎呀。你是对的。它是 O(n^2)。
标签: python list combinatorics