チェックする各エッジごとに1つの可能性を排除できるため、エッジの存在をチェックすることで、頂点の1つを除くすべてを削除できます。行くエッジがある場合、特に、と、我々は排除上へと移動し(別の頂点がそこから到達できるように)。そうでない場合、を削除します(から到達できないため)。最後の頂点に到達したら、削除されない頂点は、削除されるか、スーパースターとして確認されるまで、他の頂点と比較する必要があります(スーパースター条件が維持されていることを確認してください。いくつかの擬似コード:x y x y y xn−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
メソッドを説明するために例を見ていきましょう。ソースの頂点が上部にあり、デスティネーションが側面にあるこの配列を使用します。1はエッジを示します。
12341−11121−11300−04111−
潜在的なスーパースターとして除外した頂点をグレーアウトします。緑と赤を使用して、探しているエッジが含まれている場合と含まれていない場合に見ているエッジを示し、青は既に見た場所を示します。
まず、頂点1と2を調べます。
12341−11121−11300−04111−
緑色の数字は2から1のエッジがあることを示しているため、2を削除してエッジを探します3から1:
12341−11121−11300−04111−
そのようなエッジがないことがわかるので、1を削除し、現在の頂点として3を取ります。既に2を削除していることを思い出してください。4から3のエッジがあるかどうかを確認してください。
12341−11121−11300−04111−
4から3までのエッジがあるため、4を削除します。この時点で、頂点(3)の1つを除くすべてを削除したので、エッジをチェックして、条件を満たすかどうかを確認します。
12341−11121−11300−04111−
1から3までのエッジがありますが、その逆はないため、3は依然として候補です。
12341−11121−11300−04111−
2から3までのエッジもありますが、その逆はないため、3は依然として候補です。
12341−11121−11300−04111−
4〜3のエッジがありますが、3〜4のエッジはありません。これで3のエッジのチェックが完了し、実際にスーパースターであることがわかりました。
最初のエッジチェックのそれぞれでスーパースターとして1つの頂点を削除するため
、最良のケースは番目のチェックで複雑さの最終頂点を削除することです。最悪の場合(最後または最後から2番目の頂点がスーパースターであるか、最終チェックでそれが不適格となる)、最初の比較の後に、候補を個の頂点と比較します。最悪の場合の複雑さ()。したがって、このアルゴリズムは
です。n−1nnn−12×(n−1)3n−3O(n)Θ(n)