Maison >développement back-end >Tutoriel Python >Comment partitionner élégamment des entiers en Python ?

Comment partitionner élégamment des entiers en Python ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-06 08:40:02911parcourir

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

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

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!

Déclaration:
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