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 :

Algo le plus rapide pour trouver une répétition ?


Sujet :

Algorithmes et structures de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Points : 61
    Points
    61
    Par défaut Algo le plus rapide pour trouver une répétition ?
    Bonjour

    Quelle serait l'algo le plus rapide pour trouver le caractère(0 à 255) qui se répète le plus dans un fichier ?

    La seule méthode que j'ai trouvé est de faire un tableau de 256 éléments et de parcourir le fichier octet par octet puis avec sa valeur aller dans la même position dans le tableau puis incrémenter la valeur.

    Mais quand on a un fichier d'une centaine de mb c'est long. :o

    Déplacé depuis le forum Assembleur par Alcatîz

  2. #2
    Membre émérite

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 075
    Points : 2 844
    Points
    2 844
    Par défaut
    Mmm
    C vrai que le parcours de tableau n'est pas particulièrement optimal.
    Je me tournerais vers un algo de tri pour faire ça moi comme ça au débotter
    Regarde dans le 3ème volume de Knuth Sorting and Searching là tu devrais pouvoir trouver des algos plus performants. Les algos de tris et de recherche sont très proches.
    A titre informatif ce sont de tels algos que j'utilise en perl pour déterminer le nombre de récurrences de tel ou tel mot dans un article du monde les articles et autres prépositions non comprises

  3. #3
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    La méthode que tu évoques est celle du tri par casiers qui est parfaitement adpatée à ton problème, c'est sans doute la plus rapide, d'autant que tu connais déjà le mini (0) et le maxi (255) des valeurs : un seul parcours du fichier et un parcours relativement rapide (256 éléments) du tableaux final.
    En génral les autres tris sont de l'ordre de n * log n dans le meilleur des cas, le tien est en n.
    Je ne crois pas que le fait que tu cherches uniquement la valeur maxi change grand chose.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  4. #4
    Membre averti

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 289
    Points : 342
    Points
    342
    Par défaut
    +1 pour Trap D.

    Je vois pas comment on pourrait faire plus efficace: on lit chaque caractère du fichier une seule fois, on ne fait pas de manipulations memoires (pas de creation d'objets)... A chaque caractere lu, c'est une indirection pour lire la valeur dans le tableau, une addition, puis on re-enregistre la valeur dans le tableau.
    Et à la fin, on parcourt linéairement le tableau (256 éléments, ça va vite) pour chercher le max.

    Même du point de vue matériel, un tableau de 256 octets (ou 256*n, n étant la taille du type entier que tu as choisie) tiendra facilement dans un cache processeur et, si tu lis ton fichier par blocs assez grands, tu limites les IO... (et pour un gros fichier, bah c'est l'OS qui gère le cache).

    Je serais étonné qu'on puisse trouver plus rapide...

Discussions similaires

  1. Langage le plus rapide pour une application web ?
    Par beninsky dans le forum Débuter
    Réponses: 2
    Dernier message: 04/05/2010, 21h29
  2. Réponses: 5
    Dernier message: 20/02/2010, 19h36
  3. Réponses: 1
    Dernier message: 03/01/2010, 14h36
  4. [XHTML] Moyen plus rapide pour mettre mes pages en XHTML
    Par Linoa dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 30/08/2005, 17h46
  5. Réponses: 16
    Dernier message: 19/05/2005, 16h20

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