IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Algorithme de Heap en Python


Sujet :

Algorithmes et structures de données

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 7
    Points : 13
    Points
    13
    Par défaut Algorithme de Heap en Python
    Bonjour à tous,
    Je vous sollicite car j'essaie éperdument de faire marcher un algorithme qui me permettrait d'avoir toutes les permutations et de les insérés dans une liste.
    En clair en terme de pseudo code mon algorithme consiste à faire cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    fin=[1,2,3]
    resultat=[]
     
    def echanger(liste, i, j):
        liste[i], liste[j] = liste[j], liste[i]
     
    #VERSION RECURSIVE QUI BEUG encore
    def Permut(liste, n):
      if n==1 :
        return liste
      else :
        for i in range (1,n):
          Permut(liste,n-1)
          if n%2==0 :
            echanger(liste,i,n-1)
            resultat.append(list(liste))
          else:
            echanger(liste, 0,n-1)
            resultat.append(list(liste))
    Le pseudo-code est simplement : (J'essaye d'implémenter l'algorithme de permutation de Heap)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Permutation (Entier : n, Liste A):
     
    		Si n = 1 alors 
    			Retourner la liste Agorithme
    		Sinon
    			Pour i allant de 0 à n-1
    				Permuter(n-1,A)
    				Si n est pair alors :Permut(fin,3)
       resultat
    => [[1, 2, 3], [3, 2, 1], [3, 2, 1], [1, 2, 3]]   
    					echanger(A[i],A[n-1])
    				Sinon	
    					echanger(A[0],A[n-1])
    				Fin Si
    			Fin For
    			Permuter(n-1,A);
    		Fin Si
    En clair j'ai essayé de le faire avec des listes en variables globales mais par exemple quand je tape : Permut(fin,3) avec 3 pour donner la taille de la liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Permut(fin,3)
       resultat
    => [[1, 2, 3], [3, 2, 1], [3, 2, 1], [1, 2, 3]]
    SI vous avez une solution, ou plutôt une piste ça serait vraiment cool ! Merci d'avance.

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 271
    Points : 13 536
    Points
    13 536
    Par défaut
    Bonjour

    La quantité d'ordre de n objets est n! (factorielle) !
    Il ne faut pas que tu permutes beaucoup d'objets si tu veux que ton ordi suive

    Pourquoi ton "i" va de 1 à n-1 au lieu de 0 à n-1 ?

  3. #3
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 309
    Points : 12 817
    Points
    12 817
    Par défaut
    Bonjour,

    Si c'est en python, pourquoi réinventer la roue ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> import itertools
    >>> list(itertools.permutations([1, 2, 3]))
    [(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]
    Et en consultant la doc, tu peux voir d'autres approches de l'algo...

Discussions similaires

  1. Algorithme de Prim en Python
    Par Noranour dans le forum Général Python
    Réponses: 3
    Dernier message: 08/02/2017, 14h27
  2. recherche d'algorithme de hough sous python
    Par Leanaa dans le forum Programmation multimédia/Jeux
    Réponses: 6
    Dernier message: 22/06/2012, 10h09
  3. Réponses: 3
    Dernier message: 12/02/2010, 18h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo