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 :

Recherche d'un élément dans une liste triée (vitesse)


Sujet :

Algorithmes et structures de données

  1. #1
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut Recherche d'un élément dans une liste triée (vitesse)
    Bonjour,

    Je dois trouver un élément dans une énorme liste triée. Pourriez-vous me conseiller sur le choix de l'algorithme à utiliser? Je souhaiterais qu'il soit le plus rapide possible...

    Cordialement,
    Rodrigue
    Rodrigue

  2. #2
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 150
    Points : 121
    Points
    121
    Par défaut
    Le plus rapide que je connaisse est la recherche dichotomique puisque ta liste est triée

    bon courage

  3. #3
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Je confirme.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Points : 460
    Points
    460
    Par défaut
    Il y a encore moyen de faire mieux que la dichotomie O(n log n) en utilisant le principe des tables de hachage, mais il faut bien voir si les données triées autorisent un tel principe.

    Il existe de nombreuses implémentations de tables de hachage.

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 150
    Points : 121
    Points
    121
    Par défaut
    Citation Envoyé par Charlemagne
    Il y a encore moyen de faire mieux que la dichotomie O(n log n) en utilisant le principe des tables de hachage, mais il faut bien voir si les données triées autorisent un tel principe.

    Il existe de nombreuses implémentations de tables de hachage.
    La recherche dichotomique est de O(log n) puisque tu divises toujours par deux la longueur du tableau par (environ) deux à chaque traitement.

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Points : 460
    Points
    460
    Par défaut
    Sorry, j'ai écris trop vite, j'ai confondu avec la FFT ;-)
    O(n log n) aurait éte encore plus lent qu'une recherche sur tous les éléments !!
    Effectivement c'est O(log n)

    Avec un peu de chance c'est O(1) avec une bonne table de hachage

  7. #7
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Je confirme aussi ce qui a été suggéré : Dichotomie + hashage.
    Ce qui donnera la meilleure performance est de pouvoir détérminer via une fonction "ElementToHashTableIndex" qui pourra associer à un élement une valeur entiére (par exemle comprise entre 1 et 2**16) qui constituera un point d'entrée dans une table de hash qui donnera l'intervalle de la liste triée dans la quelle doit se faire la recherche.

    Tout le problème consiste à créér cette fonction "ElementToHashTableIndex" qui devra être croissante et qui assure une bonne répartition des éléments afin de minimiser autant que possible la largeur des intervalles.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  8. #8
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    je suis tout à fait d'accord avec la dichotomie qui est super efficace.
    La table de hashage marche aussi bien que vite, mais il faut voir le type de donnée triée. Si c'est des entiers, c'est un peu lourd à décomposer.

    Mais je pense que tu as là les deux meilleures méthodes
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  9. #9
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    Merci à tous pour vos réponses! Je vais essayer de coder ça ... vous n'auriez pas un exemple de code en C++ (sur la dichotomie) ?
    Rodrigue

  10. #10
    Membre habitué Avatar de Rodrigue
    Inscrit en
    Août 2002
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 487
    Points : 157
    Points
    157
    Par défaut
    C'est bon, c'est codé et ça fonctionne! (Je n'ai pas fait la table de hashage, je ne comprends pas bien le principe)
    Rodrigue

Discussions similaires

  1. Insertion d'un élément dans une liste simplement chainée triée (croissante)
    Par vayouva dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 14/11/2014, 09h29
  2. [TPW] Erreur lors de l'ajout d'un élément dans une liste chaînée triée
    Par sangimed dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 18/01/2013, 21h37
  3. Problème de recherche des éléments dans une liste.
    Par amine1980 dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 09/04/2011, 23h34
  4. [debutant] insertion d'éléments dans une List
    Par gwenou60 dans le forum Composants
    Réponses: 1
    Dernier message: 05/12/2005, 09h59
  5. contrôler l'absence d'un élément dans une liste donnée
    Par gendalf37 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 12/09/2005, 10h02

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