정수 분할을 위한 우아한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!