python - 从向量中有效提取边列表的算法

标签 python algorithm data-structures

我有一个长列表(约 1000 万个元素),具有重复值的元素是成对的。我想从列表中提取对列表,例如

R = [1,3,1,6,9,6,1,2,3,0]

将吐出对列表

P = [[e1,e3],[e1,e7],[e3,e7],[e4,e6],[e2,e9]]

对于长列表,实现此目的的有效算法是什么?

最佳答案

根据值将索引组合在一起,然后使用组合遍历成对的索引。

from collections import defaultdict
from itertools import combinations

R = [1,3,1,6,9,6,1,2,3,0]
d = defaultdict(list)
for idx,item in enumerate(R,1):
    d[item].append(idx)

result = []
for indices in d.itervalues():
    result.extend(combinations(indices, 2))

print result

结果:

[(1, 3), (1, 7), (3, 7), (2, 9), (4, 6)]

填充 defaultdict 平均需要 O(len(R)) 时间。寻找组合是 O(N!) 时间,其中 N 是最大组中的索引数。

关于python - 从向量中有效提取边列表的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34533904/

相关文章:

python - 为什么我的 Sympy 中的 Rician 与 Scipy 中的 Rician 不匹配?

python - 如何使新语言出现在主页语言下拉列表中?

python - 查找子字符串周围的单词

algorithm - 具有需求的分组算法

javascript - 带有省略号的分页算法

c - 是否可以在不借助自引用结构的情况下构建链表?

java - 对等价类的元素进行分组的数据结构

python - Tensorflow GradientBoostedDecisionTreeClassifier错误: "Dense float feature must be a matrix"

algorithm - 需要想法使用优先级队列在数据结构中自定义算法

python - Beautifulsoup 和 Panda - 帮助修改多页代码