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

Java Discussion :

Recherche dichotomique d'une ligne dans un fichier


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 114
    Par défaut Recherche dichotomique d'une ligne dans un fichier
    Bonjour,

    j'entreprends de coder une recherche dichotomique pour rechercher des lignes dans un fichier contenant des lignes triées, trop gros pour être chargé en mémoire. Avant de commencer je voudrais avoir l'avis d'experts Je pense utiliser la classe FileReader, et les méthodes mark(), skip(), reset() et read(byte[] b) pour accéder aux données itération après itération. Cela vous semble-t-il être une bonne solution ?

  2. #2
    Membre Expert

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Par défaut
    Il te faudra au préalable de toute recherche effectuer une mémorisation des débuts de chaque ligne, sinon tu aura du mal à déterminer la position du milieu de l'intervalle.

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 969
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 969
    Par défaut
    Hie,

    Si les lignes sont de longueur différentes, une recherche dichotomique ne te servira à rien, car, dans le meilleur des cas, tu auras lu N lignes si la ligne cherchée est à la position N.

    Autant alors faire une simple recherche linéaire dans le fichier, et, dans ce cas, le seul intérêt d'avoir classé le fichier est de pouvoir déterminer que la ligne cherchée n'existe pas avant d'avoir lu tout le fichier, sauf si par malchance c'est la dernière du fichier.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 114
    Par défaut
    Bonjour,

    je pensais procéder comme cela :

    1. Je prend un bloc au milieu du fichier que je lis (je détermine où lire par rapport à la taille du fichier en octet).
    2. Je considère la première ligne entière de ce bloc.
    3. Si elle est avant celle que je cherche je réitère en cherchant après, sinon en cherchant avant.

    Je réitère le processus jusqu'à une certaine fourchette dans laquelle trouver la ligne, puis je lis les données de la fourchette entière et je trouve (ou pas) la ligne.

    Comme ça je n'ai pas à mémoriser les débuts de ligne.

    Maintenant je ne comprends pas la remarque de droggo... Pourrais-tu m'expliquer s'il te plaît, et me confirmer que cela s'applique à la façon de procéder que je viens de présenter ?

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 969
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 969
    Par défaut
    Fio,

    Non, vu comme ça, ma remarque ne s'applique pas, je ne pensais qu'à un traitement ligne par ligne.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 114
    Par défaut
    Juste au cas où cela intéresse quelqu'un, je viens de le découvrir à l'instant, certaines classes ne supportent pas les méthodes mark() et reset() dont FileReader et FileInputStream. En revanche BufferedInputStream les supporte. Pouvez-vous confirmer que je n'ai pas dit de bêtise ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/02/2015, 10h34
  2. Réponses: 1
    Dernier message: 25/11/2014, 16h49
  3. Recherche d'une ligne dans un fichier texte
    Par ChristineGuerre dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 06/08/2014, 09h34
  4. Rechercher une ligne dans un fichier
    Par Knux14 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 19/06/2012, 09h23
  5. Supprimer une ligne dans un fichier
    Par sbeu dans le forum Langage
    Réponses: 3
    Dernier message: 13/05/2003, 10h30

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