La mémoire annoncée n'est pas celle qu'on obtient
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 13 — Le modèle des graphes
Énoncé
Le tableau du chapitre annonce de mémoire pour les listes d'adjacence, et le chapitre propose de les réaliser en C par int voisins[N_MAX][DEG_MAX + 1]. Ces deux affirmations sont-elles compatibles ? Chiffrer sur le réseau routier français.
Corrigé
Elles ne le sont pas, et c'est le point de l'exercice.
Le tableau à deux dimensions occupe cases, quel que soit le nombre d'arcs. Sa mémoire est donc en , et non en : c'est la mémoire d'un graphe où tous les sommets auraient le degré maximal. Les deux quantités ne coïncident que si les degrés sont à peu près égaux ; dès qu'ils sont inégaux — et ils le sont toujours —, la seconde est plus grande.
Le chiffre. Mesuré pour , , avec octets par entier :
| cases | mémoire | |
|---|---|---|
| listes véritables, | Go | |
| `voisins[10^7][51]`, | Go | |
| matrice | To |
Un facteur par rapport aux listes véritables — et il grandit proportionnellement à la marge de sécurité DEG_MAX qu'on se donne, puisque la place occupée ne dépend pas du tout de . Sur le réseau social mondial, où le degré moyen est et le degré maximal des millions, le tableau rectangulaire est hors de question.
Ce que ce tableau reste, et pourquoi le programme le recommande. Ce n'est pas une erreur du cours : c'est un compromis d'épreuve écrite, et le programme le dit ainsi. Il offre trois qualités qui comptent plus que la mémoire quand : aucun malloc, aucun free, aucun pointeur ; un accès direct voisins[u][k] ; et une écriture tenant en trois lignes. Sur les tailles d'un sujet de concours, Go deviennent kilooctets.
La formulation juste serait donc : « listes d'adjacence : ; leur réalisation par tableau rectangulaire : , à n'employer que si est petit et connu ». La représentation qui atteint véritablement sans allocation dynamique existe, et c'est le tableau de départs du deuxième problème ci-après.
La leçon. Une complexité en mémoire s'énonce pour une structure abstraite ; elle se paye pour une réalisation. Entre les deux, il y a un choix de représentation, et il peut coûter un facteur dix. Le même écart existe pour le temps : un accès annoncé peut coûter un défaut de cache, comme le montrait le problème sur les deux tris du chapitre chap:tas.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.