>  기사  >  백엔드 개발  >  정수 분할을 위한 Python 코드를 어떻게 더 우아하고 효율적으로 만들 수 있습니까?

정수 분할을 위한 Python 코드를 어떻게 더 우아하고 효율적으로 만들 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-05 16:49:02871검색

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으로 문의하세요.