Home Reading Searching Subscribe Sponsors Statistics Posting Contact Spam Lists Links About Hosting Filtering Features Download Marketing Archives FAQ Blog From: R. Bastian free.fr> Subject: Re: partitions d'un entier (maths) Newsgroups: gmane.comp.python.french Date: Thursday 14th April 2011 16:26:22 UTC (over 7 years ago) ```On Thu, 14 Apr 2011 17:41:10 +0200 Victor Stinner scribit: > > Fait déjà voir ton code actuel. > > Victor > Voilà: ------------------------------------- #-*-coding:utf-8-*- # partitions.py """ source du python: http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-07/3329.html From: Nick J Chackowsky (mediocre_person_at_hotmail.com) Date: 07/24/04 La proposition originale a été amendée par les deux fonctions ex-commentées - mais je ne les apprécie pas. Autres infos: http://www.numericana.com/answer/numbers.htm#partitions """ def partitions(n, maximum=None, minimum=1): """Create a list of all of n's partitions au code de Chakowsky j'ajoute les options maxi et mini """ coll = [] if maximum == None: xpart = [n] elif maximum < n: xpart = [maximum, n-maximum] coll.append(xpart) # p steps through coll, looking for those which are not all 1s p = 0 while p != len(coll): xpart = coll[p] # check each element of this partition i = 0 while i != len(xpart): # if there is a non-1, then create a new partition if xpart[i] > minimum: hi = xpart[i] - minimum lo = minimum while hi >= lo: newpartition = xpart[:i] + [hi] + [lo] + xpart[i+1:] # newpartition may be a copy of an existing one!!! newpartition.sort() newpartition.reverse() if not newpartition in coll: coll.append(newpartition) hi -= 1 lo += 1 i += 1 p += 1 return coll if __name__ == "__main__": import time def test4(): """ teste permutepartition() Le partage de 96, minimum 24 est très rapide : 88 cas trouvés en moins de 0.002 sec. Le partage de 360 prend énormément de temps même si le minimum est de 48: 9688 sec pour 176175 ensembles""" gn = 360 t0 = time.time() e = partitions(gn, minimum=48) t1 = time.time() print e print len(e), "Durée du calcul", t1 - t0 def test5(): " avec maximum (calcul en 0.005 sec)" gn = 96 t0 = time.time() e = partitions(gn, maximum=64, minimum=16) t1 = time.time() print e print len(e), "Durée du calcul", t1 - t0 test5() ----------------------------------- Ce code fonctionne ; je voulais simplement dire que si une telle fonction, améliorée par l'équipe Python, était ajoutée à 'itertools', ça pourrait servir. (ça me sert pour établir des suites de durées différentes, la somme des durées de chaque suite devant être finalement égales). -- René Bastian www.pythoneon.org www.musiques-rb.org -- Gerez vos abonnements aux listes de diffusion : http://listes.aful.org```
CD: 12ms