相关疑难解决方法(0)

懒洋洋地产生排列

我正在寻找一种算法来生成集合的排列,这样我就可以在Clojure中创建它们的惰性列表.即我想迭代一个排列列表,其中每个排列都不计算,直到我请求它,并且所有排列不必一次存储在内存中.

或者我正在寻找一种给定某个集合的算法,它将返回该集合的"下一个"排列,以这种方式在自己的输出上重复调用该函数将循环遍历原始集合的所有排列,一些订单(订单无关紧要).

有这样的算法吗?我见过的大多数排列生成算法都倾向于一次性生成它们(通常是递归的),这些算法不能扩展到非常大的集合.Clojure(或其他函数式语言)中的实现会有所帮助,但我可以从伪代码中找出它.

algorithm functional-programming clojure combinatorics

83
推荐指数
2
解决办法
2万
查看次数

python itertools.permutations的算法

有人可以itertools.permutations在Python标准的lib 2.6中解释例程算法吗?我不明白为什么会这样.

代码是:

def permutations(iterable, r=None):
    # permutations('ABCD', 2) --> AB AC AD BA BC BD CA CB CD DA DB DC
    # permutations(range(3)) --> 012 021 102 120 201 210
    pool = tuple(iterable)
    n = len(pool)
    r = n if r is None else r
    if r > n:
        return
    indices = range(n)
    cycles = range(n, n-r, -1)
    yield tuple(pool[i] for i in indices[:r])
    while n:
        for i in reversed(range(r)):
            cycles[i] -= 1
            if cycles[i] == 0: …
Run Code Online (Sandbox Code Playgroud)

python algorithm permutation

26
推荐指数
1
解决办法
6448
查看次数

std :: next_permutation的摊销复杂性?

我刚刚读到了关于next_permutation复杂性的另一个问题,虽然我对响应(O(n))感到满意,但似乎算法可能有一个很好的摊销分析,显示出较低的复杂性.有谁知道这样的分析?

c++ algorithm big-o stl permutation

19
推荐指数
2
解决办法
6650
查看次数

带有绑定值的python itertools排列

我想找到一个有绑定值的向量的有效排列.

例如,如果perm_vector = [0,0,1,2]我想获得输出的所有组合[0,0,1,2], [0,0,2,1], [0,1,2,0]等等,但我不想获得[0,0,1,2]两次,这是标准itertools.permutations(perm_vector)给出的.

我试过以下但是当它perm_vector grows在len 时它真的很慢:

vectors_list = []
for it in itertools.permutations(perm_vector):
    vectors_list.append(list(it))
df_vectors_list  = pd.DataFrame( vectors_list)
df_gb = df_vectors_list.groupby(list(df_vectors_list.columns)) 
vectors_list = pd.DataFrame(df_gb.groups.keys()).T
Run Code Online (Sandbox Code Playgroud)

实际上,问题是更加普遍的"加速"性质.主要时间用于创建长向量的排列 - 即使没有两面性,创建12个唯一值的向量的排列也需要"无穷大".是否有可能迭代地调用itertools而不访问整个排列数据但是处理它的串?

python performance python-itertools pandas

6
推荐指数
1
解决办法
373
查看次数

Python 数组中 1 和 0 的组合

我想在二维数组中组合 1 和 0,如下所示:

[[ 1, 1, 1, 1, 0, 0, 0, 0 ],
 [ 1, 1, 1, 0, 1, 0, 0, 0 ],
 [ 1, 1, 1, 0, 0, 1, 0, 0 ],
 [ 1, 1, 1, 0, 0, 0, 1, 0 ],
 [ 1, 1, 1, 0, 0, 0, 0, 1 ],
 .
 .
 .
]
Run Code Online (Sandbox Code Playgroud)

这意味着四个 1 和四个 0 的组合。我查看了itertools模块的permutations()and combinations(),但找不到任何合适的函数来执行这种组合。

python combinations python-itertools python-2.7

3
推荐指数
1
解决办法
1770
查看次数

迭代相同的列表两次,避免在python中重复

我有一个列表[1,2,3,4,5],我用for循环迭代两次.

for i in list:
    for j in list:
        print(i,j)
Run Code Online (Sandbox Code Playgroud)

我不关心i和j的顺序,因此我收到了很多重复.例如1,2和2,1对我来说是"相同的".对于1,4和4,1以及3,5和5,3等同样的事情.

我想删除这些副本,但不明白我应该怎么做.

python list duplicates

1
推荐指数
1
解决办法
2078
查看次数