Podemos eliminar todos los vértices menos uno verificando la existencia de aristas porque podemos eliminar una posibilidad para cada arista que verificamos. En particular, si hay un borde que va de x a y , eliminamos x y avanzamos hacia y (ya que se puede alcanzar otro vértice desde él); si no, eliminamos y (ya que no se puede alcanzar desde x ). Una vez que alcanzamos el último vértice, el vértice que no se elimine debe compararse entre sí (asegúrese de que se cumpla la condición de superestrella: hay un borde entrante pero no saliente) hasta que se elimine o confirme como superestrella. Algunos pseudocódigo: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
Veamos un ejemplo para ilustrar el método. Tome esta matriz, con el vértice de origen en la parte superior y el destino al lado. 1 indica un borde:
12341−11121−11300−04111−
Eliminaré los vértices que hemos descartado como posibles superestrellas. Usaré verde y rojo para indicar los bordes que estamos viendo cuando lo hacen y no contienen el borde que estamos buscando, y azul para indicar dónde ya hemos buscado.
Comenzamos mirando los vértices 1 y 2.
El número verde muestra que hay un borde de 2 a 1, por lo que eliminamos 2 y buscamos un borde de 3 a 1 :
12341−11121−11300−04111−
12341−11121−11300−04111−
Vemos que no existe tal borde, por lo que eliminamos 1 y tomamos 3 como nuestro vértice actual. Recuerde que ya hemos eliminado 2, así que vea si hay una ventaja de 4 a 3:
12341−11121−11300−04111−
Hay un borde de 4 a 3, por lo que eliminamos 4. En este punto, hemos eliminado todos menos uno de los vértices (3), así que revise sus bordes y vea si califica:
12341−11121−11300−04111−
Hay una ventaja de 1 a 3 pero no la inversa, por lo que 3 sigue siendo un candidato.
12341−11121−11300−04111−
También hay una ventaja de 2 a 3, pero no al revés, por lo que 3 sigue siendo un candidato.
12341−11121−11300−04111−
Hay una ventaja de 4 a 3 pero no de 3 a 4; eso completa nuestra comprobación de los bordes de 3 y hemos descubierto que, de hecho, es una superestrella.
n−1nnn−12×(n−1)3n−3O(n)Θ(n)