IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

tri d'une liste chainee


Sujet :

C

  1. #21
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par Médinoc
    Ensuite, c'est non seulement une question esthétique, mais aussi une question sémantique. Il peut être pertinent (ou paraitre pertinent à quelqu'un, l'auteur en premier) qu'un paramètre soit directement réutilisé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    struct dblchn * GetLast(struct dblchn * pElem)
    {
    	if(pElem==NULL)
    		return NULL;
    	while(pElem->pNext != NULL)
    	{
    		pElem = pElem->pNext;
    	}
    	return pElem;
    }
    Dans cette fonction (qui retourne le dernier chaînon d'une liste doublement chaînée), j'aurais pu créer une variable locale pour l'utiliser à la place de pElem dans la boucle, mais quel intéret ?

    Edit: Ici, je me demande même si ajouter une variable n'aurait pas nuit à la lisibilité ou à la simplicité du code...
    Oui mais ma remarque et mon arrivée dans cette discussion est de dire que le compilateur ne verra pas de différence avec ta solution ou la version avec une variable supplémentaire.

    Une des premières choses que le compilateur fait est mettre le code en forme SSA. De ce principe, tu peux mettre autant de variables locales ou utiliser les paramètres, si tu fais la même chose, le compilateur devrait générer le même code au final.

    Jc

  2. #22
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    La récursivité, c'est le Diable.
    Nous ne sommes pas d'accord sur ce point. La récursivité existe. Le Diable, la preuve en reste encore à faire.

    Tu vas me parler de la taille limitée de la pile. En pratique, chaque fois que la pile a explosé sous mes yeux, il y avait un bug qui aurait fait aussi exploser le tas. En fait, avec la taille limitée de la pile, le problème arrivait plus vite. Les seuls cas où j'ai vu des problèmes dus à la taille limitée de la pile, il n'y avait pas de récursivité présente...

  3. #23
    Membre Expert
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Par défaut
    Je suis prêt à publier quelques croustillantes fonctions tout récursives qu'il est très difficile de concurrencer en programmant de façon tout impérative en termes de performances (et en termes de lisibilité, oublions !).

    De plus, comme le dit Jean-Marc, du moment où le tas est le plus souvent sauvegardé dans la pile, on peut avoir un stack overflow (ou un segfault, tout dépend) sans faire de récursivité... c'est comme ça que je me suis fait baiser l'autre jour parce que j'avais alloué en automatique un tableau de 1 000 000 de int dans le main !

  4. #24
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Une des premières choses que le compilateur fait est mettre le code en forme SSA. De ce principe, tu peux mettre autant de variables locales ou utiliser les paramètres, si tu fais la même chose, le compilateur devrait générer le même code au final.
    Je ne sais pas ce qu'est la "forme SSA", (l'informatique a tendance à engendrer plus de sigles ésotériques que tout autre discipline de façon que les Béotiens (dont je suis, puisque je ne comprends pas) trouvent le discours abscons,(ce qu'il finit par être effectivement) )mais , en langage Béotien, les paramètres sont des variables locales au même titre que les autres mais qui sont simplement initialisées .

    Je ne suis pas sûr que le posteur soit très avancé par ces considérations qui débordent largement du problème qui a motivé sa question

  5. #25
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 66
    Par défaut
    Citation Envoyé par diogene
    Je ne suis pas sûr que le posteur soit très avancé par ces considérations qui débordent largement du problème qui a motivé sa question
    Lui peut être pas, mais moi je suis plutôt content d'en apprendre un peu ! et rien n'oblige le posteur à lire...

    Sinon tu me donnes l'occasion de pester contre les sigles Moi aussi ça me saoule quand j'arrive dans une nouvelles boîte d'entre de nouveaux sigles que je dois toujours assimiler et autant je peux comprendre qu'on utilise ça dans un texte, autant je ne comprends pas qu'on utilise des sigles à l'oral (c'est si difficile de dire "procédure stockée" à la place de "PS" ???). Je n'ai pas l'impression que ce soit une tendance informatique, mais que c'est général et que ça fait bon genre voire "in" de connaître 2-3 sigles.

    bon je crois que j'ai besoin de dormir. Soyez sage les enfants.

  6. #26
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par diogene
    Je ne sais pas ce qu'est la "forme SSA", (l'informatique a tendance à engendrer plus de sigles ésotériques que tout autre discipline de façon que les Béotiens (dont je suis, puisque je ne comprends pas) trouvent le discours abscons,(ce qu'il finit par être effectivement) )mais , en langage Béotien, les paramètres sont des variables locales au même titre que les autres mais qui sont simplement initialisées .

    Je ne suis pas sûr que le posteur soit très avancé par ces considérations qui débordent largement du problème qui a motivé sa question
    Désolé, SSA -> Static Single Assignement

    En gros une variable ne peut que prendre une valeur.

    Donc lorsqu'on écrit :
    le compilateur le transforme en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    x_0 = 10
    x_1 = x_0 + 1
    Pourquoi ? Parce que c'est plus facile à optimiser.

    Jc

  7. #27
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par benhoeil
    Citation Envoyé par diogene
    Je ne suis pas sûr que le posteur soit très avancé par ces considérations qui débordent largement du problème qui a motivé sa question
    Lui peut être pas, mais moi je suis plutôt content d'en apprendre un peu ! et rien n'oblige le posteur à lire...
    En ce qui me concerne aussi, je trouve ce post très intéressant...

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  8. #28
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par fearyourself
    Désolé, SSA -> Static Single Assignement

    En gros une variable ne peut que prendre une valeur.
    Une variable n'est assignée qu'a un endroit (si c'est dans une boucle, elle va l'etre plusieurs fois).

  9. #29
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Une variable n'est assignée qu'a un endroit (si c'est dans une boucle, elle va l'etre plusieurs fois).
    Exact, mauvais choix de mots de ma part.

    Chaque variable a le droit d'avoir une seule instruction d'affectation.

    C'est une des premières passes du compilateur. Cela facilite (voir même permet) aux autres optimisations de fonctionner.

    C'est d'ailleurs la raison pourquoi déclarer une variable locale ne change rien au code. Puisque de toute facon, lorsqu'on écrit ceci :
    ou directement :
    le compilateur va de toute facon renommer la variable a en :

    Jc

  10. #30
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par fearyourself
    C'est une des premières passes du compilateur. Cela facilite (voir même permet) aux autres optimisations de fonctionner.
    Il y a des optimisations qui sont plus faciles sous cette forme, d'autres qui sont plus faciles sous d'autres formes. Je doute que tous les compilateurs aient exactement le meme comportement en la matiere; je ne suis meme pas sur du tout que tous les compilateurs optimisant utilisent une forme SSA. GCC utilise trois ou quatre formats dont SSA; je ne sais pas dans quel ordre.

  11. #31
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Il y a des optimisations qui sont plus faciles sous cette forme, d'autres qui sont plus faciles sous d'autres formes. Je doute que tous les compilateurs aient exactement le meme comportement en la matiere; je ne suis meme pas sur du tout que tous les compilateurs optimisant utilisent une forme SSA. GCC utilise trois ou quatre formats dont SSA; je ne sais pas dans quel ordre.
    Certes, mais je crois que si on regarde et, ce que j'en sais, cette passe permet juste un renommage des variables ce qui permet de simplifier énormément la complexité des autres passes.

    Je suis convaincu qu'il existe des compilateurs qui ne le font pas. Mais généralement, cela facilite énormément les passes du compilateurs (enlever le code inutile par exemple, ou l'allocation des registres).

    Enfin, effectivement, cela dépend du compilateur comme toujours, mais un compilateur bien réglé devrait générer le même code pour l'exemple que j'ai donné au-dessus.

    Jc

  12. #32
    Membre Expert
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Par défaut
    C'est entre autres pour celà que l'on dit que les langages fonctionnels sont plus faciles à optimiser ?

  13. #33
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par InOCamlWeTrust
    C'est entre autres pour celà que l'on dit que les langages fonctionnels sont plus faciles à optimiser ?
    L'absence d'effet de bord est aussi un facteur.

Discussions similaires

  1. [LG]inserer dans une liste chainee
    Par jaabouc dans le forum Langage
    Réponses: 4
    Dernier message: 19/04/2004, 00h44
  2. [LG]probleme d'ajout dans une liste chainée...
    Par misteryann dans le forum Langage
    Réponses: 5
    Dernier message: 08/03/2004, 20h28
  3. [LG]Tri par insertion dans une liste chainée
    Par mister_dsg dans le forum Langage
    Réponses: 4
    Dernier message: 18/12/2003, 22h34
  4. [LG]suppression dans une liste chainée
    Par mister_dsg dans le forum Langage
    Réponses: 9
    Dernier message: 16/12/2003, 21h20
  5. tri d'une liste
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 09/01/2003, 18h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo