Nous pouvons éliminer tous les sommets sauf un en vérifiant l'existence de arêtes, car nous pouvons éliminer une possibilité pour chaque arête que nous vérifions. En particulier, s'il y a une arête allant de x à y , nous éliminons x et passons à y (car un autre sommet peut en être atteint); sinon, nous éliminons y (car il ne peut pas être atteint à partir de x ). Une fois que nous atteignons le dernier sommet, celui qui n'est pas éliminé doit être comparé les uns aux autres (assurez-vous que la condition de superstar est maintenue: il y a un bord entrant mais non sortant) jusqu'à ce qu'il soit éliminé ou confirmé comme superstar. Quelques pseudocodes:n−1xyxyyx
vertex superstar(graph g)
current vertex = first
# Go through each vertex
for each subsequent vertex in g ("next")
# If there's an edge from this to the next, we eliminate this one [move to the new one].
# If not, we just stay here.
if edge exists from current to next
candidate = next
end if
end for
# Now we are on the final remaining candidate, check whether it satisfies the requirements.
# just a rename for clarity
candidate = current
for each other vertex in g
if edge from current to other exists
return null
else if no edge from other to current
return null
end if
end for
return candidate
end superstar
Passons en revue un exemple pour illustrer la méthode. Prenez ce tableau, avec le sommet source en haut et la destination sur le côté. 1 indique un bord:
12341−11121−11300−04111−
Je griserai les sommets que nous avons exclus en tant que superstars potentielles. Je vais utiliser le vert et le rouge pour indiquer les bords que nous regardons quand ils le font et ne contiennent pas le bord que nous recherchons, et le bleu pour indiquer où nous avons déjà regardé.
Nous commençons par regarder les sommets 1 et 2.
Le nombre vert indique qu'il y a un bord de 2 à 1, donc nous éliminons 2 et recherchons un bord de 3 à 1 :
12341−11121−11300−04111−
12341−11121−11300−04111−
Nous voyons qu'il n'y a pas un tel bord, donc nous éliminons 1 et prenons 3 comme sommet actuel. Rappelez-vous que nous avons déjà éliminé 2, alors voyez s'il y a un bord de 4 à 3:
12341−11121−11300−04111−
Il y a une arête de 4 à 3, donc nous en éliminons 4. À ce stade, nous avons éliminé tous les sommets sauf un (3), alors vérifiez ses arêtes et voyez si elle se qualifie:
12341−11121−11300−04111−
Il y a un bord de 1 à 3 mais pas l'inverse, donc 3 est toujours candidat.
12341−11121−11300−04111−
Il y a aussi un avantage de 2 à 3 mais pas l'inverse, donc 3 est toujours candidat.
12341−11121−11300−04111−
Il y a un bord de 4 à 3 mais pas de 3 à 4; cela complète notre vérification des bords de 3 et nous avons constaté qu'il s'agit en fait d'une superstar.
Puisque nous éliminons un sommet comme superstar possible sur chacun des premiers
contrôles de bord, le meilleur cas est que le nn−1nnn−12×(n−1)3n−3O(n)Θ(n)