【问题标题】:Generate unique non repeating pairs in a list in O(n)在 O(n) 的列表中生成唯一的非重复对
【发布时间】:2016-07-17 07:39:21
【问题描述】:

我们如何生成唯一的非重复对,使得 (x,y) = (y,x) 不重复。

假设我们有一个列表[3,6,9]。那么,答案是(3, 6) (3, 9) (6, 9) 如果列表是[3,6]。那么答案是(3,6)

这可以使用 2 个 for 循环来完成,但我们希望最好在 O(n) 中完成(最多使用一个循环)

有没有一种pythonic的方式来做到这一点?

【问题讨论】:

  • 此任务无法在O(n) 中完成,其中n 是输入大小,也就是您的列表长度。

标签: list python-3.x combinations


【解决方案1】:

Pythonic 的方法是使用标准库生成器 (https://docs.python.org/2.7/library/itertools.html#itertools.combinations):

from itertools import combinations

for comb in combinations([3,6,9], 2):
    print(comb)

正如文档所说,组合的数量是n! / (2 * (n-2)!),我猜是O(n^2)。所以它不能在 O(n) 时间内完成。

【讨论】:

  • 那么这个问题没有 O(n) 的解决方案吗?
  • 如果n是原始列表的长度,那么没有。即使您神奇地知道答案并且只需将其放入列表中,也需要 O(n^2) 时间。
猜你喜欢
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
  • 2022-01-09
  • 2014-05-15
  • 2022-01-17
相关资源
最近更新 更多