Dans une bibliothèque, nous avons 10000 livres. Pour chacun un certain nombre de caractéristiques : auteur, date de parution, nombre de pages etc...
Nous allons nous limiter à une seule caractéristique, par exemple le nombre de pages. Chaque livre à donc un nombre de page (remarquons qu'inversement, plusieurs livres peuvent avoir le même nombre de pages).
Nous aimerions trouver le plus rapidement possible le nombre de pages d'un livre. Nous devons décider comment représenter la situation. Nous pouvons utiliser des tuples (livre, nbDePages), on construira alors une liste de tuples, ou nous pouvons utiliser un dictionnaire : {livre1: nbDePages1, livre2: nbDePages2 etc...}
A première vue, laquelle des deux représentations vous semble la plus adaptée (laquelle vous semble plus naturelle) ?
Par ailleurs, ce choix aura-t-il un impact en terme d'efficacité dans la recherche ?
C'est ce que nous allons explorer dans ce TP.
👉 Nous utilisons ici le type : list de python
Implémenter avec une liste ou un dictionnaire
Implémentation avec liste ou dictionnaire
Rechercher l'information souhaitée
Fonctions de recherche de l'information
Bravo ! Vous avez bien implémenté les deux modèles. Maintenant, créez deux fonctions pour trouver le nombre de pages d'un livre.
Mesure d'efficacité
Mesure de l'efficacité
La liste et le dictionnaire générés sont de taille très limitée, aussi la mesure de l'efficacité de l'un et l'autre n'est pas aussi probante que si nous travaillions avec des listes de 10000 livres.
Néanmoins nous pouvons comparer la recherche dans la liste et la recherche dans le dictionnaire.
Mesure plus fine de la complexité
Bon, le dictionnaire est plus efficace. Mais ici on travaille sur une bibliothèque de 5 livres.... passons à quelques chose de plus réaliste. Dans l'exemple ci-dessous vous n'avez rien à coder, mais observer et conclure.
On génère pour vous une bibliothèque (c'est à dire, une liste et un dictionnaire) de 10000 livres (bon, les noms des livres ici sont des entiers, mais ça importe peu..). Le code ci-dessous va utiliser les deux fonctions de recherche pour déterminer le nombre de pages d'un livre. On va prendre des livres du début de liste, puis de plus en plus loin dans la liste.... on devrait donc mettre de plus en plus longtemps pour les trouver.
Pour chaque livre la recherche est répétée 100 fois afin d'estimer un temps moyen a peu près stable.
Exercice à choix multiple
La complexité de la recherche dans la liste vous semble :
Correct !
Exercice à choix multiple
La complexité de la recherche dans le dictionnaire vous semble :