Informatique Non classé

Procrastination pythonesque

Freedog demandait un algorithme pour calculer les partitions dont parle eljj dans son dernier billet. Comme j’ai du temps à perdre (…), j’ai programmé ça vite fait en python :

import copy
def partition(n):
    list=[]
    if (n==1):
        list.append([1])
        return list
    list.append([n])
    list_previous=partition(n-1)
    for l in list_previous:
        list_increment=copy.deepcopy(l)
        list_increment.append(1)
        list_increment.sort()
        if not list_increment in list:
            list.append(list_increment)
        for i in xrange(len(l)):
            list_addition=copy.deepcopy(l)
            list_addition[i]=list_addition[i]+1
            list_addition.sort()
            if not list_addition in list:
                list.append(list_addition)


    return list

l=partition(9)
print l
print len(l)

Qui renvoie ici :

[[9], [1, 8], [1, 1, 7], [2, 7], [1, 1, 1, 6], [1, 2, 6], [3, 6], [1, 1, 1, 1, 5], [1, 1, 2, 5], [2, 2, 5], [1, 3, 5], [4, 5], [1, 1, 1, 1, 1, 4], [1, 1, 1, 2, 4], [1, 2, 2, 4], [1, 1, 3, 4], [2, 3, 4], [1, 4, 4], [1, 1, 1, 1, 1, 1, 3], [1, 1, 1, 1, 2, 3], [1, 1, 2, 2, 3], [1, 1, 1, 3, 3], [2, 2, 2, 3], [1, 2, 3, 3], [3, 3, 3], [1, 1, 1, 1, 1, 1, 1, 2], [1, 1, 1, 1, 1, 2, 2], [1, 1, 1, 2, 2, 2], [1, 2, 2, 2, 2], [1, 1, 1, 1, 1, 1, 1, 1, 1]]
30

ce qui a l’air assez raisonnable. Cela me permet de découvrir l’existence de la balise html <pre> , et de la tester. Je suis maintenant fin prêt pour écrire plein de choses sur python et son utilisation … en biologie 😉

About the author

Tom Roud

Blogger scientifique zombie

7 Comments

Répondre à Ch'Tom X