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 binaire: optimization


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut Recherche binaire: optimization
    Bonjour,

    Lors d'une recherche binaire (dichotomique), par exemple dans un vecteur d'1 million d'éléments (~=2^20), il y a jusqu'à 20 itérations. La probabilité pour que l'élément à trouver le soit dans les 10 premières itérations est de 0,001 (un sur mille, ~1000=2^10). Autant dire que ces 10 premières itérations sont (presque) toujours réalisées.

    La proposition d'optimization consiste à créer un tableau ne contenant que le sous-ensemble des éléments nécessaires à ces 10 premières itérations. Le but est que les infos de ce tableau, pour lesquelles l'accès est très fréquent, soient regroupées afin qu'elles tiennent dans un block du cache data de niveau 1 du processeur. Qu'en pensez-vous, y aurait-il un gain de performance ?

    On peut déplacer le problème en plaçant le tableau sur disque et en laissant le millième du tableau sur lequel l'accès est le plus fréquent en mémoire vive. Intuitivement le gain me parait évident: les dix premières itérations se font en mémoire, puis les 10 suivantes aussi après une seule lecture sur disque d'un block d'un millième de la taille du tableau complet.

    D'une manière plus générale, de tout tableau, en fonction du nombre et de la taille de ses éléments, on pourrait extraire récursivement le sous-tableau des éléments fréquemment accédés lors d'une recherche binaire.
    Par exemple, sur un tableau d'un milliard d'éléments, on extrait les mille éléments susceptibles d'être atteint par les 10 premères itérations. Chacun de ces mille éléments sont à la tête d'un tableau d'un million d'éléments duquel on peut à nouveau extraire mille éléments. Lors d'un recherche binaire, l'élément à trouver le serait en ne lisant, au plus, que 3 blocks de mille éléments (sur 1 milliard).

    Merci.

  2. #2
    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 : 46
    Localisation : Etats-Unis

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

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

    mmm... j'ai un doute sur le gain :s
    Pour trouver un élément dans un tableau de mille éléments, il faut dix itérations.
    Avec ton idée, il faut trois fois dix itérations pour trouver un élément dans un tableau de un milliard, ce qui est équivalent au nombre d'itération nécessaires pour trouver un élément dans un tableau de un milliard d'éléments (~2^30).
    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.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Par défaut
    Je pense aussi que le gain de temps n'est pas forcement flagrant.

    Tu vas forcement gagner du temps puisque tu stocke en RAM des informations sur ta structure. Mais ce gain de temps sera de moins en moins flangrant si la taille de ton tableau initial augmente.

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut
    Je crois que vous ne m'avez pas compris.
    Le but n'est pas de remettre en cause la recherche binaire (le nombre d'itérations ne sera pas diminué), mais de constater que le traitement des informations se fait par block sur disque, dans les caches des processeurs aussi, afin de répartir différemment les informations pour tirer parti de ce traitement par block.

    En reprenant l'exemple du tableau sur disque de 1 milliard d'éléments, l'implémentation tel quel de l'algo binaire provoquera 30 lectures sur disque et 30 itérations. Dans ma proposition, il n'y aurait que 3 lectures (mais toujours 30 itérations). On bénéficie ainsi des spécificités hardware qui "aime" que les infos soient regroupées en petits blocks.

    Vous me suivez ?

  5. #5
    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
    Citation Envoyé par camboui Voir le message
    Vous me suivez ?
    Heu... quelle difference entre ton idée et un arbre binaire qui serait stocké suivant un parcours en largeur ?
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Heu... quelle difference entre ton idée et un arbre binaire qui serait stocké suivant un parcours en largeur ?
    Un arbre n'est pas un tableau. A chacun ses avantages et ses inconvénients. J'aimerais bénéficier des avantages des deux.
    Et effectivement, dans un arbre binaire (bien fait) les éléments "milieu" sont groupés. Par contre, lorsqu'on veut un accès séquentiel...
    Je cherche donc une manière optimal d'accéder de manière directe, séquentielle et dichotomique à des infos.



    Citation Envoyé par ToTo13 Voir le message
    Bonjour,

    ok sur le principe... mais est ce vraiment un gain si nécessaire ?
    Pour ma part je ne suis pas assez calé au niveau hardware pour savoir si c'est vraiment utile.
    Plus qu'utile ou nécessaire, est-ce que le gain est significatif ? Je ne sais pas, c'est pour ça que je le demande... Et je suis curieux d'avoir la réponse. Intuitivement je pense que oui.

    Si les fabricants de hardware se décarcasse pour nous mettre des mémoires caches un peu partout, technologie que je crois volontiers très complexe, c'est que les gains en performances sont bien réels. Si, de plus, on peut cibler nos implémentations en tenant compte de cette technologie afin de maximaliser ses bénéfices, pourquoi se priver ?

    Bref, au lieu de jouer les avocats du diable, encouragez-moi

  7. #7
    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 : 46
    Localisation : Etats-Unis

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

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

    ok sur le principe... mais est ce vraiment un gain si nécessaire ?
    Pour ma part je ne suis pas assez calé au niveau hardware pour savoir si c'est vraiment utile.
    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.

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

Discussions similaires

  1. [XL-2010] Recherche binaire recursive
    Par salim514 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/06/2013, 09h16
  2. Arbre de recherche binaire nombre de noeud
    Par koda29 dans le forum Ada
    Réponses: 3
    Dernier message: 01/06/2010, 10h06
  3. Réponses: 5
    Dernier message: 13/04/2009, 18h05
  4. Arbre de recherche binaire
    Par dword2add dans le forum C++
    Réponses: 5
    Dernier message: 03/12/2007, 15h51
  5. [Arbre binaire de Recherche]
    Par Giovanny Temgoua dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 06/02/2004, 11h45

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