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 :

Tour de Hanoi


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Par défaut Tour de Hanoi
    Bonjour,

    peut-on paralléliser la résolution du problème des tours de hanoi ?

    ou a-t-on un algorithme qui permet de passer d'une position donnée à une autre ?

    Cordialement.

  2. #2
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    Salut,

    qu'est ce que tu voudrais paralléliser ?

  3. #3
    Membre expérimenté
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Par défaut
    Citation Envoyé par hiko-seijuro
    Salut,
    qu'est ce que tu voudrais paralléliser ?
    Le calcul de toutes les étapes pour arriver de la position de départ à celui d'arrivée.

    Comme on sait définir le n ième coup de la solution optimale,
    on pourrait utiliser 1 processus pour la partie 1 - n ième coup et
    l'autre pour n ième coup + 1 et le coup final.

  4. #4
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Par défaut
    Un des meilleurs exemples de la notion de récursivité
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    int other (int p1, int p2)
    { int u=10*p1+p2;
    	switch (u)
    	{
    	case 12: return 3;
    	case 21: return 3;
    	case 13:return 2;
    	case 31: return 2;
    	default: return 1;
    	}
    }
     
    void hanoi (int NombreDeDisques, int PiquetSource, int PiquetBut)
    {
    	if (NombreDeDisques==1)
    		printf("De %d vers %d \n",PiquetSource, PiquetBut);
    	else
    	{
    		hanoi(NombreDeDisques-1, PiquetSource, other(PiquetSource,PiquetBut));
    		printf("De %d vers %d \n",PiquetSource, PiquetBut);
    		hanoi(NombreDeDisques-1, other(PiquetSource,PiquetBut),PiquetBut);
    	}
    }
     
     
    void main ()
    { 
    	hanoi(3,3,1);
    }
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  5. #5
    Membre expérimenté
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Par défaut
    En fait, je n'ai ni besoin de la solution récursive ou itérative.
    J'ai déjà des implémentations.

    Je veux juste savoir s'il existe un algo qui puisse paralléliser une de ces solutions.

    En fait, je n'ai pas trouvé grand chose pour le moment sur ce sujet.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juin 2007
    Messages : 13
    Par défaut
    Bonjour,

    je pense qu'il est possible de paralléliser l'algorithme des tours de hanoi (récursif).
    A chaque fois que l'on passe dans la fonction hanoi, on effectue 2 calculs :
    • déplacer tous les anneaux au dessus de celui que l'on veut bouger vers l'autre piquet
    • déplacer tous les anneaux déplacés précédemment au dessus de l'anneau que l'on a bougé.

    Comme on connait l'état des piquets et des anneaux à chacun des appels récursifs, on peut appeler en parallèle la fonction hanoi récursivement au lieu de le faire séquentiellement.


    Au passage, Zavonen, ta fonction other pourrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int other (int p1, int p2)
    {
       return 6-P1-p2;
    }

  7. #7
    Membre confirmé Avatar de O( N )
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2006
    Messages : 126
    Par défaut
    Bonjour,

    Trés bon problème pour découvrir les complexités les tours de Hanoï...

    Paralléliser, je ne sais pas
    Tu ne veux pas la position d'arrêt ! Tu veux les étapes de construction, c'est çà ?
    Si tu choisies de découper en positions choisies:
    Position 1 :
    -
    --
    ---
    ----

    Position 2 :
    --- | -
    ---- | --

    Position 3 :
    | -
    | --
    ---- | ---

    Position finale :
    | -
    | --
    | ---
    |----

    Tu appelles plusieurs séquences avec chacune des conditions d'arrêt différentes
    (correspondant à chacune des positions données, par exemple...)

    Comme il existe un alogrithme d'une position initiale à la fin je crois qu'il passera par une position et
    traversera une autre position donnée jusqu'à la position finale.

    Je ne sais pas si en changeant les conditions d'arrêt
    tu peux lui dire de terminer sur une position voulue ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tour de Hanoi en java
    Par danger_man dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 25/04/2008, 07h57
  2. Réponses: 13
    Dernier message: 11/12/2006, 14h44
  3. Tours de Hanoi
    Par leakim56 dans le forum C
    Réponses: 11
    Dernier message: 23/06/2006, 13h02
  4. Tour de Hanoi
    Par issou dans le forum C
    Réponses: 9
    Dernier message: 22/10/2005, 19h43

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