Algorithmie et
Structures de données
KESAKO ?
Guillaume FAURE-DUMONT
@guillaume_fd
Té ki dabor ?
Guillaume FAURE-DUMONT
Ingénieur EPITA (2005)
- Développeur
- Avant-vente Technique
- Architecte Logiciel (princ. en finance)
- Entrepreneur
- Développeur/CTO Freelance
MeetUp Ruby Parisiens:
ParisRB, WomenOnRails, MentorsOnRails, Paris Ruby Workshop
Spoilers
- C'est seulement un "crash course"
- L'algorithmie, c'est long ;)
- ... mais vous pourrez briller aux dîners
- ... ou passer pour un.e gros.se GEEK !
- Le vrai cours, il est dans THP Next !
- Je sais que Ruby, ES6, etc.. ont la méthode "X" qui fait ça !!!
- Savoir les coder fait toute la différence !
- Pouvoir choisir sa méthode peut tout changer !!
- Est-ce qu'au moins tu sais quel algo est utilisé ?
(au lieu de la ramener !)
Exemple de Besoin Client
- Trouver le MIN et le MAX d'une liste d'ENTIERS
- Tous uniques
- Compris entre 0 et 20
- www.random.org !!
- Ca doit aller vite !
- Pas de limite de mémoire
Précisions
On ne va parler que de théorie :
- On se fout du langage
- On veut quelque chose qui fonctionne tout le temps
- cas normaux ou exceptionnels
- Mais soit le plus rapide possible
On n'a pas plus de détails MAIS certains autres points pourraient changer toute la réflexion
Ca veut dire quoi "aller vite" ?
Nombre d'opérations élémentaires que doit faire le programme pour N valeurs
Opération élémentaire :
- Assignation
- Comparaison
- Opération arithmétique
AKA Complexité temporelle
Et la "limite mémoire" ?
L'espace mémoire utilisé par le programme pour obtenir le résultat.
Très difficile à maitriser pour les langages "managés"
AKA Complexité spaciale
Premiers essais
-
4; 3; 1; 16; 18; 13; 20; 2; 7; 6
-
15; 10; 10; 3; 7; 17; 4; 8; 20; 9; 1
Méthode
- Stocker les valeurs dans un tableau
- Parcourir le tableau case par case
- MAX: si la valeur est supérieure, on la garde
- MIN: si la valeur est inférieure, on la garde
- on passe à l'élément suivant
- Quand on a parcouru tout le tableau, on sait qu'on a la bonne valeur
=> On fait AUTANT d'opérations que la taille du tableau
Amélioration
SANS LES STOCKER spécifiquement
Comment faire pour retrouver (autre part dans le programme)
facilement les MIN et MAX ?
Trier le tableau
Algorithmes de tri de tableau :
- Y'en a 26 listés dans Wikipedia
- ... mais bcp plus en vrai !
- On peut les "comparer" selon certains critères :
- Meilleur cas
- Cas moyen
- Pire cas
- Stabilité
- Consommation mémoire
Tri à bulles
- On parcourt le tableau entier
- Quand un élément est plus grand que le suivant
- on les inverse
- On passe à l'élément suivant
- Quand un élément est plus grand que le suivant
- Quand on fait un parcous sans modification, c'est trié !
- Très simple à comprendre
- Très simple à implémenter
- Stable
- PAS DU TOUT EFFICACE ! O(n) - O(N²)
Tri rapide
- On choisit un élément de la liste (LE PIVOT)
- On parcourt tous les éléments
- Si élément > PIVOT => à droite
- Si élément < PIVOT => à gauche
- On obtient 2 sous-listes
- on refait pareil sur chacune
- Quand les listes sont d'un seul élément, c'est trié !
- Simple à comprendre
- A implémenter... ça va ;)
- Pas stable
- TRES EFFICACE ! (QUASI tout le temps) O(n log n) - O(N²)
Expérimenter et comprendre les différences
Il y a plein de méthodes différentes à expérimenter et comparer selon :
- Les contraintes métier (comparaison, stabilité ?)
- Le langage utilisé
- Les contraintes techniques (mémoire ?)
OK mais si on rajoute qqchose ?
Ba ... c'est la merde !
- Il faut re-trier le tableau
- Beaucoup d'algorithmes de tri n'aiment pas les tableaux "presque triés" !
Les ARBRES à la rescousse !
-
Structure de données assez courante
- ... et TRES pratique !
- On ne va parler que d'arbres binaires aujourd'hui
Arbre Binaire de Recherche
- Chaque nœud a une clef
- Chaque clef à gauche est =< à la clef de son parent
- Chaque clef à droite est => à la clef de son parent
DEMO !
Intérêt des ABR
- L'ajout trie directement
- Recherche de MIN / MAX
- Plus long que sur un tableau trié
- Beaucoup plus court que sur un tableau non-trié
- Recherche d'un élément
- Beaucoup plus court que sur un tableau (trié ou non !)
Inconvenients des ABR
Il faut apprendre à manipuler les arbres !
- Comment on supprime un nœud ??!?
- Parcourir les nœuds par ordre croissant
(parcours infixe)
- Autres parcours
- Equilibrage d'arbre :D
Besoin métier => Structure
Caractériser les structures de données
- Complexité
- Accès
- Recherche
- Ajout
- Suppression
Choisir la structure en fonction de ses besoins métiers
Autres structures de données...
- Matrices
- Qui a parlé de carte de jeu vidéo ???
- Qui a parlé de carte de jeu vidéo ???
- Matrices à n-dimensions
- Quels jeux 3D ??
- Quels jeux 3D ??
- Graph
- Et les votres !
...et méthodes de manipulation !
- Matrices
- Graph
Questions !
Guillaume FAURE-DUMONT
@guillaume_fd
Algorithmie et structures de données
By Guillaume Faure-Dumont
Algorithmie et structures de données
- 314