在php中查找整数的不等分区

时间:2017-07-08 07:23:16

标签: python python-2.7 python-3.x

我有一个整数的分区,我只想要那些所有值都不相等的分区。

对于前。

- Partitions of 3 are {1,1,1,1},{2,2},{3,1},{1,1,2} and {4}.

因此,所需的不等分区是{3,1}{4},因为它们不包含相同的元素。我可以过滤分区以获得所需的结果,但我想要一些有效的方法来查找所有分区,没有找到所有分区,它们没有相同的条款。我已经搜索了网络和StackOverflow,但没有说明我正面临的问题。每个想法都表示赞赏。感谢。

2 个答案:

答案 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进行编译,以使其更快。