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 :

Compression de chaîne


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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 Compression de chaîne
    Bonjour,

    je cherche à déterminer quel serait le meilleur algorithme de compression de chaîne de caractères, sachant que le ratio de compression prime sur l'usage des resources (mémoire, temps).

    Pour situer le problème, je cherche à réduire la taille d'un paramètre véhiculé dans une URL. Je ne vais pas détailler le bien fondé de la raison de faire ainsi plutot qu'autrement, surtout qu'il émane plus d'un principe philosophique qu'autre chose.

    Les hypothèses sont :
    1) En entrée : caractères imprimables, taille de 10 à 50000 caractères, beaucoup de motifs semblables (le type de chaîne ressemble à du SQL pour vous faire une idée)
    3) en sortie : une chaîne de caractère (URL compatible).

    J'ai besoin d'un fort taux de compression pour limiter les risques de rejet des navigateurs (http://www.boutell.com/newfaq/misc/urllength.html)

    Pour l'instant, je procède ainsi :
    1) conversion chaîne en tableau de bytes
    2) compression Gzip
    3) base 64 encodage du résultat

    ce qui me permet de passer d'une taille de 17286 à 1796 par exemple. Ca parraît pas mail, mais peut-être existe-t-il un meilleur algo que gzip pour ce domaine bien précis.

    Merci

  2. #2
    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 Tommy31 Voir le message
    Pour situer le problème, je cherche à réduire la taille d'un paramètre véhiculé dans une URL. Je ne vais pas détailler le bien fondé de la raison de faire ainsi plutot qu'autrement, surtout qu'il émane plus d'un principe philosophique qu'autre chose.
    Il y a aussi un principe philosophique qui dit qu'en HTTP on utilise la méthode POST pour passer des paramètres de grande taille.

    caractères imprimables, taille de 10 à 50000 caractères, beaucoup de motifs semblables (le type de chaîne ressemble à du SQL pour vous faire une idée)
    Si les mot-clés de ton langage sont fixés (comme en SQL), tu peux créer un dictionnaire (^S=select, ^W=where, ...). Si en plus la grammaire est fixe, tu peux créer des raccourcis pour des séquences (^X1,2,3 = Select 1 from 2 where 3).

    Sinon, dans le cas général je pense que ta méthode "serialization+compression+base64" est ce que tu pourras faire de mieux.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Février 2010
    Messages
    767
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 767
    Par défaut
    Bonjour,

    Gzip est basé sur une combinaison du fameux LZW et d'un codage de Huffman.
    Si les éléments possible dans tes url est faible un codage de huffman seul va te permettre de réduire drastiquement la taille de tes urls.
    A condition bien sûr d'utiliser un dictionnaire fixe.

    Par contre Huffman n’élimine pas les redondances comme LZW.

    A tester.

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Une idée comme ça :

    Citation Envoyé par Tommy31 Voir le message
    Les hypothèses sont :
    1) En entrée : caractères imprimables, taille de 10 à 50000 caractères, beaucoup de motifs semblables (le type de chaîne ressemble à du SQL pour vous faire une idée)
    3) en sortie : une chaîne de caractère (URL compatible).

    J'ai besoin d'un fort taux de compression pour limiter les risques de rejet des navigateurs (http://www.boutell.com/newfaq/misc/urllength.html)
    i
    Pourquoi déjà ne pas faire un recensement des motifs et déjà faire un truc un peu comme GIF : une table indexée.

    Ensuite, appliquer par exemple gzip..

    Tu devrais pouvoir obtenir un taux encore plus fort que celui que tu as actuellement, non ?

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Février 2010
    Messages
    767
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 767
    Par défaut
    Sinon GIF utilise l'algo LZW à la base.
    Il est conçu pour éliminer les redondances.

    Pour une URL où il y a souvent assez peu de redondance, cela ne semble pas être la bonne solution.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jimmy_ Voir le message
    Sinon GIF utilise l'algo LZW à la base.
    Il est conçu pour éliminer les redondances.

    Pour une URL où il y a souvent assez peu de redondance, cela ne semble pas être la bonne solution.
    faut peut-être lire avant de poster :

    beaucoup de motifs semblables

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

Discussions similaires

  1. Compression de courte chaîne
    Par dranakan dans le forum Collection et Stream
    Réponses: 17
    Dernier message: 17/09/2010, 10h25
  2. Compresser/Décompresser une chaîne
    Par Florian V dans le forum LabVIEW
    Réponses: 0
    Dernier message: 27/05/2010, 12h13
  3. Compression d'une chaîne de caractère
    Par olivier1209 dans le forum C
    Réponses: 11
    Dernier message: 12/11/2006, 09h30
  4. compression de données du point de vue algorithmique
    Par GoldenEye dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 26/06/2002, 15h51
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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