Yûki - Correct Compress Wilfried parts

This commit is contained in:
name 2019-12-12 14:53:22 +01:00
parent 92fed06ccb
commit 742877f86b
No known key found for this signature in database
GPG key ID: 03E8F3CF3183323A
2 changed files with 40 additions and 39 deletions

View file

@ -5,14 +5,14 @@
typedef struct typedef struct
{ {
FILE*file; // Identificateur fichier FILE *file; // Identificateur fichier
char mode; //Mode de lecture r ou w char mode; // Mode de lecture r ou w
unsigned char record[BLOCK_SIZE]; //Tampon pour lire ou écrire unsigned char record[BLOCK_SIZE]; // Tampon pour lire ou écrire
int record_length; //nombre d'élèments du tampon int record_length; // nombre d'élèments du tampon
int i_record; //indice dans le tampon int i_record; // indice dans le tampon
char octet[8]; //On découpe l'octet en 8 caractère char octet[8]; // On découpe l'octet en 8 caractère
int i_octet; //indice dansl'octet int i_octet; // indice dansl'octet
int nb_octets; //Nb octet lis/écrit int nb_octets; // Nb octet lis/écrit
}Bin_file; }Bin_file;
#endif #endif

View file

@ -4,6 +4,8 @@
Freq freq_apparition(FILE *file); Freq freq_apparition(FILE *file);
arbre huffman(arbre H, Freq L); arbre huffman(arbre H, Freq L);
void quicksort(Freq L, Freq deb, Freq fin);
Freq partition (Freq L, Freq deb, Freq fin);
// main_compress.c [nom_du_fichier_a_compresser] // main_compress.c [nom_du_fichier_a_compresser]
@ -62,41 +64,41 @@ arbre huffman(arbre H, Freq L){
/* /*
Création de l'arbre de codage de Huffman en considérant une liste avec les fréquences d'apparition des caractères ordonnée croissante Création de l'arbre de codage de Huffman en considérant une liste avec les fréquences d'apparition des caractères ordonnée croissante
*/ */
if(est_liste_vide(L)){
printf("Liste vide\n");
return H;
}
else{
printf("Liste NON vide\n");
// récupérer les deux plus petits poids (cf : deux premieres occurences) // récupérer les deux plus petits poids (cf : deux premieres occurences)
arbre A,B,AB;
Freq l; Freq l;
l=L; l=L;
int al,bl,ap,bp; printf("Test \n");
al = tete_lettre(l);
ap = tete_freq(l);
l = queue(l);
bl = tete_lettre(l);
bp = tete_freq(l);
l = queue(l);
printf("CREATION ARBRE\n");
A = creer_arbre_huffman(al,ap,creer_arbre_vide(),creer_arbre_vide());
B = creer_arbre_huffman(bl,bp,creer_arbre_vide(),creer_arbre_vide());
AB = creer_arbre_huffman(al*100+bl,ap+bp,A,B);
l = inserer(ap+bp,al*100+bl,l);
printf("test\n");
while(!est_liste_vide(l)){ while(!est_liste_vide(l)){
printf("%d (%d)\n",tete_lettre(l),tete_freq(l)); printf("%d (%d)\n",tete_lettre(l),tete_freq(l));
l=queue(l); l=queue(l);
} }
int i;
i=0;
while((L->suiv != NULL)||i<50){
printf("%d \n",i++);
int al,bl,ap,bp;
al = tete_lettre(L);
ap = tete_freq(L);
L = queue(L);
bl = tete_lettre(L);
bp = tete_freq(L);
L = queue(L);
arbre fg,fd;
fg=creer_feuille(al,ap);
fd=creer_feuille(bl,bp);
H=creer_arbre_huffman(al*100+ap,ap+bp,fg,fd);
L=inserer(ap+bp,al*100+bl,L);
l=L;
while(!est_liste_vide(l)){
printf("%d (%d)\n",tete_lettre(l),tete_freq(l));
l=queue(l);
} }
}
return H; return H;
} }
Freq partition (Freq L; Freq deb; Freq fin) Freq partition (Freq L, Freq deb, Freq fin)
{ {
int permu; int permu;
int pivot; int pivot;
@ -119,20 +121,19 @@ Freq partition (Freq L; Freq deb; Freq fin)
} }
permu = deb -> nb; permu = deb -> nb;
deb -> nb = compt -> nb; deb -> nb = compt -> nb;
compt -> valeur = nb; compt -> nb=permu;
} }
return compt; return compt;
} }
void quicksort(Freq L; Freq deb; Freq fin) void quicksort(Freq L, Freq deb, Freq fin)
{ {
if ((deb -> nb) < (fin -> valeur)) if ((deb -> nb) < (fin -> nb))
{ {
Freq pivot = partion(L,deb,fin); Freq pivot = partition(L,deb,fin);
if(!est_liste_vide(pivot)) if(!est_liste_vide(pivot))
{ {
quicksort(L,deb,precedent(L,pivot -> nb)); //quicksort(L,deb,precedent(L,pivot->nb));
if
} }
} }
} }