Structures de données et algorithmes
Quelle est une façon appropriée de stocker en mémoire un graphe creux, c'est-à-dire un graphe ayant peu d'arêtes par rapport à son nombre de sommets, comme un réseau routier d'environ 1 million de sommets et 3 millions d'arêtes ?
- AUne matrice d'adjacence : elle vérifie en O(1) si deux sommets sont reliés et occupe aussi le moins de mémoire
- BDes listes d'adjacence : la mémoire est proportionnelle au nombre de sommets plus le nombre d'arêtes, et elles conviennent pour suivre une à une les arêtes qui partent d'un sommet
- CUne matrice d'adjacence : sa mémoire n'est proportionnelle qu'au nombre d'arêtes
Afficher la réponse et l'explication
Réponse : B. Des listes d'adjacence : la mémoire est proportionnelle au nombre de sommets plus le nombre d'arêtes, et elles conviennent pour suivre une à une les arêtes qui partent d'un sommet
Une matrice d'adjacence utilise une table V × V pour V sommets : 1 million de sommets demandent donc 10¹² cases, soit environ 125 GB même à 1 bit par case. Les listes d'adjacence ne stockent que les voisins de chaque sommet : la mémoire est en O(V + E), seulement quelques millions d'entrées dans cet exemple. La matrice d'adjacence a l'avantage de tester l'existence d'une arête en O(1) et convient aux graphes denses ou aux graphes ayant peu de sommets. Pour les traitements qui suivent tour à tour les arêtes partant de chaque sommet, comme le parcours en largeur et l'algorithme de Dijkstra, les listes d'adjacence sont plus efficaces.
Continuer : 9 autres questions sur Structures de données et algorithmes