cs_petifa
Messages postés215Date d'inscriptiondimanche 20 février 2005StatutMembreDernière intervention10 mars 2014 8 nov. 2008 à 21:01
oki mais les commentaires c pour expliquer, meme si le nom des fonctions sont assez explicites
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 8 nov. 2008 à 18:16
en fait, le 2i+1 ou 2i+2, ca depend si tu comptes a partir de 0 ou a partir de 1 :) dans mon explication, je commence a partir de 1, alors que dans mon code, a partir de 0 (normal)
pop correspond tres bien a ce qu'on fait : on supprime l'element du sommet (qui etait le plus grand), on reordonne le tas, et on le renvoie.
par contre pour le push, on imaginerait qu'on place qqch au dessus (or c'est pas une stack )
mais euh... le nomage, c'est du detail...
s, c'est la taille du tas, j'aurais pu faire un tas sous forme de :
struct tas {
int * tas;
size_t n;
}
pour inclure le "tas" dedans, sauf que ca m'aurait pose quelques problemes pour pouvoir faire un heapsort (qui se fait sur un foo*).
sinon, pour les commentaires... je n'ai que 5 fonctions...
fixup permet de faire remonter un element si il est superieur a son pere
fixdown fait l'inverse : il fait descendre un element quand il est inferieur a un de ses enfants
push et add, c'est pas trop dur de deviner ce que ca fait
draw_tas affiche un tas de nombres a un ou deux chiffres
to_exp2(n) renvoie l'exposant de deux directement superieur a n ( exemple to_exp2(12) = 16 )
ln2(n) renvoie le nombre de bits utilises pour coder n.
cs_petifa
Messages postés215Date d'inscriptiondimanche 20 février 2005StatutMembreDernière intervention10 mars 2014 8 nov. 2008 à 18:01
slt,
quelques remarques :
- dans ton explication :
#alors si un pere est numerote : i, ses enfants sont : 2i et 2i+1
c'est faux, c'est 2i+1 et 2i+2
- tu définis une fonction pop_tas, alors pourquoi tu mettrais pas push_tas à la place de add_tas
- de plus tu utilise un paramètre s++ dans ta fonction add, pourquoi ne pas faire en sorte de supprimer ce paramètre??
- quelques commentaires sur la source peuvent aider ...
8 nov. 2008 à 21:01
8 nov. 2008 à 18:16
pop correspond tres bien a ce qu'on fait : on supprime l'element du sommet (qui etait le plus grand), on reordonne le tas, et on le renvoie.
par contre pour le push, on imaginerait qu'on place qqch au dessus (or c'est pas une stack )
mais euh... le nomage, c'est du detail...
s, c'est la taille du tas, j'aurais pu faire un tas sous forme de :
struct tas {
int * tas;
size_t n;
}
pour inclure le "tas" dedans, sauf que ca m'aurait pose quelques problemes pour pouvoir faire un heapsort (qui se fait sur un foo*).
sinon, pour les commentaires... je n'ai que 5 fonctions...
fixup permet de faire remonter un element si il est superieur a son pere
fixdown fait l'inverse : il fait descendre un element quand il est inferieur a un de ses enfants
push et add, c'est pas trop dur de deviner ce que ca fait
draw_tas affiche un tas de nombres a un ou deux chiffres
to_exp2(n) renvoie l'exposant de deux directement superieur a n ( exemple to_exp2(12) = 16 )
ln2(n) renvoie le nombre de bits utilises pour coder n.
8 nov. 2008 à 18:01
quelques remarques :
- dans ton explication :
#alors si un pere est numerote : i, ses enfants sont : 2i et 2i+1
c'est faux, c'est 2i+1 et 2i+2
- tu définis une fonction pop_tas, alors pourquoi tu mettrais pas push_tas à la place de add_tas
- de plus tu utilise un paramètre s++ dans ta fonction add, pourquoi ne pas faire en sorte de supprimer ce paramètre??
- quelques commentaires sur la source peuvent aider ...