Algo décomposition en sommes d'entiers

Bonjour,

Je cherche un algorithme pour décomposer le nombre 45 en somme de n entiers non nuls (rangés dans l'ordre croissant) de toutes les manières possibles. Le nombre n varie de 1 à 45.

Je sens un problème de récursivité là-dessous.

En fait, la liste de toutes les possibilités m'irait très bien, même sans algorithme. Tout ce que je souhaite, c'est la placer dans un tableau constant pour la réutiliser.

Cordialement,
Netsabes.

Réponses

  • Bonsoir,

    Maple est ton ami ;-)

    with(combinat, partition);
    partition(45);

    J'espère que tu as Maple, puisque le résultat est une liste de 89134 partitions différentes de 45...

    Cordialement,

    Ritchie
  • Merci Ritchie,

    peux-tu m'envoyer ces partitions en fichier texte sur mon email sous la forme
    45
    44 1
    43 2
    43 3
    ...

    Sont-elles bien ordonnées (pas de doublons style "43 3" et "3 43") ?

    Merci d'avance.

    Sébatiduroc.
  • Maple sort une liste de listes... qui ne ressemble pas trop à ce que tu veux. Au mieux, je peux arriver à un truc comme ça :

    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

    1


    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2


    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2


    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2


    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2


    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2


    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2

    Cela te conviendrait-il? Je pose la question parce que la transformation sous cette forme prend quelques heures en Maple...

    Cordialement,

    Ritchie
  • Je ne me permettrais pas de te demander un tel boulot, mais ce que tu trouves semble convenir. Je vais essayer, je crois qu'il y a Maple à mon boulot.

    Merci encore.

    Sébatiduroc.

  • Bonjour,

    c'est un classique. Soit $P_{n, k}$ l'ensemble des partitions de $n$ contenant $k$ parts.

    On veut donc calculer $\cup_{1\le k \le n} P_{n, k}.$ Une partition de $P_{n, k}$ ou contient la valeur $1$, ou ne la contient pas. Dans le premier cas, on la construit donc en ajoutant $1$ a une partition de $P_{n-1, k-1}.$ Dans le deuxieme cas, on la construit en prenant une partition de $P_{n-k, k}$ et ajoutant $1$ a tous ses elements. (Il faut $n-k\ge k$ pour que ce soit possible).

    Tout cela donne le programme que vous trouverez dans la piece jointe.

  • Bonjour,

    c'est un classique. Soit $P_{n, k}$ l'ensemble des partitions de $n$ contenant $k$ parts.

    On veut donc calculer $\cup_{1\le k \le n} P_{n, k}.$ Une partition de $P_{n, k}$ ou contient la valeur $1$, ou ne la contient pas. Dans le premier cas, on la construit donc en ajoutant $1$ a une partition de $P_{n-1, k-1}.$ Dans le deuxieme cas, on la construit en prenant une partition de $P_{n-k, k}$ et ajoutant $1$ a tous ses elements. (Il faut $n-k\ge k$ pour que ce soit possible).

    Tout cela donne le programme que vous trouverez dans la piece jointe.5355
  • Aux administrateurs:

    pouvez-vous m'assister, SVP? D'abord en supprimant le message sans la piece jointe.

    En suite: il semble que la deuxieme piece jointe qui contient la source du programme ne s'affiche pas. Je vais essayer de l'ajouter a ce message.

    Finalment, voici la sorti du programme pour n=8:

    1 1 1 1 1 1 1 1
    1 1 1 1 1 1 2
    1 1 1 1 1 3
    1 1 1 1 2 2
    1 1 1 1 4
    1 1 1 2 3
    1 1 2 2 2
    1 1 1 5
    1 1 2 4
    1 1 3 3
    1 2 2 3
    2 2 2 2
    1 1 6
    1 2 5
    1 3 4
    2 2 4
    2 3 3
    1 7
    2 6
    3 5
    4 4
    8

    J'aimerais bien l'ajouter a mon message precedent.

    Il y a-t-il un moyen d'inclure un programme sous Perl directement dans un message qui contient du LaTeX? Il semble que c'est pas possible en ce moment. (J'ai essaye avec la commande "verbatim", qui ne donne pas les bons resultats.)

    Merci d'avance!

    Cordialement
  • Aux administrateurs:

    pouvez-vous m'assister, SVP? D'abord en supprimant le message sans la piece jointe.

    En suite: il semble que la deuxieme piece jointe qui contient la source du programme ne s'affiche pas. Je vais essayer de l'ajouter a ce message.

    Finalment, voici la sortie du programme pour n=8:

    1 1 1 1 1 1 1 1
    1 1 1 1 1 1 2
    1 1 1 1 1 3
    1 1 1 1 2 2
    1 1 1 1 4
    1 1 1 2 3
    1 1 2 2 2
    1 1 1 5
    1 1 2 4
    1 1 3 3
    1 2 2 3
    2 2 2 2
    1 1 6
    1 2 5
    1 3 4
    2 2 4
    2 3 3
    1 7
    2 6
    3 5
    4 4
    8

    J'aimerais bien l'ajouter a mon message precedent.

    Il y a-t-il un moyen d'inclure un programme sous Perl directement dans un message qui contient du LaTeX? Il semble que c'est pas possible en ce moment. (J'ai essayé avec la commande "verbatim", qui ne donne pas les bons resultats.)
    Merci d'avance!
    Cordialement
  • Bonsoir Marko

    Faire compiler du Perl par LaTeX est assez hasardeux ! Il faut au moins banaliser tous les $ ...
    Par contre tu peux joindre ton fichier après l'avoir zippé. Il restera en pièce jointe.
    Ceci étant ceux qui sont intéressés peuvent récupérer ton source avec clic droit sur l'image cassée, puis "sauver le lien sous ..."
    De toute façon, ton source est lisible sur ta première image.

    Alain
  • Bonjour Alain,

    Merci pour tes précisions. Je constate que mon premier message de hier soir, sans la pièce jointe et dont le texte est répété dans mon deuxieme message, s'affiche toujours.

    Je voudrais savoir si vous avez essayé d'inclure du Perl en utilisant la commande "verbatim." C'est assez fascinant. Ca marche, ou presque. Ca fonctionnerait sans les commandes "newline" ajoutées par votre serveur.

    Bien amicalement,
    Marko
  • Bonjour,

    Cet exercice consiste à écrire les différentes partitions d'un nombre n.

    Le nombre de partitions p(n) était le thème du sujet d'agreg externe analyse de 1992; en apothéose, dernière partie: le développement asymptotique de p(n) par Hardy et Ramanujan.
    p(3)=3; p(4)=5; p(5)=7; apparemment: p(8)=22.
  • Marko, tu les as tous; la suite p(n) est effectivement:
    1,2,3,5,7,11,15,22,30,42,56,77,101,...
    Ref:On-line encyclopedia of integer sequencies.
Connectez-vous ou Inscrivez-vous pour répondre.