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 spécial pour distribuer valeurs triées


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2002
    Messages : 36
    Par défaut Algorithme spécial pour distribuer valeurs triées
    Bonjour,

    Pourriez vous me donner une piste pour résoudre le problème suivant:

    J'ai une liste (sous forme de pile) de nombres constituées de n éléments dans un ordre aléatoire, que je dois dispatcher dans m autres piles (m < n).

    Le but est de trouver un algorithme qui permet de dépiler les éléments de la pile principal pour mettre dans les m autres piles, en faisant en sorte que les nombres se retrouvent dans l'ordre décroissant de leur valeur dans chacune des m piles.

    Je sais que suivant les cas, il est impossible d'avoir les valeurs dans l'ordre dans toutes les m piles, mais qu'il y ait le minimum d'"erreurs"... et sans utiliser une pile "poubelle" dans la quelle il y a toutes les erreurs et dans les autres elle soit triée correctement. J'aimerais que le nombre d'erreur soit plus ou moins égal dans chacune.

    Pour être clair, une erreur est lorsque la valeur précédente dans la pile m est plus petite que la valeur empilée. (on désire que ce soit dans l'ordre décroissant)

    Merci

    Valentin

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    si je ne me trompe pas, mon algo est O(n ^2), n étant le nombre d'éléments de la pile initiale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    tant que pile_init est non vide faire
      val <- depiler()
      rechercher dans la liste des piles déjà créées la pile dont le dernier est la plus petite valeur plus grande que val
       si la recherche échoue alors
          creer une nouvelle pile 
       fin si
       empiler val dans la pile trouvée
    fin tant que
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2002
    Messages : 36
    Par défaut
    Merci pour cet algo, je l'ai déjà implémenté mais n'est pas très efficace...

    J'ai oublilé de préciser que la pile principal était en fait implémenté sous forme de liste, il est donc possible de prédire les prochaines valeurs pour optimiser les déplacements dans les autres piles...

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Citation Envoyé par Vulvulune Voir le message
    J'ai oublilé de préciser que la pile principal était en fait implémenté sous forme de liste, il est donc possible de prédire les prochaines valeurs pour optimiser les déplacements dans les autres piles...
    Dans ce cas là, ce n'est plus une pile
    Comment est organisé exactement cet "objet" ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2002
    Messages : 36
    Par défaut
    Vi effectivement, mais je parlais de pile car il faut l'utiliser comme tel car l'on dépile les valeurs pour les mettres dans les m autres piles...

    Par contre il est implémenté comme un bête tableau, donc on peut le parcourir pour savoir les prochaines valeurs... mais il faut le dépiler dans l'ordre...

    Et dans ton algo proposé tu as mis:
    si la recherche échoue alors
    creer une nouvelle pile
    fin si


    Mais ça ne joue pas, car je suis limité à un nombre limité de piles, mais pour le début effectivement tant qu'il reste des piles vides c'est utilisable.

    Merci

  6. #6
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    J'aimerais que le nombre d'erreur soit plus ou moins égal dans chacune.
    On peut maintenir pour chaque pile un "compteur" d'erreurs, et si on ne peut pas mettre un element correctement dans une pile, alors on le met dans la pile qui compte le moins d'erreur.

    Par contre il est implémenté comme un bête tableau, donc on peut le parcourir pour savoir les prochaines valeurs...
    Pas sûr qu'on puisse trouver une solution optimale sans faire une énumération complète des possibilités. Par contre on doit pouvoir construire une heuristique (par exemple en calculant la probabilité qu'un élément cause une erreur dans une pile)
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

Discussions similaires

  1. Algorithme QR pour les valeurs propres
    Par jimmypoker dans le forum Mathématiques
    Réponses: 2
    Dernier message: 12/12/2009, 17h17
  2. Aide pour requête de Tri assez spécial (Oracle)
    Par Chips dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/04/2005, 10h56
  3. Algorithmes génériques pour affichage de primitives 2D.
    Par Selenite dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 02/01/2005, 20h20
  4. syntax sql spéciale pour postgresql ???
    Par krimson dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 05/05/2004, 15h23
  5. Droits pour distribuer une application
    Par aliasjcdenton dans le forum JBuilder
    Réponses: 4
    Dernier message: 17/03/2003, 13h15

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