View
4
Download
0
Category
Preview:
Citation preview
Algorithmique avancéeIntroduction aux structures de données
Frédéric Guyomarch
IUT-AUniversité de Lille, Sciences et Technologies
2015/2016 - Semestre 3
Algorithmique avancée Frédéric Guyomarch
Intervenants
• Groupe K : Adrien Maudet• Groupe L : David Selosse• Groupe M : Frédéric Guyomarch• Groupe N : Adrien Maudet
Algorithmique avancée Frédéric Guyomarch
Organisation du cours
• Volume horaire• 16h de TD (2h/semaine)• 16h de TP en Java (2h/semaine)• 8h de CM (1h/semaine chaque mardi)
• Evaluation• un TP noté• un examen final
Algorithmique avancée Frédéric Guyomarch
Des structures...de données !
Les données sont partout, parfois complexes et souventstructurées par nature !
DictionnaireUne carte
Algorithmique avancée Frédéric Guyomarch
Introduction aux structures de données
DefinitionUne structure de données (SDD) est un agencement, unemanière d’organiser les données en mémoire.
Algorithms + Data Structures = Programs (Niklaus Wirth)
Algorithmique avancée Frédéric Guyomarch
Introduction aux structures de donnéesObjectifs de la matière
• Découvrir les principales structures de données (SDD),• ainsi que les algorithmes associés,• savoir les modéliser,• pour au final utiliser les SDD adaptées aux problèmes.
Algorithmique avancée Frédéric Guyomarch
Introduction aux structures de donnéesContenu de la matière
• Algorithmes de tris• Listes chaînées• Piles/Files• Tables de hachage• Arbres binaires
Algorithmique avancée Frédéric Guyomarch
Introduction aux structures de donnéesUne classification grossière des SDD
• Stockage de données réelles (listes chaînées, hashtables,etc.)
• Outils de programmeurs pour les programmeurs (filesavec priorités, piles, etc.)
• Modélisation (graphes, files,etc.)
Algorithmique avancée Frédéric Guyomarch
Rappel sur les tableauxEn Java
/∗ Dec l a r a t i o n d ’ un t ab l e a u d ’ e n t i e r s ∗/i n t [ ] tab ;/∗ A l l o c a t i o n de ce t a b l e a u de t a i l l e 10 ∗/tab = new i n t [ 1 0 ] ;
2200 1 2 3 4 5 6 7 8 9
Algorithmique avancée Frédéric Guyomarch
Rappel sur les tableauxInsertion
Ajouts successifs des valeurs 22, 11, 8, 17, 25, 34, 47, 52, 69et 98.
2200 1 2 3 4 5 6 7 8 9
220
220 1 2 3 4 5 6 7 8 9
220
220
111 2 3 4 5 6 7 8 9
220
220
111
82 3 4 5 6 7 8 9
220
220
111
82
173 4 5 6 7 8 9
220
220
111
82
173
254 5 6 7 8 9
220
220
111
82
173
254
345
476
527
698
989
Il suffit d’incrémenter un compteur pour placer chaque valeurau bon endroit.
Algorithmique avancée Frédéric Guyomarch
Rappel sur les tableauxRecherche Séquentielle
Recherche de la valeur 47 :
220
220
111
82
173
254
345
476
527
698
989
i n t s e a r c h ( i n t va l , i n t [ ] tab ){f o r ( i n t i =0 ; i < tab . l e n g t h ; i ++){
i f ( tab [ i ]==va l ){r e t u r n i ;
}}r e t u r n −1 ;
}
Dans le pire cas n itérations...
Algorithmique avancée Frédéric Guyomarch
Rappel sur les tableauxSuppression
Suppression (sans trou dans le tableau) de la valeur 47 :
220
220
111
82
173
254
345
476
527
698
989
220
220
111
82
173
254
345
476
527
698
989
220
220
111
82
173
254
345 6
527
698
989
220
220
111
82
173
254
345 6
527
698
989
220
220
111
82
173
254
345 6
527
698
989
220
220
111
82
173
254
345 6
527
698
989
1 Recherche de la valeur 47 (index i = 6)2 Décalage de -1 pour les cases d’index i + 1 à n − 1
Algorithmique avancée Frédéric Guyomarch
Tableau ordonnéInsertion
Ajouts successifs des valeurs 22, 11, 8, 17, 25, 34, 47, 52, 69et 98.
2200 1 2 3 4 5 6 7 8 9
220
220 1 2 3 4 5 6 7 8 9
2200
111 2 3 4 5 6 7 8 9
22
2200
111
82 3 4 5 6 7 8 9
22
2200
111
82
173 4 5 6 7 8 9
22
2200
111
82
173
254 5 6 7 8 9
22
2200
111
82
173
254
345
476
527
698
989
22
Chaque valeur doit être re-positionnée à la bonne place àchaque insertion
Algorithmique avancée Frédéric Guyomarch
Tableau ordonnéRecherche
• Recherche séquentielle inefficace• Utilisation du caractère trié du tableau• Principe de la recherche dichotomique
Algorithmique avancée Frédéric Guyomarch
Tableau ordonnéRecherche dichotomique
Recherche de la valeur 47 :2200
111
82
173
254
345
476
527
698
989
22
2200
111
82
173
254
345
476
527
698
989
22
début milieu fin
2200
111
82
173
254
345
476
527
698
989
22
début milieu fin
2200
111
82
173
254
345
476
527
698
989
22
début milieu fin
2200
111
82
173
254
345
476
527
698
989
22
début milieu fin
2200
111
82
173
254
345
476
527
698
989
22
findébut = milieu
2200
111
82
173
254
345
476
527
698
989
22
findébut = milieu
2200
111
82
173
254
345
476
527
698
989
22
début = milieu = fin
• début = 0• fin = 9• milieu = (début+fin/2) = 4
tab[milieu] < 47
• début = 0• fin = 9• milieu = (début+fin/2) = 4
tab[milieu] < 47⇒ 47 est enpartie droite
• début = milieu + 1 = 5• fin = 9• milieu = (début+fin/2) = 7
tab[milieu] > 47
• début = milieu + 1 = 5• fin = 9• milieu = (début+fin/2) = 7
tab[milieu] > 47⇒ 47 est enpartie gauche
• début = 5• fin = milieu - 1 = 6• milieu = (début+fin/2) = 5
tab[milieu] < 47
• début = 5• fin = milieu - 1 = 6• milieu = (début+fin/2) = 5
tab[milieu] < 47⇒ 47 est enpartie droite
• début = milieu + 1 = 6• fin = 6• milieu = (début+fin/2) = 6
tab[milieu] = 47⇒ 47 est trouvé
Au pire log2n itérations
Algorithmique avancée Frédéric Guyomarch
Comparaison
• L’insertion est plus rapide dans le tableau non ordonné• La recherche est beaucoup plus rapide dans un tableau
ordonné• La suppression d’une valeur (recherche exclue) prend un
temps équivalent dans les deux cas
Quelle est la meilleure des deux SDD?
Ça dépend de la situation !
Algorithmique avancée Frédéric Guyomarch
Tableau ordonné ou non ordonné ?
Un tableau ordonné serait plus adapté pour un registred’employés :
• car peu d’ajouts,• mais des recherches fréquentes.
Et un tableau non ordonné à un historique des achats :• car insertions fréquentes,• mais recherches plus rares.
Algorithmique avancée Frédéric Guyomarch
Les types de données abstraits
DefinitionUn type de données abstrait (TDA) est une spécification dedonnées et des opérations réalisables sur ces données.
• La spécification est indépendante de l’implémentation• Analogie avec les classes du paradigme objet
Algorithmique avancée Frédéric Guyomarch
Les types de données abstraitsExemple de la voiture
Algorithmique avancée Frédéric Guyomarch
Les types de données abstraitsExemple de la voiture
Implémentation
Algorithmique avancée Frédéric Guyomarch
Les types de données abstraitsExemple de la voiture
Implémentation
Interface
L’interface correspond aux opérations possibles sur le TDAvoiture.
Algorithmique avancée Frédéric Guyomarch
TDA Tableau
TDATableau
SDD Tableau non ordonné
- Insertion- Recherche- Suppression
-Ajout simple{..}-Recherche
séquentielle{...}-Suppresion{..}
-Ajout avec décalage{..}-Recherche
dichotomique{..}-Suppresion{..}
SDD Tableau ordonné
Spécificationabstraite
Implémentationconcrète
Algorithmique avancée Frédéric Guyomarch
Opérations
Généralement on retrouvera dans les TDA :• Une opération d’insertion,• Une opération de recherche,• et une opération de suppression.
Algorithmique avancée Frédéric Guyomarch
Java Framework CollectionsEnsemble de classes et interfaces (les TDA) pour les structuresde données en Java.
Java Collections Framework
Collection Map
List Set SortedMap
SortedSet
Algorithmique avancée Frédéric Guyomarch
(R)appelLa généricité
• Élimine plus d’erreurs à la compilation par vérification detype
• Permet de se passer de transtypage (cast)• Agit par paramétrage de type• Permet d’écrire des algorithmes fonctionnant avec tous
les types⇒ + d’abstraction
Algorithmique avancée Frédéric Guyomarch
Sans généricitéL i s t l i s t = new A r r a y L i s t ( ) ;l i s t . add ( " h e l l o ␣N3" ) ;S t r i n g s = ( S t r i n g ) l i s t . ge t ( 0 ) ;
Avec :L i s t <St r i ng> l i s t = new Ar r a yL i s t <St r i ng >() ;l i s t . add ( " h e l l o ␣N3" ) ;S t r i n g s = l i s t . ge t ( 0 ) ; // pas de t r a n s t y p ag e
Algorithmique avancée Frédéric Guyomarch
Une classe non générique :p u b l i c c l a s s Box {
p r i v a t e Object o b j e c t ;
p u b l i c vo i d s e t ( Object o b j e c t ) {t h i s . o b j e c t = ob j e c t ;
}p u b l i c Object ge t ( ) { r e t u r n o b j e c t ; }
}
Algorithmique avancée Frédéric Guyomarch
Une classe générique paramétrée :p u b l i c c l a s s Box<T> {
p r i v a t e T t ; // T pour "Type" par conven t i on
p u b l i c vo i d s e t (T t ) {t h i s . t = t ;
}p u b l i c T get ( ) { r e t u r n t ; }
}
Invocation :Box<In t e g e r > in t eg e rBox = new Box<In t e g e r >() ;
Algorithmique avancée Frédéric Guyomarch
Bilan
Nous avons vu dans ce cours :• Le fonctionnement de la matière pour le semestre,• pourquoi utiliser des SDD,• qu’il faut choisir une structure adaptée à sa situation,• et la notion de type de données abstrait.
Algorithmique avancée Frédéric Guyomarch
Recommended