Récursivité et vitesse - C++ - Programmation
Marsh Posté le 18-02-2004 à 13:50:38
trop vague
explique ce que tu fais, comment, ptet un bout de code, machin, toussa quoi
Marsh Posté le 18-02-2004 à 13:53:55
ouais bout de code, voir fonction entière, du moins les passages interessant (variables, et appels récursifs)
Marsh Posté le 18-02-2004 à 13:53:59
Ben si c'est une arborescence que tu crées et dont tu controles la structure, tu devrais avoir moyen de réecrire ca de maniere itérative, non?
A+,
Marsh Posté le 18-02-2004 à 15:29:55
bon alors voila l'arborescence que je scan n'est pas cree par moi et je n'en connais pas la taille. il s'agit en fait du registre.
Code :
|
voila mon code j'espert que c pas trop bordelique
Marsh Posté le 18-02-2004 à 16:17:29
Déjà :
|
C'est vraiment pas terrible de mettre deux variables avec le meme nom
Je suspecte fortement que tes problèmes viennent plus du fait des fonctions AfficheCle(i) et autres que de la récursivité. Faudrait voir leur code.
Essaye d'optimiser un peu ton code si tu as encore des problèmes :
Par exemple, tu calcul Temps.EnumCle() a chaque itération de la boucle
Temps.CleOuverte() ça serait pas obligatoirement egal a Cle par hasard ?
Marsh Posté le 18-02-2004 à 16:23:33
je sais pas ce que tu peux faire avec ton Temps, mais avec temps, y a du travail a faire, tu peux sans doute gagner un peux en utilisant le constructeur par recopie temps(machin), voir meme tenter la référence const string &temps( machin );
évite de faire un apple à en EnumCle() à chaque passe, bref, pré-calcul tout ce que tu peux
Marsh Posté le 18-02-2004 à 16:34:49
pascal_ a écrit : Déjà :
|
merci tu avais raison le ralentissement vennait de EnumCle que je rappelais a chaque fois, g transformé mon code en ca :
Code :
|
ca marche nettement mieux
Marsh Posté le 18-02-2004 à 19:27:53
taz a écrit : carrément |
Euh oui, comme je le disais [C'est pas son cas, mais ca n'etait pas connu lorsque j'ai tapé ma reponse] quand tu maitrise la structure de donnée de ton arborescence, tu n'as pas besoin de faire de la recursivité pour parcourir un arbre.
Code :
|
A+,
Marsh Posté le 18-02-2004 à 21:50:36
Ah beh ouai, si tu possèdes le père et le frère...
Marsh Posté le 19-02-2004 à 10:42:09
HelloWorld a écrit : Ah beh ouai, si tu possèdes le père et le frère... |
tiens, je crois que c'est la première fois que je vois un arbre comme ça.
remarque c'est pas bete ça évite de se farcir une liste de fils.
Marsh Posté le 19-02-2004 à 11:45:37
pascal_ a écrit : |
Ben moi qui suis spécialiste es arbres structures, je peux te dire que ce type de structure est efficace si tu programme en C. Vas voir par exemple dans le code d'Amaya si tu veux une structure de ce type, utilisée IRL.
Bon, une vraie structure efficace, elle est comme ca en fait:
Code :
|
Bon, faut optimiser la gestion memoire en allouant les noeuds par blocs et en réeutilisant les noeuds liberes...
Avec ce type de structure, tu peux coder le parcours d'arbre en avant et en arriere, en profondeur d'abord ou en largeur d'abord, sans faire de recursif.
A+,
Marsh Posté le 19-02-2004 à 13:53:35
C'est l'exemple classique du chiox entre processeur et mémoire. Ta structure est 2 fois plus grosse, mais + rapide...
Marsh Posté le 27-03-2004 à 00:35:40
gilou a écrit : |
Je me permets de upper ce topic.
T'aurais pas des liens/astuces pour le codage d'arbres non équilibrés (en vue de compression) ?
Marsh Posté le 27-03-2004 à 00:42:20
marmotte.tranquille a écrit : |
Huffman
Marsh Posté le 27-03-2004 à 01:34:38
Ben Huffman, c'est pour une compression statistique...
L'idée c'est de compresser l'architecture de l'arbre.
Avec un arbre normal pour chaque noeud tu as : valeur+fils+pere+voisin ca prend trop de place
Si tu as un arbre équilibré, tu peux stocker juste les valeurs dans un tableau et retrouver la position des fils/pères facilement.
Dans le cas d'un arbre non équilibré, je voulais savoir s'il y avait des astuces du genre.
Marsh Posté le 27-03-2004 à 13:32:02
Réequilibrer l'arbre ? C'est assez efficace en général...
Marsh Posté le 30-03-2004 à 00:19:38
Non non. Si l'arbre a cette forme, c'est voulu. (ou sinon faudrait déséquilibré l'arbre après )
J'ai trouvé quelques méthodes qui me conviendront (EZW, SPIHT pour les citer). Merci
Marsh Posté le 30-03-2004 à 01:34:18
marmotte.tranquille a écrit : Ben Huffman, c'est pour une compression statistique... |
Tu peux deja t'arranger pour ne maintenir un que pointeur pour le pere commun a un groupe de freres.
Pour chaque pere, tu vas avoir besoin de savoir ou est le premier fils a priori.
Mais si les reallocs ne te genent pas en cours de construction d'arbre, tu peux aussi t'arranger pour maintenir chaque groupe de noeuds freres comme un tableau, ce qui t'evitera de stocker les pointeurs sur le noeud voisin. Faut savoir gerer une marque de fin de tableau (pour laquelle, la case pointeur sur le premier fils correspondra alors a un pointeur sur la case noeud pere de ce groupe de freres) [si tu peux utiliser une valeur, que tu sais jamais attteinte par les valeurs que tu stockes dans ton arbre, c'est parfait comme marque de fin de tableau].
A+,
Marsh Posté le 30-03-2004 à 01:55:10
gilou a écrit : |
J'ai besoin aussi de la position des autres fils (ils ne sont pas forcément consécutifs et leur place est importante) et c'est ce qui m'embête le plus.
Sinon merci pour les autres idées.
Marsh Posté le 18-02-2004 à 13:49:49
slt tlm, voila g créé une methode recursive pour scanner une arborescence sans rien oublier. apres pls test ma methode marche mais et elle tres lourde pour le processeur et pour la ram. j'aimerai savoir comment faire un code pour scanner une arborescence sans passer par la recursivité pour avoir un gain de performance.
---------------
In a world without walls and fences, who needs Windows and Gates