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

Algorithmes et structures de données Discussion :

Tri classiques - utilisations - apprentissage


Sujet :

Algorithmes et structures de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 26
    Points : 27
    Points
    27
    Par défaut Tri classiques - utilisations - apprentissage
    Bonjour !

    J'ai juste une question toute simple, est-ce que vous connaissez "par coeur" les tris classiques comme le tri par insertion, le tri par pivot, ... ?

    Parce que lorsque j'en ai besoin, je fais une recherche rapide mais je ne les connais pas par coeur.

    Merci bien !

  2. #2
    Membre expérimenté Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Points : 1 396
    Points
    1 396
    Par défaut
    Je pense que la plupart des gens peuvent te les coder en relisant leur description et que la plupart les ont codé dans leur vie et connaissent leurs caractéristiques (complexité spatiale et temporelle). En tout cas il me faudrait un peu du temps pour en coder un de nul part...

    Aussi, personne ne les "recodent" pas car on utilise ceux déjà disponibles dans les librairies du langage. Et si on a à les recoder c'est certainement pas aussi simple qu'un tri bateau.

  3. #3
    En attente de confirmation mail

    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 639
    Points : 2 347
    Points
    2 347
    Par défaut
    Il suffit de retrouver le principe de l'algo (de mémoire ou par une recherche). Ensuite on gribouille et on réfléchit pour trouver l'algo exact et sa complexité, puis on peut ensuite en faire une implémentation correcte. Les apprendre par coeur n'aurait aucun sens, dans ce cas il y aurait des centaines d'algorithmes (pas seulement de tri) à connaître par coeur.

  4. #4
    Membre actif Avatar de zaza576
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2013
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2013
    Messages : 175
    Points : 275
    Points
    275
    Par défaut
    J'avais un enseignant qui me disait " Fais un dessin, tu verras ca ira mieux après..."

    Si tu maîtrises bien un algorithme, tu peux le connaître par coeur.
    Si tu doutes, poses ton algorithme sur le papier quitte à le dessiner si tu peux et essaies de parcourir tous les cas de figure. Une fois ceci fait, tu le codes.

    On n'est pas non plus des compilateurs ! On est humain à la base. Pourquoi tout vouloir apprendre par coeur ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function googleIsYourF*ck*ngFriend(String url, String maQuestion){
        goTo(url);
        reponse = find(maQuestion);
        if(isAcceptable(reponse)){
            clickOn(By.xpath("//button[@id='resolvedButton']"));
        }
        sendMessage("Merci");
    }
    
    googleIsYourF*ck*ingFriend("http://www.google.fr", "ma question");

  5. #5
    Membre éprouvé
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Points : 1 158
    Points
    1 158
    Billets dans le blog
    1
    Par défaut
    je connais le principe de plusieurs d'entre eux. Je pourrais les coder si j'avais du temps à perdre. Je ne les coderai jamais dans la vraie vie pk coder c'est sympa, mais débugguer c'est beurk. et puis tous les langages ou presque ont une fonction sort. ceci dit c'est très très très utile de connaître les principes généraux d'un maximum d'algorithmes usuels. Les algorithmes, c'est la géographie de l'informatique. Ils permettent de savoir où on est et de se diriger vers là ou on veut aller.
    "La vraie grandeur se mesure par la liberté que vous donnez aux autres, et non par votre capacité à les contraindre de faire ce que vous voulez." Larry Wall, concepteur de Perl.

  6. #6
    Membre actif Avatar de zaza576
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2013
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2013
    Messages : 175
    Points : 275
    Points
    275
    Par défaut
    Hello,

    après c'est toujours intéressant, comme le disait le capitaine Haddock (ol9245), de connaître le contexte d'utilisation de ces algorithmes de tri et leur complexité.

    Quand tu auras à traiter des flots de données de plusieurs Gigaoctets et que tu devras trier cela, en fonction du type de données, et du type d'algorithme utilisé pour trier, le temps de calcul ne sera pas le même, ni la consommation mémoire et CPU.

    A chaque algorithme son problème. Eviter au maximum le O(n²) et O(e^n) ^^ !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function googleIsYourF*ck*ngFriend(String url, String maQuestion){
        goTo(url);
        reponse = find(maQuestion);
        if(isAcceptable(reponse)){
            clickOn(By.xpath("//button[@id='resolvedButton']"));
        }
        sendMessage("Merci");
    }
    
    googleIsYourF*ck*ingFriend("http://www.google.fr", "ma question");

  7. #7
    Membre régulier
    Homme Profil pro
    Thésard
    Inscrit en
    Mars 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Thésard
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2013
    Messages : 54
    Points : 78
    Points
    78
    Par défaut
    A mon sens, je ne vois pas l'intérêt d'apprendre des choses par coeur si elles ne représentent pas la base de ce dont tu as besoin. Il me semble en revanche essentiel de savoir rechercher de l'information et de l'évaluer.

    Je trouve qu'il est important de pouvoir comprendre comment fonctionne différents algorithmes et d'en comprendre leurs avantages et leurs faiblesses. Et puis avec la pratique il y a des choses qui rentrent toutes seules.

    Pour résumer, je trouve qu'il est plus important de comprendre que de savoir, même si parfois, pour comprendre il faut savoir au moins un minimum...

  8. #8
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut
    il est quand même intéressant de connaitre les différent algorithme
    d'en connaitre l'utilité et ses contraintes.
    je ne dis pas de connaitre son implémentation ... elle est pour ainsi dire déjà implémenté de nombreuses fois dans diverses librairies
    mais connaitre le principe générale permet déjà d'affiné ta recherche d'optimisation.

    un exemple me viens en tête qui connais le "Tri comptage" ?
    très peu usité car de nombreuses contraintes mais si toutes les contrainte sont respecté il fait partie des trie les plus rapide.

    comme le disait un des interlocuteur tout dépend du contexte


    PS : Pour les Gigaoctets évite le "Tri comptage"
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  9. #9
    Membre actif Avatar de zaza576
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2013
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2013
    Messages : 175
    Points : 275
    Points
    275
    Par défaut
    Citation Envoyé par anapurna Voir le message
    un exemple me viens en tête qui connais le "Tri comptage" ?
    très peu usité car de nombreuses contraintes mais si toutes les contrainte sont respecté il fait partie des trie les plus rapide.

    Je découvre cet algo de tri "comptage". Est-il plus rapide que le quicksort ou le tri bucket ?

    Qu'utiliserais-tu pour trier de très gros volumes de données (de l'ordre du Go, pas forcément un filesystem avec plusieurs fichiers de Go mais aussi des milliards de petits fichiers) par contrainte ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function googleIsYourF*ck*ngFriend(String url, String maQuestion){
        goTo(url);
        reponse = find(maQuestion);
        if(isAcceptable(reponse)){
            clickOn(By.xpath("//button[@id='resolvedButton']"));
        }
        sendMessage("Merci");
    }
    
    googleIsYourF*ck*ingFriend("http://www.google.fr", "ma question");

  10. #10
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut

    dans certaine condition il peut être plus rapide que le quicksort puisqu'il ne se fait quand une passe
    Je ne compte pas l'initialisation du tableau receveur
    ni la remise en ordre des valeurs du tableau dans le tableau d'origine

    Par contre pour de Go ne même pas penser a ce type d'algo trop de variables et l'etendu est trop importante

    Ce que dit wikipédia sur le sujet des tri
    Tris par comparaison
    Algorithmes lents

    Ces algorithmes sont lents pour plus de 20 éléments parce qu'ils sont en O(n2).

    Tri à bulles : Algorithme quadratique, T(n) = O(n2), en moyenne et dans le pire des cas, stable et en place ; amusant mais pas efficace
    Tri par sélection : Algorithme quadratique, T(n) = O(n2), en moyenne et dans le pire des cas, pas stable si tri sur place ; rapide lorsque l'on a moins de 7 éléments
    Tri par insertion : Algorithme quadratique, T(n) = O(n2), en moyenne et dans le pire des cas, stable et en place. C'est le plus rapide et le plus utilisé pour des listes de moins de 15 éléments ;

    Algorithmes plus rapides

    Tri de Shell (shell sort) : Amélioration du tri par insertion, mais pas stable. Complexité : au pire O(n \log^2 n) pour la série de pas 2^p3^q et O(n\sqrt{n}) pour la série de pas 2^k-1. On ne connaît pas de série donnant O(n \log n).

    Tri fusion (merge sort) : O(n \log n) en moyenne et dans le pire des cas, stable mais pas en place3 ;
    Tri rapide (quick sort) : O(n \log n) en moyenne, mais en O(n^2) (quadratique) au pire cas4, en place mais pas stable
    Introsort : Amélioration du tri rapide, qui permet une exécution en O(n \log n) dans tous les cas.

    Tri par tas (heap sort) : O(n \log n) en moyenne et dans le pire des cas, en place mais pas stable. Toujours environ deux fois plus lent que le tri rapide, c'est-à-dire aux alentours de O(n \log n), il est donc intéressant de l'utiliser si l'on soupçonne que les données à trier seront souvent des cas quadratiques pour le tri rapide ;

    Tri par ABR : O(n \log n) en moyenne, O(n^2) dans le pire des cas. Ce tri est un des plus lents (parmi les tris rapides) et des plus gourmands en mémoire à cause de la structure d'arbre binaire à manipuler. Il est possible de le rendre O(n \log n) dans tous les cas en maintenant un arbre équilibré (Arbre AVL).

    Smoothsort : tri inspiré du tri par tas en utilisant un arbre non inversé, ce tri est très rapide pour les ensembles déjà presque triés, sinon, il est en O(n \log n). Tri en place mais pas stable
    à toi de voir les conditions initiale afin de définir le meilleur choix
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Points : 16
    Points
    16
    Par défaut
    voila exemple de tri

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
     
     
    AlgoBox : tri par insertion
    program tri(input,output
     
    Code de l'algorithme
    1   VARIABLES
    2     i EST_DU_TYPE NOMBRE
    3     j EST_DU_TYPE NOMBRE
    4     rangmin EST_DU_TYPE NOMBRE
    5     min EST_DU_TYPE NOMBRE
    6     t EST_DU_TYPE LISTE
    7   DEBUT_ALGORITHME
    8     AFFICHER "introduisezz les element du tableau"
    9     POUR i ALLANT_DE 1 A 5
    10      DEBUT_POUR
    11      LIRE t[i]
    12      FIN_POUR
    13    POUR i ALLANT_DE 1 A 5
    14      DEBUT_POUR
    15      min PREND_LA_VALEUR t[i]
    16      rangmin PREND_LA_VALEUR i
    17      POUR j ALLANT_DE i+1 A 5
    18        DEBUT_POUR
    19        SI (t[j]<min) ALORS
    20          DEBUT_SI
    21          min PREND_LA_VALEUR t[j]
    22          rangmin PREND_LA_VALEUR j
    23          FIN_SI
    24        FIN_POUR
    25      t[rangmin] PREND_LA_VALEUR t[i]
    26      t[i] PREND_LA_VALEUR min
    27      FIN_POUR
    28    
    29    POUR i ALLANT_DE 1 A 5
    30      DEBUT_POUR
    31      AFFICHER t[ i ]
    32      FIN_POUR
    33  FIN_ALGORITHME
     
    Résultats
    ***Algorithme lancé***
    introduisezz les element du tableau
    Entrer le terme de rang i de la liste t : 555
    Entrer le terme de rang i de la liste t : 555
    Entrer le terme de rang i de la liste t : 2122
    Entrer le terme de rang i de la liste t : 2555.
    Entrer le terme de rang i de la liste t : 52
    52
    555
    555
    2122
    2555
    ***Algorithme terminé***
     
    Généré par AlgoBox

  12. #12
    Membre actif Avatar de zaza576
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2013
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2013
    Messages : 175
    Points : 275
    Points
    275
    Par défaut
    Tu vas pas tous nous les poster sur cette discussion j'espère ?
    De plus, cela ne répond pas du tout à la question de base !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function googleIsYourF*ck*ngFriend(String url, String maQuestion){
        goTo(url);
        reponse = find(maQuestion);
        if(isAcceptable(reponse)){
            clickOn(By.xpath("//button[@id='resolvedButton']"));
        }
        sendMessage("Merci");
    }
    
    googleIsYourF*ck*ingFriend("http://www.google.fr", "ma question");

  13. #13
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Les algorithme de tri sont une base. Cependant, c'est leur apprentissage est plus présent pour introduire la notion de complexité d'un algorithme, ainsi que la capacité d'analyse des algorithmes de manière général.
    Il est très peu probable qu'un développeur ai à coder un algorithme de tri générique tel qu'on le présente en classe. Il y a de plus en plus d'API qui proposent un tri à partir d'une fonction de comparaison et se charge de faire la partie algorithmique.

    Cependant, il sera peut-être confronté à un traitement trop long dû à un algorithme ayant une complexité trop élevée. A ce moment là, il lui sera nécessaire de comprendre en quoi cette algorithme est consommateur et les éventuelles solutions possible. (Et potentiellement reprendre ce qui existe dans les algorithmes de tri.)

    Donc les algorithmes de tri, à comprendre plus qu'à connaitre.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

Discussions similaires

  1. Réponses: 6
    Dernier message: 11/05/2014, 10h29
  2. Un classique des méthodes de tri
    Par bros_70 dans le forum Langage
    Réponses: 4
    Dernier message: 11/04/2007, 17h03
  3. UTILISATION DE TRY et CATCH
    Par demcoul dans le forum JBuilder
    Réponses: 1
    Dernier message: 15/04/2006, 15h01
  4. UTILISATION DE Try
    Par demcoul dans le forum JBuilder
    Réponses: 2
    Dernier message: 08/04/2006, 17h57
  5. Simplicité d'utilisation et d'apprentissage ?
    Par kernel57 dans le forum WinDev
    Réponses: 3
    Dernier message: 02/12/2005, 14h52

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