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 :

Tri d'un fichier tres volumineux


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2
    Par défaut Tri d'un fichier tres volumineux
    Bonjour !
    Alors, je vous explique mon problème :
    Pour trier un fichier, ce que je faisait avant etait simple, je recupere les entiers de mon fichier dans une arraylist et je trie simplement avec sort


    Mais mon problèeme, c'est que les fichiers que je devrai lire peuvent etre tres tres volumineux , et ne tiennent plus en mémoire lorsqu'on les stocke dans des arraylist

    D'ou ma question : que préconisez vous pour remédier à ce problème ?
    J'ai aussi pensé à couper le fichier en plusieurs petits morceaux, les trier et les fusionner, mais le problème est justement la fusion

    Merci d'avance pour votre réponse

  2. #2
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    je ne sais pas trop, mais je pense que java n'est pas le maitre dans ce domaine.

    Peut etre que tes perf et la memoire se porteraient mieux en utilisant un script perl par exemple ...

    Sinon pour le faire en java, à part comme tu dis, découper, trier, fusionner je vois pas trop. Par contre, même si tu fonctionne par fusion successive, à un moment ou à un autre (la dernière fusion) tu va avoir besoin en mémoire de toutes les valeurs ... ce qui revient à ton problème de départ ...

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2
    Par défaut
    Citation Envoyé par in
    Par contre, même si tu fonctionne par fusion successive, à un moment ou à un autre (la dernière fusion) tu va avoir besoin en mémoire de toutes les valeurs ... ce qui revient à ton problème de départ ...
    Oui le problème est justement là
    et pour l'instant, je n'ai pas eu d'idée vraiment géniale pour y remédier

  4. #4
    Membre émérite Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Par défaut
    Bonsoir,

    Il y aurait eu plus de réponses sur le forum algo

    Tu dois utiliser un tri externe. Renseigne toi sur le tri par fusion naturelle.

    bon courage.

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Par curiosité : quel est la taille de ces fichiers ? Et comment tu les lis ?

    a++

  6. #6
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    ce que tu peux faire sinon c'est utiliser ton fichier à trier en lecture et considérer chacunes de ses lignes commes leséléments d'un tableau.

    Aces la classe RandomAccesFile tu peux accéder à n'importe quelle ligne sans trop de souci, ce que tu peux donc faire est considérer un tri qui trie soit par le début, soit par la fin (car l'écritures dans les fichiers n'est pas dynamique i.e. tu peux pas écrire à la ligne 2 sans effacer tout le contenu) et à chaque fois que tu possède un élément que tu sais trié tu l'écris dans le deuxièe fichier. Je pense par exemple au tri par tas,de complexité n log n et qui trie par la fin. Ce qui va passer en mémoire sera donc la seule ligne du fichier considérée, ça devrait aller.
    Un inconvéniant majeur néanmoins : parcourir tout le tems le fichier source, et écrire à chaque fois dans le fichier cible le nouvel élément va considérablement ralentir le programme à cause de la faible vitesse des IO.

    Bon à mon avis ça devrait marcher ce que je te dis là, mais j'en suis pas vraiment sur, tape pas si ça foire lol

Discussions similaires

  1. Modules pour fichiers XML volumineux
    Par contexte dans le forum Modules
    Réponses: 1
    Dernier message: 04/05/2006, 07h39
  2. Tri d'un fichier
    Par Premium dans le forum C
    Réponses: 14
    Dernier message: 15/01/2006, 22h55
  3. tri d'un fichier texte
    Par ben127 dans le forum C
    Réponses: 7
    Dernier message: 23/12/2005, 20h03
  4. Recherche dans un fichier texte volumineux.
    Par Actarus69 dans le forum VB 6 et antérieur
    Réponses: 17
    Dernier message: 27/07/2005, 17h39
  5. Réponses: 43
    Dernier message: 29/11/2004, 16h27

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