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 :

Le plus grand élément d'un tas


Sujet :

Algorithmes et structures de données

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 96
    Points : 51
    Points
    51
    Par défaut Le plus grand élément d'un tas
    Bonjour,

    cher pro, je veux trouver un algorithme qui renvoi le maximum d'un tas, j'ai trouvé une solution (naïve:parcourir l'arbre en comparant à chaque fois le nœud avec le max), mais il m'apparait que cette solution n'est pas optimale en effet le nombre de comparaison effectué est égale à la taille de l'arbre, or je sais très bien que le max est exclusivement parmi les feuilles de l'arbre.

    svp aidez moi à trouver la réponse


    Rappel:
    Un tas est un arbre binaire où un entier est associé à chaque noeud avec les propriétés suivantes: il est quasi complet (tous les niveaux sont remplis sauf éventuellement le dernier où tous les éléments sont rangés à gauche) et la valeur d'un noeud est inférieure ou égale à celles de tous ses fils.

  2. #2
    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 : 51
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Je ne pense pas qu'il y ait une méthode miracle pour trouver le max d'un tas-minimum, ni le min d'un tas-maximum.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    +1
    Par contre il existe des structures de tas-min-max, qui sont à la fois un tas-min et un tas-max.
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  4. #4
    Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 96
    Points : 51
    Points
    51
    Par défaut
    Bonjour,

    Citation Envoyé par pseudocode Voir le message
    Je ne pense pas qu'il y ait une méthode miracle pour trouver le max d'un tas-minimum, ni le min d'un tas-maximum.
    Donc a votre avis, il suffit de parcourir l'arbre et trouver le max ==> complexité O(taille) ?!!

    Merci pour vos réponse

  5. #5
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    Tu as l'air d'oublier une caractéristique essentielle des arbres complets: le nombre de noeuds est égal au nombre de feuilles - 1.

    Du coup, sur un arbre quasi-complet, O(taille) ou O(feuilles), c'est bonnet-blanc et blanc-bonnet.

    Par contre mon message veux bien dire que ça n'est pas optimal, si tu as autant besoin du max que du min alors il faut opter pour un tas-min-max au lieu d'un simple tas-min.
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  6. #6
    Membre éclairé
    Avatar de edfed
    Profil pro
    être humain
    Inscrit en
    Décembre 2007
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : être humain

    Informations forums :
    Inscription : Décembre 2007
    Messages : 476
    Points : 701
    Points
    701
    Billets dans le blog
    1
    Par défaut
    il n'existe surement pas d'algorithme magique pour cette operation, mais il existe des instructions SSE/SSE2/SSE4.1/AVX pour le faire plus vite sur les CPU X86, il faut s'en assurer en verifiant leur presence grace à CPUID.

    si l'algo doit etre appliqué pour un de ces processeurs, il sera bon d'imposer leur utilisation au compilateur.

    PMAXSB, PMAXUB, PMAXSW, PMAXUW, PMAXSD et PMAXUD permettent de comparer des octets, des word ou des dword simultanément par paires afin de detecter le maximum.
    PMAXSB permet de comparer 8 paires d'octets signés en une seule fois sur les registres SSE 128 bits, et 32 octets sur les registres AVX 256 bits.

    il faut d'abord extraire toutes les valeurs à comparer, puis les mettre sous forme de listes de 16 ou 32 octets (si ce sont des octets) avant d'effectuer l'operation.

    pour les word (16 bits) et dword (32 bits) le nombre de comparaisons simultanés sera moindre, mais toujours plus qu'une comparaison unique.

    il existe la meme chose pour le MIN.

    PMINxx, avec xx=SB, UB, SW, UW, SD, UD.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/10/2010, 15h27
  2. plus grand élément dans un tableau
    Par shaku dans le forum Macros et VBA Excel
    Réponses: 27
    Dernier message: 09/04/2009, 20h28
  3. Réponses: 7
    Dernier message: 06/08/2008, 14h59
  4. Plus Grand élément d'une matrice
    Par totoc1001 dans le forum MATLAB
    Réponses: 4
    Dernier message: 21/11/2006, 14h52
  5. Réponses: 3
    Dernier message: 16/12/2002, 16h12

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