首页  >  文章  >  后端开发  >  如何让整数分区的 Python 代码更加优雅和高效?

如何让整数分区的 Python 代码更加优雅和高效?

Patricia Arquette
Patricia Arquette原创
2024-11-05 16:49:02873浏览

How Can Python Code for Integer Partitioning Be Made More Elegant and Efficient?

重温整数分区的优雅 Python 代码

在追求代码优雅的过程中,程序员常常寻求简洁高效的复杂问题解决方案。其中一个挑战是整数分区,即查找给定整数的所有分区为更小的正整数的任务。

完善解决方案

虽然之前的尝试提供了有效的解决方案,他们缺乏所需的优雅程度。匿名贡献者提出的更完善的解决方案既紧凑又速度快:

<code class="python">def partitions(n, I=1):
    yield (n,)
    for i in range(I, n//2 + 1):
        for p in partitions(n-i, i):
            yield (i,) + p</code>

性能比较

将此解决方案与 Nolen 的原始代码进行基准测试显示出显着的速度优势:

In [10]: %timeit -n 10 r0 = nolen(20)
1.37 s ± 28.7 ms per loop

In [11]: %timeit -n 10 r1 = list(partitions(20))
979 µs ± 82.9 µs per loop

其他解决方案

对于计算要求较高的情况,accel_asc 函数提供更快的性能:

<code class="python">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]</code>

但是,这是值得的请注意,此解决方案比更简单的分区实现需要更多的内存。

以上是如何让整数分区的 Python 代码更加优雅和高效?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn