algorithmique avancée - introduction aux structures de ... · algorithmique avancée...

29
Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences et Technologies 2015/2016 - Semestre 3 Algorithmique avancée Frédéric Guyomarch

Upload: others

Post on 13-Aug-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

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

Page 2: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

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

Page 3: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

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

Page 4: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

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

Page 5: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

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

Page 6: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

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

Page 7: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

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

Page 8: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

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

Page 9: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

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

Page 10: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

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

Page 11: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

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

Page 12: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

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

Page 13: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

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

Page 14: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

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

Page 15: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

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

Page 16: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

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

Page 17: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

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

Page 18: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

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

Page 19: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

Les types de données abstraitsExemple de la voiture

Algorithmique avancée Frédéric Guyomarch

Page 20: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

Les types de données abstraitsExemple de la voiture

Implémentation

Algorithmique avancée Frédéric Guyomarch

Page 21: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

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

Page 22: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

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

Page 23: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

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

Page 24: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

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

Page 25: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

(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

Page 26: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

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

Page 27: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

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

Page 28: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

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

Page 29: Algorithmique avancée - Introduction aux structures de ... · Algorithmique avancée Introduction aux structures de données Frédéric Guyomarch IUT-A Université de Lille, Sciences

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