24-NSIJ1ME1-1
-
Aucune autre site ne cite le site 2 (
s2), il n'a donc pas de prédécesseurs. Ainsi la ligne 9 affecte à l'attributpredecesseursdes2une liste vide. -
s2.successeurs[1][1]renvoie la valeur associée au second successeur des2, soit le nombre de citations des2verss3, soit5. -
La valeur de popularité du site 1 est 4 + 2 = 6.
-
La liste
listeSest manipulée comme une file (premier arrivé, premier sorti). -
La fonction
parcoursGrapheréalise un parcours en largeur. -
L'appel
parcoursGraphe(s1)renvoie[s1, s3, s4, s5]. Le sommets2n'est pas visité car il n'a pas de prédécesseur, et qu'il n'est pas le sommet de départ. -
L'expression
lePlusPopulaire(parcoursGraphe(s1)).nomrenvoie'site5'. -
Quelques points :
- L'implémentation actuelle du parcours en largeur est sous-optimale en raison de l'utilisation de
.pop(0)— de complexité linéaire — pour défiler un sommet de la file. Dans le pire des cas, cette opération est effectuée jusqu'à \(n\) fois, la complexité finale atteint \(O(n² + m)\). - Cette complexité quadratique est inefficace même pour quelques milliers de sites. En négligeant le traitement des arcs, car \(m = O(n^2)\), et en considérant 10000 sites, et un temps de calcul pour une opération entre 1 µs et 100 µs, le temps d'exécution total varierait entre 2 minutes et 3 heures.
- De plus, ce parcours ne garantit pas que tous les sites soient visités, car certains peuvent être inaccessibles depuis le sommet de départ. Une solution pourrait être de considérer le graphe comme non orienté, en incluant les prédécesseurs au voisinage d'un sommet.
- Plus simplement, il suffit de stocker initialement tous les sites dans une liste et appeler directement
lePlusPopulairede complexité linéaire.
- L'implémentation actuelle du parcours en largeur est sous-optimale en raison de l'utilisation de