首页 >后端开发 >Python教程 >我们如何在Python中优雅地划分整数?

我们如何在Python中优雅地划分整数?

Linda Hamilton
Linda Hamilton原创
2024-11-06 08:40:02909浏览

How can we elegantly partition integers in Python?

Python 中的优雅整数分区

整数分区的任务涉及将给定数字分解为正整数之和,称为部分。一个常见的例子是对数字 4 进行分区,它可以表示为 1 1 1 1 或 1 1 2 或 2 2。

优雅的 Python 解决方案

解决由于需要一种优雅的方法,因此提出了一个名为partitions的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

该函数利用递归并产生给定数字n的所有可能的分区。它首先将 n 划分为单个部分(本身),然后递归地将 n-i 划分为大于或等于 i 的部分。

性能评估

与作为之前提出的函数,该解决方案在速度和内存使用方面都表现出显着改进:

import timeit

n = 20

# Original function
def nolen(n):
    """Original function for integer partitioning."""
    # implementation omitted for brevity

# Proposed 'partitions' function
def partitions(n, I=1):
    # implementation omitted for brevity

# Measure execution time
print("Original function (r0): ", timeit.timeit(lambda: r0 = nolen(n), number=100))
print("Proposed function (r1): ", timeit.timeit(lambda: r1 = list(partitions(n)), number=100))

print(f"Partitions are equal: {sorted(map(sorted, r0)) == sorted(map(sorted, r1))}")

建议的分区函数比原始函数大约快 1370 倍,同时使用的内存显着减少。

替代方法

虽然分区函数提供了一个高性能且优雅的解决方案,但 ActiveState 等平台上还存在其他选项:

  • [生成器对于整数分区(Python 食谱)](https://www.activestate.com/recipes/577676-generator-for-integer-partitions/)

结论

建议的分区函数为 Python 中的整数分区提供了一种高效且简洁的方法。它的优雅和速度使其成为寻求改进编码风格的程序员的宝贵工具。

以上是我们如何在Python中优雅地划分整数?的详细内容。更多信息请关注PHP中文网其他相关文章!

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