Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah kita boleh membahagikan integer secara elegan dalam Python?

Bagaimanakah kita boleh membahagikan integer secara elegan dalam Python?

Linda Hamilton
Linda Hamiltonasal
2024-11-06 08:40:02911semak imbas

How can we elegantly partition integers in Python?

Pembahagian Integer dengan Keanggunan dalam Python

Tugas pembahagian integer melibatkan pemecahan nombor tertentu kepada jumlah integer positif, dikenali sebagai bahagian . Contoh biasa ialah membahagikan nombor 4, yang boleh diwakili sebagai 1 1 1 1 atau 1 1 2 atau 2 2.

Penyelesaian Python Elegan

Untuk menangani masalah memerlukan pendekatan yang elegan, fungsi Python bernama partition telah dicadangkan:

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

Fungsi ini menggunakan rekursi dan menghasilkan semua partition yang mungkin bagi nombor n yang diberikan. Ia bermula dengan membahagi n sebagai bahagian tunggal (sendiri) dan kemudian membahagikan n-i secara rekursif kepada bahagian yang lebih besar daripada atau sama dengan i.

Penilaian Prestasi

Berbanding dengan fungsi yang dicadangkan sebelum ini, penyelesaian ini mempamerkan peningkatan ketara dalam kedua-dua kelajuan dan penggunaan memori:

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))}")

Fungsi partition yang dicadangkan adalah lebih kurang 1370 kali lebih pantas daripada yang asal sambil menggunakan memori yang kurang ketara.

Pendekatan Alternatif

Walaupun fungsi partition menyediakan penyelesaian yang berprestasi dan elegan, pilihan lain wujud pada platform seperti ActiveState:

  • [Generator Untuk Pembahagian Integer (Resipi Python)](https://www.activestate.com/recipes/577676-generator-for-integer-partitions/)

Kesimpulan

Fungsi partition yang dicadangkan menawarkan pendekatan yang cekap dan ringkas untuk pembahagian integer dalam Python. Keanggunan dan kelajuannya menjadikannya alat yang berharga untuk pengaturcara yang mencari gaya pengekodan yang dipertingkatkan.

Atas ialah kandungan terperinci Bagaimanakah kita boleh membahagikan integer secara elegan dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn