Anda di halaman 1dari 5

1AB Structures de donnes 2013-2014

1/5
!"#$%&'()* ,-./00)12
345*6'&07 ,/ 89
- LffecLuer un Lrl avec un Las.
- Cerer des elemenLs avec une llsLe chainee
- ConsLrulre un arbre blnalre eL savolr le parcourlr.
- uLlllser un arbre blnalre pour falre du codage de source.

:; <3=98> ?>;@: A3:B B>?! @>=!;@> >; @>?;C>?> B>!;<>D CE >B8 <>9>;@!;8 C=93?8!;8 @>
;38>? F:> E! ;38> B>?! 8?>B =!G3?C8!C?>=>;8 H3;<8C3; @> A38?> 8?!A!CE >; B>!;<>BD ! A3:B
@> 93B>? E>B F:>B8C3;B F:> A3:B G:I>J ;><>BB!C?>B >8 @-:8CECB>? E> @>K:II>? 93:? KC>;
<3=9?>;@?> E>B =><!;CB=>B >8:@C>>B >8 A>?CHC>? A3B ?>B:E8!8BD
C2'%$,/6'&$2
Le codage de source a pour buL de fournlr une represenLaLlon compressee eL efflcace de donnees bruLes
LouL en preservanL l'lnformaLlon essenLlelle qu'elles porLenL. ll esL generalemenL uLlllse dans le sLockage, la
Lransmlsslon de donnees, la classlflcaLlon d'lmages, la reconnalssance vocale.
!D >'/,* L%M1"14"* ,*7 ,&00M%*2'*7 M'1L*7 ,* "-1"#$%&'()*
uavld Puffman a developpe au cours de sa Lhese souLenue au Ml1 en 1932 un algorlLhme de compresslon
de donnees sans perLes. Le prlnclpe esL d'auLanL genlal qu'll esL slmple : ll esL posslble de compresser
(redulre) la Lallle d'un LexLe en assoclanL un code (blnalre) courL aux leLLres les plus redondanLes eL
lnversemenL un code long aux leLLres les molns frequenLes.
ar exemple, dans les langues occldenLales, les leLLres qul formenL les moLs n'onL pas LouLes les mmes
occurrences. Ln franals, les leLLres 'a' eL 'e' s'averenL sur-represenLees sl on les comparenL aux occurrences
du 'w' eL du 'z'.
!DCD >'1L* N O <$221&77126* ,* "1 7$/%6*
CeLLe premlere eLape suppose une connalssance sufflsanLe de la source, a parLlr de laquelle nous allons
affecLer une frequence d'occurrence pour chaque symbole de ceLLe source. uans le cas d'un LexLe, un
symbole esL une leLLre de l'alphabeL. LLudlons la phrase sulvanLe :

le baLeau Langue

C01. CompLer les occurrences des dlfferenLes leLLres presenLes dans ceLLe phrase (ne compLez pas le
caracLere espace dans ceL exemple) eL rassembler les lnformaLlons sous forme d'un Lableau. ue plus, les
leLLres non eLudlees ne seronL pas conslderees dans ceL exemple.
!DCCD >'1L* P O 8%& L1% $%,%* ,M6%$&7712' ,*7 0%MQ/*26*7
La consLrucLlon de l'arbre necesslLe que les symboles solenL Lrles par ordre crolssanL des frequences
assoclees.

C02. 1rler le Lableau precedenL par ordre crolssanL des frequences. uans le cas ou ll y a egallLe enLre deux
symboles, cholslssez au hasard l'ordre des symboles.


1AB Structures de donnes 2013-2014
2/5
!DCCCD >'1L* R O <$27'%/6'&$2 ,* "-1%4%* 4&21&%*
La mlse en ouvre du code de Puffman assocle a un message donne esL basee sur l'lmplemenLaLlon d'un
arbre blnalre mls en ouvre a l'alde de l'algorlLhme sulvanL.

- 8epresenLer chaque leLLre par une feullle de l'arbre blnalre, allgnees selon l'ordre crolssanL des
frequences assoclees (s'll y a des ex-quo, on cholslL arblLralremenL un ordre parml elles).
- 1anL que la raclne de l'arbre n'esL pas aLLelnLe,
o ldenLlfler les deux nouds de plus falbles frequences (!"#$%$& () "(%(&* +, !(% *-./(0$1.)
o apparler ces deux nouds par la creaLlon d'un noud pere, donL la frequence assoclee esL la
somme des frequences de ses flls
fln 1anL que
- Assocler a chaque branche gauche de l'arbre blnalre un '0' eL un '1' pour chaque branche drolLe.

C03. uesslner l'arbre blnalre eL Lrouver le code assocle a chaque symbole (leLLre).
!DCAD >'/,* ,*7 61%16'M%&7'&Q/*7 ,* 6* 6$,1#*
nous allons volr quelles sonL les caracLerlsLlques du codage par l'algorlLhme d'Puffman. nous savons qu'un
caracLere esL code par un ocLeL dans la Lable ASCll. ar exemple la leLLre 'a' esL represenLee par le code
ASCll 97 en declmal ou 0x61 en hexadeclmal.

C04. uonnez la successlon blnalre represenLanL le moL 'LAu' en uLlllsanL le codage ASCll. ue comblen de
blLs ceLLe successlon esL-elle composee ?

C03. uonnez la successlon blnalre represenLanL le moL LAu en uLlllsanL le codage Lrouve par l'arbre a la
quesLlon 3. ue comblen de blLs ceLLe successlon esL-elle composee ? Conclure.

C06. Lorsque le recepLeur reolL le code du moL LAu , peuL-on decoder les leLLres au fur eL a mesure de
la recepLlon ou dolL-on aLLendre la recepLlon de LouL le message avanL de pouvolr decoder ? !usLlfler.

C07. Le code de Puffman esL-ll unlque en general ? !usLlfler. Cuel probleme cela pourralL-ll poser ?

1AB Structures de donnes 2013-2014
3/5
KD =&7* *2 S/T%* ,/ 6$,1#* ,* 7$/%6*
vous allez malnLenanL meLLre en ouvre le codage de source en uLlllsanL l'algorlLhme d'Puffman. u'apres la
parLle precedenLe, ll vous fauL d'abord ldenLlfler la source. vous prendrez en conslderaLlon 1CuS les
caracLeres ASCll allanL de 0 a 127 eL vous allez devolr dans un premler Lemps compLer le nombre
d'occurrences pour chaque caracLere. our ce falre, vous allez deflnlr une sLrucLure regroupanL des
lnformaLlons lnLeressanLes pour chaque caracLere.

@$ &' N O 9%ML1%*% "* L%$5*'
! Creer les flchlers donL vous avez besoln pour voLre pro[eL.
! ueflnlr une eLlqueLLe NB_ASCII a 128
! Creer un Lableau de caracLeres texte en l'lnlLlallsanL avec la phrase sulvanLe (ou une phrase de voLre cholx) dans
la foncLlon prlnclpale.
hyslcs ls llke sex. Sure, lL may glve some pracLlcal resulLs, buL LhaL's noL why we do lL.

@$ &' P O <$)L'*% "* 2$)4%* ,-$66/%%*26* L$/% 6(1Q/* 61%16'U%*
! ueflnlr la sLrucLure struct caractere, deflnle en CARACTERE, qul aura pour conLenu les champs sulvanLs :
- un enLler de Lype char conLenanL le code ASCll de l'elemenL
- un enLler de Lype lnL conLenanL le nombre d'occurrence de l'elemenL
- un polnLeur de Lype char* qul conLlendra le code de l'elemenL
- un enLler de Lype lnL donnanL la Lallle du code de l'elemenL
! Allouer dynamlquemenL un Lableau appele liste de NB_ASCII CARACTERES correspondanL aux
NB_ASCII symboles de la Lable ASCll.
! Creer une foncLlon pour lnlLlallser les champs de chaque CA8AC1L8L en donnanL en argumenLs d'enLree l'adresse
du CA8AC1L8L alnsl que les valeurs des champs.
! lnlLlallser chaque CA8AC1L8L avec son code ASCll (le premler elemenL du Lableau des CA8AC1L8LS aura pour
code ASCll 0, le leme elemenL aura pour code ASCll l.), eL le resLe des champs a 0 ou NULL)
! Creer une foncLlon pour compLer les occurrences des caracLeres du LexLe charge precedemmenL. Llle prendra en
argumenL le Lableau de caracLeres texte, la Lallle de ce Lableau alnsl que le Lableau de CA8AC1L8LS liste.
our chaque caracLere correspondanL au champ ascii de CA8AC1L8L, on lncremenLera son champ
occurrences.

vous venez d'ldenLlfler la source. L'eLape sulvanLe conslsLe a falre un Lrl. our ce falre, nous vous proposons
de consLrulre un Las sous forme de Lableau eL de le Lrler, a la manlere de ce qul a eLe vu en amphl.

@$ &' R O >2'177*% "*7 CARACTERES
! <$27*&" : vous pouvez desslner un arbre eL reallser l'enLassemenL de l'exemple de la parLle A au fur eL a mesure
en prenanL blen soln de respecLer la regle d'enLassemenL : la valeur d'lnLerL de la raclne esL superleure ou egale
a LouLes les valeurs d'lnLerL de ses sous-arbres. lcl la valeur d'lnLerL permeLLanL un Lrl esL blen enLendu le
nombre d'occurrences (le champ occurrences) . 8$/' 2S/, &27M%M Q/& T&$"* "1 %U#"* ,-*2'177*)*2' *7'
L*%)/'M 1T*6 7$2 LU%*D
! C2,&61'&$27 L$/% "-&)L"M)*2'1'&$2 : Les CARACTERES sonL presenLs en memolre dans le Lableau
(CARACTERE*) que vous avez cree precedemmenL. L'ob[ecLlf lcl esL de les Lrler. our ne pas gasplller de la
memolre lnuLllemenL, vous n'allez pas falre de cople de ces CARACTERES. vous allez les Lrler en LrlanL leurs
adresses dans un Lableau dynamlque appele tas. CuesLlon : quel esL alors le Lype de tas ? 8oulemenL de
Lambour. LL oul ! CA8AC1L8L** Las : un polnLeur de polnLeurs !
! Creer LouL d'abord une foncLlon permuter qul permuLe deux cases du Lableau d'adresses tas. Llle prend en
argumenLs d'enLree le Lableau d'adresses tas eL les deux lndlces des adresses a permuLer. CeLLe foncLlon vous
sera uLlle dans le cas du vlol de la regle d'enLassemenL alnsl qu'ulLerleuremenL.
! Creer une foncLlon enLasser qul prend en argumenL d'enLree le Lableau de CARACTERES liste alnsl que sa
Lallle (NB_ASCII). CeLLe foncLlon dolL :
- creer dynamlquemenL le Lableau d'adresses Las
- lnserer les CARACTERES de liste au fur eL a mesure en velllanL a blen respecLer la regle d'enLassemenL.
8egler le probleme du vlol a l'alde de permuter. Cn rappelle que l'lndlce du pere esL, A CuLLCuL CPCSL
8LS, la dlvlslon enLlere par deux de l'lndlce du flls ou de la fllle (le CuLLCuL CPCSL vlenL du falL que l'lndlce
1AB Structures de donnes 2013-2014
4/5
de la raclne esL 0 alors qu'elle eLalL de 1 dans le cours.).
- renvoyer le Lableau d'adresses tas.

@$ &' V O 8%&*% "*7 CARACTERES
! <$27*&" : vous pouvez reallser le Lrl du Las precedenL au fur eL a mesure en prenanL blen soln de respecLer la
mme regle d'enLassemenL : la valeur d'lnLerL de la raclne esL superleure ou egale a LouLes les valeurs d'lnLerL
de ses sous-arbres. lcl la valeur d'lnLerL permeLLanL un Lrl esL Lou[ours le nombre d'occurrences (le champ
occurrences) . CependanL, conLralremenL a l'enLassemenL, ou l'lnserLlon se falsalL a drolLe de la dernlere
feullle, lcl la permuLaLlon enLre la dernlere feullle eL la raclne enLraine un vlol de la regle par le pere eL non par le
flls. Alnsl '$/' 2S/, Q/& T&$"* "1 %U#"* ,-*2'177*)*2' *7' L*%)/'M 1T*6 "* L"/7 #%12, ,* 7*7 0&"7D
! ?1LL*": La consequence d'un bon enLassemenL esL que la raclne possede la valeur d'lnLerL la plus elevee. Le Lrl
repose alnsl sur ceLLe consequence, eL l'algorlLhme donne a chaque lLeraLlon:
- permuLaLlon enLre le premler eL le dernler elemenL du Las consldere a ceLLe lLeraLlon.
- non-prlse en compLe du dernler elemenL (ne pas le conslderer dans l'eLape de verlflcaLlon sulvanLe)
- verlflcaLlon de la regle d'enLassemenL pour les elemenLs du Las comprls enLre le premler eL l'avanL-
dernler de ceLLe lLeraLlon.
! Creer une foncLlon Lrler qul prend en argumenL d'enLree le Lableau d'adresses Las alnsl que le nombre d'adresses
(NB_ASCII). CeLLe foncLlon dolL Lrler le Las cree precedemmenL.

Super ! vous allez malnLenanL pouvolr consLrulre l'arbre. our ce falre, vous allez deflnlr au prealable une
nouvelle sLrucLure nuuu conLenanL les lnformaLlons [ugees uLlles a chaque noud de l'arbre. vous
selecLlonnerez ensulLe les CA8AC1L8LS donL l'occurrence esL non nulle, eL vous assoclerez un nuuu a
chacun d'enLre eux. Ces dernlers consLlLueronL les feullles de voLre arbre. ll vous resLera ensulLe a
regrouper a chaque lLeraLlon les deux nuuuS d'occurrences (cumulees) les plus falbles eL d'en consLrulre
un nouveau, eL ce [usqu'a la raclne.

@$ &' W O <$27'%/&%* "-1%4%*
! C2,&61'&$27 O La consLrucLlon de l'arbre n'esL pas chose alsee. Cn parL d'un Las d'elemenLs Lrles precedemmenL.
remleremenL, ll vous faudra deflnlr une sLrucLure qul englobe la sLrucLure CARACTERE, eL qul se dolL d'Lre
recurslve pour consLlLuer le NUD d'un arbre. LnsulLe, a chaque lLeraLlon, ll faudra Lre capable d'enlever deux
nouds eL de ra[ouLer le pere de ces nouds au bon endrolL de faon a garder l'ensemble Lrle. Sl vous ne voyez pas
la sLrucLure de donnees avec lequel on va LralLer ces elemenLs, ll va vralmenL fallolr plancher pour l'examen ! LL
oul, vous allez souffrlr...euh. consLrulre une llsLe chalnee ! Alnsl, vous allez d'abord consLrulre une llsLe chainee
de NUDS qul englobenL vos CARACTERES, eL a chaque lLeraLlon, modlfler le conLenu de ceLLe llsLe pour lnserer
ces mmes NUDS dans l'arbre. A la fln, sl vous l'avez comprls, ll ne resLera plus qu'un NUD dans la llsLe qul sera
donc la raclne de l'arbre !

! ueflnlr la sLrucLure struct noeud, deflnle en NOEUD, qul aura pour conLenu les champs sulvanLs :
- un polnLeur sur un CA8AC1L8L conLenanL les lnformaLlons d'un caracLere d'occurrence non nulle.
- un caracLere represenLanL le blL affecLe a ce noud
- un enLler de Lype int conLenanL le nombre d'occurrences cumulees (on en reparlera)
- un enLler de Lype int donnanL la profondeur de ce noeud
- un polnLeur sur un struct nud represenLanL le pere de ce noeud
- un polnLeur sur un struct nud represenLanL le flls gauche de ce noud
- un polnLeur sur un struct nud represenLanL la fllle drolLe de ce noud (cholx du rol)
- un polnLeur sur un struct nud represenLanL le noud sulvanL de ce noud dans une llsLe chainee
! ueflnlr la sLrucLure struct chaine, deflnle en CHAINE, qul aura pour conLenu les champs sulvanLs
- un polnLeur sur un nuuu, LLe de llsLe de la chaine.
- un enLler de Lype int conLenanL le nombre d'elemenLs de la chaine
! Creer une foncLlon creerNoeud qul prend en argumenLs d'enLree les valeurs des champs de nuuu pour
lnlLlallsaLlon eL qul renvole le nuuu cree.
! Creer une foncLlon construireArbreHuffman qul prend en argumenLs d'enLree le Las de CARACTERES,
alnsl que le nombre d'elemenLs de ce Las (Lou[ours NB_ASCII) eL qul renvole la raclne de l'arbre cree. volcl les
eLapes a reallser :
- SelecLlonner dans le Las les CARACTERES a occurrence non nulle. Cela permeL de generer un code
unlquemenL pour des caracLeres apparalssanL dans voLre LexLe. roflLez du falL que le Las esL Lrle !
1AB Structures de donnes 2013-2014
5/5
- Creer une llsLe chainee en y lnseranL des NUDS fabrlques en englobanL les CARACTERES precedenLs. Le
champ occurrences_cumulees sera lnlLlallse par le champ occurrences du CARACTERE.
- 1anL que la llsLe chainee comporLe plus d'un elemenL :
o Creer un NUD pere pour les deux premlers elemenLs de la llsLe. Son champ
occurrences_cumulees esL la somme des champs occurrences_cumulees de ses
enfanLs (d'ou cumulees.)
o ldenLlfler le champ pere pour chacun des enfanLs.
o MeLLre a 0 le blL du flls (gauche) eL a 1 le blL de la fllle (drolLe).
o Lnlever les enfanLs de la llsLe chainee, eL meLLre egalemenL les champs sulvanL des enfanLs a NULL.
o 8a[ouLer le pere a la llsLe chainee au bon endrolL pour garder la llsLe Lrlee (vous pouvez
evenLuellemenL falre une foncLlon lnserer)
o MeLLre a [our le nombre d'elemenLs de ceLLe llsLe.

L'arbre esL consLrulL ! ll fauL malnLenanL eLabllr le code pour chaque CARACTERE en foncLlon de la
poslLlon de son NUD assocle dans l'arbre.

@$ &' X O 8%$/T*% "*7 6$,*7
! C2,&61'&$27 O Ln deux Lemps : vous allez d'abord parcourlr l'arbre pour Lrouver le nuuu assocle au CA8AC1L8L
recherche (necessalremenL une feullle de l'arbre). une fols Lrouve, vous pouvez remonLer une premlere fols
[usqu'a la raclne de l'arbre grce au polnLeur sur le pere pour calculer la profondeur de ce nuuu. CeLLe
profondeur esL egalemenL la Lallle du code assocle a ce CA8AC1L8L. vous pourrez alors allouer la memolre
necessalre au champ code du CA8AC1L8L eL le rempllr en parcouranL une seconde fols de la feullle vers la raclne
(aLLenLlon a l'ordre LouL de mme).
! Creer une foncLlon chercherNoeud qul prend en argumenLs d'enLree la raclne de l'arbre alnsl que le code
ASCll du CA8AC1L8L recherche eL qul renvole le nuuu assocle. Cholslr le parcours (preflxe, lnflxe, posLflxe) qul
vous plaiL.
! Creer une foncLlon consLrulreCodesPuffman qul prend en argumenLs d'enLree le Las de CA8AC1L8LS, le nombre
d'elemenLs de ce Las (encore n8_ASCll) eL la raclne de l'arbre. Llle consLrulra les codes pour chaque CA8AC1L8L a
occurrence non nulle du Las.

vous Les fln prL pour le codage de source !

@$ &' Y O <$,*% "1 7$/%6*
! Creer une foncLlon coderSource qul prend en argumenLs d'enLree le LexLe a coder, la Lallle de ce LexLe, le Las de
CA8AC1L8LS eL le nombre d'elemenLs de ce Las (encore n8_ASCll). Llle renverra le code sous la forme d'un
Lableau de char donL la Lallle esL exacLemenL egale a la Lallle du code genere.

Ce n'esL pas flnl ! vous allez rendre voLre programme compaLlble au LralLemenL d'un flchler LexLe.

@$ &' Z O <(1%#*% "* '*['*
! C2,&61'&$27 O
- Les foncLlons de gesLlon d'enLrees/sorLles de flchler se LrouvenL dans la llbralrle stdio.
- Les eLapes qul vous permeLLenL de llre un flchler sonL :
o Cuvrlr du flchler en mode lecLure, recuperaLlon du polnLeur sur le flux (fopen)
o CompLer le nombre de caracLeres pour connaiLre la Lallle du Lableau a allouer. LnSL8 A
8LM8C8lnL8 LA 1L1L uL LLC1u8L AvAn1 uL Ll8L A nCuvLAu LL llCPlL8.
o LecLure du flchler avec une foncLlon de la llbralrle stdio (fgetc, fgets ou fscanf). Cn
remarquera que la lecLure des caracLeres deplace auLomaLlquemenL la LLe de lecLure.
o lermeLure du flchler qul comprend la llberaLlon du polnLeur (fclose).
Ce n'esL pas flnl !
@$ &' \ O E&1&7$2 ,]21)&Q/*
! 8endre voLre programme dynamlque en speclflanL a l'execuLlon du programme le flchler LexLe a conslderer

Ce n'esL pas flnl ! vous allez malnLenanL Lravalller sur le codage de canal.

Anda mungkin juga menyukai