Maison  >  Article  >  développement back-end  >  Comment pouvons-nous obtenir un partitionnement d'entiers élégant et efficace en Python ?

Comment pouvons-nous obtenir un partitionnement d'entiers élégant et efficace en Python ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-07 21:50:03375parcourir

How Can We Achieve Elegant and Efficient Integer Partitioning in Python?

Code Python élégant pour le partitionnement d'entiers

Partitionner un entier en entiers positifs plus petits présente un défi informatique qui a déclenché le développement de diverses solutions. Pour améliorer le style et l'efficacité du codage, nous recherchons une approche élégante pour résoudre ce problème.

Une de ces solutions, proposée par un intervenant, est la fonction partitions() :

<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>

Cette fonction génère toutes les partitions d'un entier n en commençant par des parties de taille non inférieure à I. Par rapport à la fonction de Nolen, partitions() est considérablement plus rapide et donne des résultats plus petits.

Cependant, les deux fonctions sont beaucoup plus lentes que accel_asc (), qui utilise un algorithme ascendant accéléré. accel_asc() utilise une boucle itérative pour partitionner l'entier, ce qui entraîne à la fois la vitesse et l'efficacité de la mémoire.

Pour référence ultérieure, vous pouvez explorer des solutions Python supplémentaires pour le partitionnement d'entiers sur la page Générateur pour partitions entières (recette Python) d'ActiveState. .

Notre discussion met en évidence les différentes approches disponibles pour résoudre le problème de partitionnement d'entiers en Python, répondant à différents besoins en matière de vitesse, d'efficacité de la mémoire et d'élégance du style de codage.

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