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'attributpredecesseurs
des2
une liste vide. -
s2.successeurs[1][1]
renvoie la valeur associée au second successeur des2
, soit le nombre de citations des2
verss3
, soit5
. -
La valeur de popularité du site 1 est 4 + 2 = 6.
-
La liste
listeS
est manipulée comme une file (premier arrivé, premier sorti). -
La fonction
parcoursGraphe
réalise un parcours en largeur. -
L'appel
parcoursGraphe(s1)
renvoie[s1, s3, s4, s5]
. Le sommets2
n'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)).nom
renvoie'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
lePlusPopulaire
de complexité linéaire.
- L'implémentation actuelle du parcours en largeur est sous-optimale en raison de l'utilisation de