PHP5 CLASSE ARBRE INVERSÉ (HUFFMAN) COMPRESSION DECOMPRESSION

TheSin Messages postés 331 Date d'inscription mardi 12 novembre 2002 Statut Membre Dernière intervention 10 février 2009 - 21 janv. 2007 à 17:37
poubelle2077 Messages postés 1 Date d'inscription vendredi 14 avril 2006 Statut Membre Dernière intervention 26 avril 2009 - 26 avril 2009 à 22:55
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/41186-php5-classe-arbre-inverse-huffman-compression-decompression

poubelle2077 Messages postés 1 Date d'inscription vendredi 14 avril 2006 Statut Membre Dernière intervention 26 avril 2009
26 avril 2009 à 22:55
Hello,

J'ai commencé à lire le code. Cela me semble bien.
Je ne programment plus depuis longtemps avec des pointeurs (c ou C++) et je me posais justement la question de l'implémentation d'un arbre avec un langage ne possédant pas ce type de choses.
L'utilisation des itérateurs et des tableaux me sembles une bonne idée.
Ce que je regrette avec cette technique c'est que l'algo est complètement noyé dans le code. C'est la faut des itérateurs ...
J'ai pas tout lu, mais par exemple mais :

function a_sort($nodes)

Il me semble que uasort fasse exactement ça.

Je continue donc à lire et mes recherches d'implémentation d'arbre.
A+
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
23 janv. 2008 à 15:43
Salut, merci.
Pour cela une des methodes possibles est l'utilisation d'une fonction de requete recursive qui te retourne pour chaque objet et dans chaque profondeur de ta hierarchie d'objet l'ensemble des enfants associés à ton objet=> tu dois également stocker le niveau hierarchique des enfants(profondeur) pour déterminer le nombre de '.' à écrire dans ton fichier affiliation.txt (la strucuture de ton arbre).

Ou alors tu fais directement une requête hierarchique si ta DB le permet.
cs_caviar Messages postés 329 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 29 mars 2015 2
22 janv. 2008 à 12:16
yepa ! très bon code ... mais question con ...
comment je fais pour l'utiliser à partir d'une requete sur une bdd ?
genre j'ai ma table avec idTruc, IdParentDeTruc, NomDeTruc
et j'aimerai classer tout ça dans un bel arbre comme celui ci ...
possible ?
++
TheSin Messages postés 331 Date d'inscription mardi 12 novembre 2002 Statut Membre Dernière intervention 10 février 2009
7 févr. 2007 à 07:31
certes, ça ne devrait pas, mais bon, c'est PHP qui veut ça et faut donc s'y faire : une clé totalement numérique est toujours considérée comme un index, raison de logique pour simplifier la vie au codeur ^^
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
5 févr. 2007 à 23:50
Non non t'as pas à t'en faire, je déconnais à 100%.
Ceci dit je retiens ta solution pour le prefixe sur la clé.
Sinon exact c'est bien la notion de clé et non d'index (je me suis mal exprimé). Mais je ne demords toujours pas du fait que $tab['1'] ne devrait pas dans l'idéal, faire référence à la même adresse que $tab[1].
TheSin Messages postés 331 Date d'inscription mardi 12 novembre 2002 Statut Membre Dernière intervention 10 février 2009
3 févr. 2007 à 17:37
Faut pas en avoir à celui (voire ceux) qui a codé les tableaux PHP, mais directement à Rasmur Lerdorf, puisque c'est certainement lui qui a choisi que le PHP devait être un langage simple.
L'un des principes de PHP c'est bien les conversions de variables automatiques, et des tableaux, à la base de tous les langages, sont indexés numériquement, et donc n'ont pas de clé.
Si tu veux lui mettre une clé et non un index à la place, t'as qu'à simplement rajouter un carcatère alphabêtique à la chaîne ;)
Donc : $tab[ 'car' . (string)$index]
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
2 févr. 2007 à 22:17
(Humeur: D'ailleurs je critique aussi N.S que je ne veux absolument pas comme président, à moins qu'il réussisse, à partir d'une analyse ADN, à retouver le mec qui a développé les tableaux PHP, même si, je ne souhaite même pas non plus à ce developpeur de séjourner en cabanne.
Au final, et d'un point de vue égoïste, si il passait, je pourrais aussi m'expatrier dans un autre pays et ça me permettrait de voir autre chose ;-))
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
2 févr. 2007 à 21:34
Ouh la Par contre y a gros un bug sur les entiers : un défaut de php.
Ce sont les tableaux php qui gérent mal les entiers en string comme index: aucune différenciation entre $tab['1'] et $tab[1] (grossiéééééééééer) et même si je fais $tab[(string)$index].
Mais je ne critique pas que php, y a aussi 1 autre bug sur mon script cette fois, encore sur le dernier caractère, (je coyais qu'il était pourtant réglé celui là) mais maintenant il apparait sur les longues chaines.
TheSin Messages postés 331 Date d'inscription mardi 12 novembre 2002 Statut Membre Dernière intervention 10 février 2009
26 janv. 2007 à 09:47
a bin moi je suis pas d'accord avec toi guill76.
je suis sûr que ça aurait pû permettre à des collègues de ma classe de comprendre plus facillement les algorithmes de compression ;-) (sujet de maths sup', soutenance et programme en C à faire en 3 jours).
Bref, je trouve ta source très utile, de plus avec l'itérativité peu souvent utilisée en PHP ;-)
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
25 janv. 2007 à 21:07
Je sais que ce n'est pas d'une grande utilité (bzcompress existe déjà avec ce principe), mais si ça peut familiariser les débutants avec certaines notions fondamentales, c'est toujours ça de gagner.
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
23 janv. 2007 à 19:24
je les ai déjà vues, mais bon dans mon cas et après reflexion, je suis sur que j'ai de toute facon besoin d'une fonction recursive spécialisée.
TheSin Messages postés 331 Date d'inscription mardi 12 novembre 2002 Statut Membre Dernière intervention 10 février 2009
23 janv. 2007 à 15:18
lol, ok pour la réponse du 21, j'avais pas vu ;-)
je te conseille d'aller voir une des sources de malalam pour voir les itérateurs de plus près ;-)
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
23 janv. 2007 à 13:06
Oups, je me suis aperçu d'une etourderie, la boucle foreach dans la quelle j'encode ne compresse pas, je rectifierai plus tard avec un exemple plus sympa.
En fait il faut décaler tous les bits à gauche et faire une sorte de concatenation avec les codes suivants pour remplir complétement chaque octet.
guill76 Messages postés 193 Date d'inscription mercredi 24 août 2005 Statut Membre Dernière intervention 3 juin 2016
21 janv. 2007 à 17:50
j'ai besoin de plus maitriser les itérateurs pour le faire.
Ici j'ai mis une fonction récursive (encode) qui peut pallier pour une certaine utilisation mais qui n'offre pas le potentiel des itérateurs.
Donc voilà en attendant que je maitrise , c'était pour montrer une orientation possible que j'ai mis ces méthodes.
C'est aussi pour çà que je n'ai mis que débutant.
TheSin Messages postés 331 Date d'inscription mardi 12 novembre 2002 Statut Membre Dernière intervention 10 février 2009
21 janv. 2007 à 17:37
Pourquoi tu poste ton code source incomplet ? (je fait référence aux fonctions pour l'itérativité)