Comment partitionner élégamment des entiers en Python ?

Linda Hamilton
Libérer: 2024-11-06 08:40:02
original
816 Les gens l'ont consulté

How can we elegantly partition integers in Python?

Partitionnement d'entiers avec élégance en Python

La tâche de partitionnement d'entiers consiste à diviser un nombre donné en une somme d'entiers positifs, appelés parties . Un exemple courant est le partitionnement du nombre 4, qui peut être représenté par 1 1 1 1 ou 1 1 2 ou 2 2.

Solution Python élégante

Pour répondre au besoin d'une approche élégante, une fonction Python nommée partitions a été proposée :

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
Copier après la connexion

Cette fonction utilise la récursivité et donne toutes les partitions possibles d'un nombre n donné. Il commence par partitionner n en une seule partie (lui-même), puis partitionne récursivement n-i en parties supérieures ou égales à i.

Évaluation des performances

Par rapport à une fonction proposée précédemment, cette solution présente des améliorations significatives à la fois en termes de vitesse et d'utilisation de la mémoire :

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))}")
Copier après la connexion

La fonction de partition proposée est d'environ 1370 fois plus rapide que l'original tout en utilisant beaucoup moins de mémoire.

Approches alternatives

Bien que la fonction de partitions fournisse une solution performante et élégante, d'autres des options existent sur des plateformes comme ActiveState :

  • [Générateur de partitions entières (Recette Python)](https://www.activestate.com/recipes/577676-generator-for-integer-partitions/)

Conclusion

La fonction de partitions proposée offre une approche efficace et concise du partitionnement d'entiers en Python. Son élégance et sa rapidité en font un outil précieux pour les programmeurs recherchant un style de codage amélioré.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!