我有一个整数的分区,我只想要那些所有值都不相等的分区。
对于前。
- Partitions of 3 are {1,1,1,1},{2,2},{3,1},{1,1,2} and {4}.
因此,所需的不等分区是{3,1}
和{4}
,因为它们不包含相同的元素。我可以过滤分区以获得所需的结果,但我想要一些有效的方法来查找所有分区,没有找到所有分区,它们没有相同的条款。我已经搜索了网络和StackOverflow,但没有说明我正面临的问题。每个想法都表示赞赏。感谢。
答案 0 :(得分:1)
我只会使用套装:
Promise.reject(new Error("a message"))
答案 1 :(得分:0)
好的,所以你想拥有速度吧?
我想速度来自最好的分区算法 with memorization ,而不是只有在数量相等的情况下进行预先流产的任何分区。
如果你在stackoverflow上搜索,你会发现很多好的,例如: https://stackoverflow.com/a/44209393/701049(包括基准) 要么 https://stackoverflow.com/a/18503368/701049(来自他的编辑)。
我将这么好的一个与Turn提供的过滤器结合起来。 如果你想要更高的速度,你也可以尝试在相同数字的情况下从函数返回None,和/或在C-Code中编写分区并编译它。
组合它可能看起来像这样(从链接复制的accel_asc()):
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def accel_asc(n):
a = [0 for i in range(n + 1)]
k = 1
y = n - 1
while k != 0:
x = a[k - 1] + 1
k -= 1
while 2 * x <= y:
a[k] = x
y -= x
k += 1
l = k + 1
while x <= y:
a[k] = x
a[l] = y
yield a[:k + 2]
x += 1
y -= 1
a[k] = x + y
y = x + y - 1
yield a[:k + 1]
N = 20
unequal_partitions = [p for p in accel_asc(N) if len(p) == len(set(p))]
print unequal_partitions
您也可以尝试使用Cython进行编译,以使其更快。