gef 243b programmation informatique appliquée décisions de design avec structures de données...

21
GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2

Upload: honoree-girard

Post on 03-Apr-2015

107 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2

GEF 243BProgrammation informatique

appliquée

Décisions de design avec structures de données

§15.1 – 15.2

Page 2: GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2

4/11/23 2

Revue

• Décrivez les étapes pour traverser une LC

• Décrivez les étapes pour éliminer un nœud

• Décrivez les étapes pour insérer un noeud

Page 3: GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2

4/11/23 3

Synopsis

• Structures de données ordonnées et désordonnées• Tableaux ordonnés• Tableaux désordonnés• Listes chaînées désordonnées • Listes chaînées ordonnées• Choisir la bonne structure de données• LC ordonnées avec plusieurs critères

d’ordonnancement• LC double

Page 4: GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2

4/11/23 4

Structures de données ordonnées et désordonnées

• Quand on veut utiliser des structures de données telles que les tableaux et les LC, il y a des compromis dans les temps d’exécution que nous devons connaître

• Quand nous avons des séquences de struct, nous avons à faire deux décisions majeures basées sur ces compromisSélection de la structure de données (tableaux ou LC) etDécider si on utilise une séquence ordonnée ou

désordonnée

Page 5: GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2

4/11/23 5

• Les éléments dans un tableau et une LC peuvent être ordonnés en utilisant une clé dans la structure

• Cette clé peut être n’importe quel champ dans la structure:• surnom,• prénom,• numéro_de_collège,• grandeur,• pesanteur,• NAS,…

• L’ordonnancement peut aussi être faite avec une combinaison de deux clés: Par surnom (clé primaire) en premier et prénom ensuite (clé

secondaire)

Structures de données ordonnées et désordonnées

Page 6: GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2

4/11/23 6

• Nous avons discutés que les tableaux ont des limitations sur la performance si nous voulons garder les éléments dans un ordre quelconque

• Les opérations d’insertion et d’élimination prennent un temps d’exécution qui est proportionnel au nombre d’éléments dans le tableauDans le pire cas, vous pourriez avoir à déplacer tout les

éléments dans le tableau

• Cependant, la recherche dans un tableau ordonné peut être fait très rapidement avec une recherche binaire

Tableaux ordonnés

Page 7: GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2

4/11/23 7

Tableaux de structures - rappel

• Éliminer un élément dans un tableau:

• Insérer un élément dans un tableau:

Page 8: GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2

4/11/23 8

• Insertion d’éléments dans un tableau désordonné est très rapide; Vous mettez le nouvel élément à la fin du tableau dans

la première case librePour que cela soit rapide, vous devez garder une

variable qui contient la première case libre

• Les opérations de recherche et élimination dans un tableau en désordre sont cependant proportionnels au nombre d’éléments dans le tableau

Tableaux désordonnés

Page 9: GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2

4/11/23 9

• Les listes chaînées contrairement aux tableaux n’ont pas d’indexes; donc même si votre LC est ordonnée, vous ne pouvez pas utiliser de recherche binaireVous ne pouvez pas sauter “au milieu” de la LC parce

qu’il n’y a pas de nom symbolique pour chaque nœud

• Peut importe quelle décision de design que vous prenez pour l’ordonnancement de votre LC, vous devez toujours revenir à la tête de la liste et de passer de nœud à nœud pour toutes les opérations (recherche, insertion et élimination)

Listes chaînées désordonnées

Page 10: GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2

4/11/23 10

• Il est évident que le temps de recherche dans une LC désordonnée est proportionnel au nombre d’éléments dans la liste.

• L’élimination d’un nœud dans la LC est aussi proportionnelle au nombre d’éléments dans la liste (on doit trouver l’élément avant d’éliminer)

• L’insertion dans une LC désordonnée est cependant très rapide – vous pouvez insérer à la tête ou à la queue immédiatementLe nombre d’éléments dans la liste n’affecte pas cette

opération

Listes chaînées désordonnées

Page 11: GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2

4/11/23 11

• Si votre LC est ordonnée, alors vous pouvez arrêter de chercher aussitôt que vous avez trouvé votre structure(s) ou quand vous avez passé le point où la structure devrait être (vous

savez alors qu’elle n’est pas dans la liste)

• Si c’est votre intention de chercher souvent (en comparaison avec l’insertion ou l’élimination des éléments), la liste chaînée ordonnée est une amélioration sur les LC désordonnées

• Mais encore dans le pire cas, vous pourriez avoir à traverser la LC au complet – e.i. c’est encore proportionnel au nombre d’éléments dans la LC

Liste Chaînées ordonnées

Page 12: GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2

4/11/23 12

• Si vous avez l’intention d’insérer et d’éliminer beaucoup de nœud régulièrement et de faire relativement peu de recherches; utilisez une LC désordonnée

• Si l’intention est de faire peu de changements dans votre séquence et de faire relativement beaucoup de recherches; il est mieux d’utiliser un tableau ordonné.Vous devriez aussi avoir une bonne idée de la grandeur

de votre tableau

Choisir la bonne structure de données

Page 13: GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2

4/11/23 13

• Une des puissances des LC est d’être capable d’ordonner la même LC de deux façons différentes, en utilisant deux pointeurs dans chaque nœud

• En fait vous pourriez utiliser N pointeurs dans chaque noeud pour ordonner de N différentes façons; Si vous voulez faire ceci avec des tableaux, vous allez avoir besoin

de N tableaux ou bien de N opérations d’ordonnancement pour faire la même chose

• Ex.: Si je veux être capable d’imprimer une liste ordonnée des étudiants du CMR par surnom ou numéro de collège, je pourrais utiliser une LC avec deux pointeurs pour garder ces relations

LC ordonnée avec plusieurs critères d’ordonnancement

Page 14: GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2

4/11/23 14

typedef struct JAMBON_NOEUD_ETUDIANT{

char prenom[15]; char surnom[25]; unsigned long numeroDeCollege; float moyenne; struct JAMBON_NOEUD_ETUDIANT*

pProchainNom; struct JAMBON_NOEUD_ETUDIANT*

pProchainNum;} NOEUD_ETUDIANT; //nom du type

STUDENT_NODE* pListeEtudiants = NULL;STUDENT_NODE* pListeNum = NULL;

LC ordonnée avec plusieurs critères d’ordonnancement

Page 15: GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2

LC ordonnée avec plusieurs critères d’ordonnancement

Allard20001

pProchainNumpProchainNom

Allen22456

pProchainNumpProchainNom

Baar20002

pProchainNumpProchainNom

Alpo22460

pProchainNumpProchainNom0

0

pListeEtudiants

pListeNum

Page 16: GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2

4/11/23 16

LC Double

• Comme nous venons de le voir, il est possible d’avoir deux pointeurs pour créer deux LC pour le prix d’une ou proche; le pointeur extra prend de la mémoire.

• On peut utiliser ce concept pour plus que l’ordonnancement.

• Une LC double est une liste chaînée qui peut être traversé dans les deux sens De la tête à la queue et de la queue à la tête

• Pour construire une LC double on inclus un pointeur prochain et un prédécesseur dans la structure de nœud

• Nous déclarons aussi un pointeur qui pointe à la queue similaire à la tête

Page 17: GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2

4/11/23 17

typedef struct JAMBON_NOEUD_ETUDIANT{

char prenom[15]; char surnom[25]; unsigned long numeroDeCollege; float moyenne; struct JAMBON_NOEUD_ETUDIANT*

pProchain; struct JAMBON_NOEUD_ETUDIANT*

pPrecedent;} NOEUD_ETUDIANT; //nom du type

STUDENT_NODE* pTete = NULL;STUDENT_NODE* pQueue = NULL;

LC double

Page 18: GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2

Allard20001

pPrecedentpProchain

Allen22456

pPrecedentpProchain

Baar20002

pPrecedentpProchain

Alpo22460

pPrecedentpProchain

0

0

pTete

pQueue

Page 19: GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2

4/11/23 19

LC Double

• L’opération de traverse est similaire à celle pour les LC simples mais elle est plus puissante parce que l’on peut reculer

• Les opérations d’insertion et d’élimination doivent assigner des valeurs aux deux pointeurs, prochain et précédentUne petite augmentation en temps

Page 20: GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2

4/11/23 20

Exercice

• Donnez le code pour enlever un nœud d’une liste chaînée double.

• pTraverse pointe au nœud à enlever

Page 21: GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2

4/11/23 21

Quiz Time

• Quelle genre de structure est-ce que je devrais utiliser si je veux garder en mémoire les membres du parlement et que je veux être capable de faire des recherches fréquentes? Ordonnée?

• Quelle genre de structure de données est-ce que je doit utiliser pour stocker les lettres que mon robot lit si je ne sais pas combien de lettres je vais lire? Ordonnée?