>  기사  >  백엔드 개발  >  Python에서 어떻게 정수를 우아하게 분할할 수 있나요?

Python에서 어떻게 정수를 우아하게 분할할 수 있나요?

Linda Hamilton
Linda Hamilton원래의
2024-11-06 08:40:02816검색

How can we elegantly partition integers in Python?

Python에서 우아한 정수 파티셔닝

정수 파티셔닝 작업에는 주어진 숫자를 부분이라고 알려진 양의 정수의 합으로 나누는 작업이 포함됩니다. . 일반적인 예는 숫자 4를 분할하는 것입니다. 이는 1 1 1 1 또는 1 1 2 또는 2 2로 표시될 수 있습니다.

Elegant Python Solution

우아한 접근 방식이 필요하기 때문에 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와 같은 플랫폼에는 다른 옵션도 있습니다.

  • [Generator 정수 파티션의 경우(Python 레시피)](https://www.activestate.com/recipes/577676-generator-for-integer-partitions/)

결론

제안된 파티션 함수는 Python의 정수 파티셔닝에 대한 효율적이고 간결한 접근 방식을 제공합니다. 우아함과 속도 덕분에 향상된 코딩 스타일을 원하는 프로그래머에게 귀중한 도구입니다.

위 내용은 Python에서 어떻게 정수를 우아하게 분할할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.