From 9d925f6782d2f6d776e252656df10147b990f599 Mon Sep 17 00:00:00 2001 From: anhdire Date: Sat, 27 Dec 2025 12:42:38 +0100 Subject: [PATCH] Correction des Codes Canoniques --- .../iutfbleau/sae/ConverterController.class | Bin 0 -> 1867 bytes build/fr/iutfbleau/sae/Convertisseur.class | Bin 1215 -> 1416 bytes .../sae/mhuffman/CanonicalCode$1.class | Bin 0 -> 1293 bytes .../sae/mhuffman/CanonicalCode.class | Bin 0 -> 2462 bytes .../sae/mhuffman/FrequencyTable.class | Bin 1002 -> 1002 bytes build/fr/iutfbleau/sae/mimage/Pixel.class | Bin 646 -> 646 bytes build/fr/iutfbleau/sae/mimage/RGBImage.class | Bin 700 -> 700 bytes .../sae/vconverter/ConverterWindow.class | Bin 3387 -> 3387 bytes .../sae/vconverter/ImagePreviewPanel.class | Bin 806 -> 806 bytes .../iutfbleau/sae/mhuffman/CanonicalCode.java | 48 ++++++++++++------ .../sae/vconverter/ConverterWindow.java | 1 - 11 files changed, 33 insertions(+), 16 deletions(-) create mode 100644 build/fr/iutfbleau/sae/ConverterController.class create mode 100644 build/fr/iutfbleau/sae/mhuffman/CanonicalCode$1.class create mode 100644 build/fr/iutfbleau/sae/mhuffman/CanonicalCode.class diff --git a/build/fr/iutfbleau/sae/ConverterController.class b/build/fr/iutfbleau/sae/ConverterController.class new file mode 100644 index 0000000000000000000000000000000000000000..8d74b30bf27ea69b2b631a68b3757955d03d4848 GIT binary patch literal 1867 zcmX^0Z`VEs1_nol7%m1T24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00SP6iGJPId+^9tLg(9!3V0v?Be?(vq~KoYcfp{o=$_edqkVvecrI)FS8n zypp2)oSf7mMh51z)I3H8T^|h9Wyvt*2#w*Hc`5nj*6a*?j0`+r=Va#VyJhC2axw5S z2!Pxv$jBh7;RBWeyEM3@C^IkJS~HA`L6|{=ok5g`L5xA1kwFxsq(VP4H!(dmGhg2m zM0@%(GO!e-CZ;el=t0eZ8gH!$F*32d1foUXsWdGuwJ0?OtkIgCL6VU{31lQBd^~e< zQqvQ29E;LRb5rw5Tq}}O3raHc^Eeo!85s@bD0#GK5OR6Q;R2?hZ!1~~?Kb_N9=21N!XMg|$MZ8#jn$iR`F zS`wa_Qj!6V8&8mC6&?mvkWS9@)Dn->%=C;Bb_R7u1_g|e&jnkqALQ-?_8k|48iOV% zY_%8}ST#I7Au+AP!=THc$H>46R?Nttgc*Zq=2(LqVZg&+$Y8|Cz?Pm`66Ed#HPMru z!Gw`P7MDu`GAmMZxEPEX%s|dCXJla0@C3O72FDsWWx^8$7lRXnD-VMkD39?M6lLa>1eYWxXNMFeCZ{qo@TC={7M7;wC0B+d zCgr3uGH7A(T1IJFT5e*Vz8i{KYeoj{#H1n*h-45W13x4cmzHGa==&xXSTizk24|+{ zC6<&Hr7|*@p~~7oxL~(>=9Q$TrxsZw2|+WK9jYbnC{{W#GH@g(=H=%FxwK~pvAxhwwFt5I|HMZ_ErY=jSLJ7j0~X+3=Dh>%nS?+ z8VoE9nhcx_S`3T~VGM#0eT=>g9AMK{>}KGN)ZWg(@2j(eLC8<{I0Nr)28l=^sqG9h z`*pW5$eOX}Zevh3W7XQtpcX00BFeg*L1Qa}HnSOsSQIff$?3=9m83;`3lvP@Lciu5x}OVW~ZQWHz{ixX4zo%8d`Qj1Dbi=6ZG zN{aGxa#D-97`PaCc^Ft3_!t=sG<+u7YkOI1hH)?mFfwR6TgCV$rY9C>=EXSshXw`5 zIE987#RNOL1{;G&W21N@10&OzlGNM+kTF6$48jZ|j0~JP`H3l>xrynilWUoz)WsMX z1hW#$67@?ZX57$g~_*cqgG7-Se^C(f`Gm1ksNF*GnV;AT){ zP-16L=3!7_P@VWJ*g>6|GBjXj z@Dwd$W>E6rVrCH5^x$G(XE5PmFl8{CT*>IoX2HW?$zV146r&Qi4TCK^gB=fpJ%hvK z?~KNbPLs8n)VW<4T-h1ico^InL?*{FDKN7$cutg|sW>+uoiOM#^8(yo;(I=1_lOB1`Y-u20;d125|-f26+ZS z20aEL23rOZ1~&##hA;*(hBO9ohI|GIhI$4`H->%&S%zs0atw1BOP-fV~ zpu(_&L6u=YgF3@81}%oO4B8Br8T1%#GZ-;EVK8QR$6&(njlq;( Ble+)_ delta 650 zcmeC+-p|Q(>ff$?3=9k|3~m#-vQz}K63Y_xOG`3y^gR-bGkg;ZxEQz?n7J7E82H&4 z1b7$(8H6UsFFfyz`-EL$iQp} zVkj^&Fc}zfFeouHFdA?$s7zL5l3>&1VbEgGo@~$L&8Ex4pvRy;c>?8aPQZ^yvI00K-5j0~&{Yz&MH4h#$ovJ8w2j0_A6tXkU{7&kI7FfcMW zGBALpK_n-G6N58EDPs%+3j+rO1H+Tu4D6BH8904*GjK(2XW;SG5oGwkgMn8_cqfA> zGefwJAVUL)D-Gd7Rn`0HLY2uv#C4&{}F7BILM&IaFRif;Ua@R!)*owhQ|zs42%pe3=9lR46XoQ C+-`jU diff --git a/build/fr/iutfbleau/sae/mhuffman/CanonicalCode$1.class b/build/fr/iutfbleau/sae/mhuffman/CanonicalCode$1.class new file mode 100644 index 0000000000000000000000000000000000000000..efee3c96a13605e42c079e744bb1c3c971230a03 GIT binary patch literal 1293 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 delta 17 YcmZo;ZDZv)^>5cc1_lO~jU07M069?w+yDRo diff --git a/build/fr/iutfbleau/sae/mimage/RGBImage.class b/build/fr/iutfbleau/sae/mimage/RGBImage.class index 351c0e61c7a3b121cef2b9cd8df72dff3be51091..9133776795e0844b31e8df7e568bcb207ae5c7fd 100644 GIT binary patch delta 17 ZcmdnPx`&nH)W2Q(7#J8FH*#!Y0sug6273Si delta 17 ZcmdnPx`&nH)W2Q(7#J8_HgarX0sugL27Ukl diff --git a/build/fr/iutfbleau/sae/vconverter/ConverterWindow.class b/build/fr/iutfbleau/sae/vconverter/ConverterWindow.class index 63526d5f546c6cc791d34aeba91f2f2ce8ac306e..0bf0cec5c5643364f9411c36dcf52a829b15d284 100644 GIT binary patch delta 203 zcmdljwOfkg)W2Q(7#J8FH*%cfu2*MZVbEmYVbEp}V$fkwV9;YwWzc8PVlZIPXE0%~ zVlZWJWiVq1V6bF}V6b9HWw2%_Ww2prVX$ZDV{l-Y$Kc4Ygu#hn6@v@I9tIDFqYR!5 z*BQJS9x(VYd}8op_|4$Y$jcDOD8>-PD8mrUsKgM$sLc?@Xvh%GXvPr1z&JUOM~5|o zfrBA)aubgMYbgU4L)ql*JO->S3|tJYli%=Ih)-tVVwl3Poq>UYiD3r=Bf~B*Yc~K5 C<0uXQ delta 203 zcmdljwOfkg)W2Q(7#J8_HgcTeuGe5-VbEgWVbEa^V$fw!V9;k!WiVjSVlZUTXE0^3 zVlZQHWiV$5V6b9{V6bLLWw2o=Ww2#vVQ^sRV{l}c$Kb@Ugu$6%6@x3o9tKZ_qYPdQ z*BN{m9x(Vad}8ot_{|W&$jcDKD8>-XD8mrKsKgM;sLc@0Xvh%3XvPr9z&JUOM~5|& zfrBAyaubgMYZ(IUYiD3r=Bf~B*Yc~KO CpeQ*2 diff --git a/build/fr/iutfbleau/sae/vconverter/ImagePreviewPanel.class b/build/fr/iutfbleau/sae/vconverter/ImagePreviewPanel.class index 013c129b23346b458443c4bd95c65cc4d1bf9345..51a9adb142272ca02bbccca5e67e90d6d239f883 100644 GIT binary patch delta 17 ZcmZ3+wv3JA)W2Q(7#J8FH*&}^0{}ds1-t+N delta 17 ZcmZ3+wv3JA)W2Q(7#J8_Hgd=@0{}d*1-}3Q diff --git a/src/fr/iutfbleau/sae/mhuffman/CanonicalCode.java b/src/fr/iutfbleau/sae/mhuffman/CanonicalCode.java index 017a06c..3cb418d 100644 --- a/src/fr/iutfbleau/sae/mhuffman/CanonicalCode.java +++ b/src/fr/iutfbleau/sae/mhuffman/CanonicalCode.java @@ -2,33 +2,51 @@ package fr.iutfbleau.sae.mhuffman; import java.util.*; public class CanonicalCode{ - private Map codeLengths = new HashMap<>(); // Changer ici car la premiere version est incorecte + private Map codeLengths = new HashMap<>(); private Map canonicalCodes = new HashMap<>(); public Map generateCodes(){ // 1 ere chose à faire : on regarde uniquement la longueur des codes initiaux(Huffman) // 2eme chose à faire : remettre dans l'ordre des longueurs : si meme taille ==> regarder valeur - // 3eme chose à faire : ecriture des codes canoniques : + // 3eme chose à faire : ecriture des codes canoniques // on recupere les entrées des codes Huffman pour pouvoir les triés - List> liste = new ArrayList<>(codeLengths.entrySet()); + List> liste = new ArrayList<>(codeLengths.entrySet()); // ici on comparer par longueur de la valeur ou sinon par la clé - // type générique pour éviter les erreurs de compilation !!! - // referencement de méthode : passer une méthode déja existante - liste.sort(Comparator.>comparingInt(Map.Entry::getValue) - .thenComparing(Map.Entry::getKey)); + + Collections.sort(liste, new Comparator>() { + @Override + public int compare(Map.Entry arg1 ,Map.Entry arg2) { - int code = 0; // code canonique à attribuer + int length1 = arg1.getValue().length(); + int length2 = arg2.getValue().length(); + + if (length1 != length2) { + return length1 - length2; + } + return arg1.getKey() - arg2.getKey(); + } + }); + + + int code = 0; // code canonique à attribuer int temp = 0; //garde la longueur du code précedent , pour gérer le décalage - for (Map.Entry entree : liste ) { + for (Map.Entry entree : liste ) { int valeur = entree.getKey(); // symbole actuel - int longueur = entree.getValue(); // longueur du code actuel + int longueur = entree.getValue().length(); // longueur du code actuel - code <<= (longueur - temp); // permet de décaler le code actuel si la longueur augmente - canonicalCodes.put(valeur,code); // ajout dans le dictionnaire + code <<= (longueur - temp); // permet de décaler le code actuel si la longueur augmente + String codeBinaire = Integer.toBinaryString(code); + + // permet d'ajouter des zeros si nécessaire !!! + while (codeBinaire.length() < longueur) { + codeBinaire = "0" + codeBinaire; + } + + canonicalCodes.put(valeur,codeBinaire); // ajout dans le dictionnaire code++; // incrémentation pour la valeur qui suit temp = longueur; // mise à jour de la longueur précedente } @@ -37,12 +55,12 @@ public class CanonicalCode{ } - public int getCode(int value){ - return 0; + public String getCode(int value){ + return this.canonicalCodes.get(value); } public int getLength(int value){ - return 0; + return this.codeLengths.get(value).length(); } diff --git a/src/fr/iutfbleau/sae/vconverter/ConverterWindow.java b/src/fr/iutfbleau/sae/vconverter/ConverterWindow.java index 54223ad..67d185c 100644 --- a/src/fr/iutfbleau/sae/vconverter/ConverterWindow.java +++ b/src/fr/iutfbleau/sae/vconverter/ConverterWindow.java @@ -1,5 +1,4 @@ package fr.iutfbleau.sae.vconverter; - import fr.iutfbleau.sae.util.Config; import java.awt.*; import java.util.Map;