Chúng ta có thể loại bỏ tất cả trừ một trong các đỉnh bằng cách kiểm tra sự tồn tại của cạnh vì chúng ta có thể loại bỏ một khả năng cho mỗi cạnh mà chúng ta kiểm tra. Cụ thể, nếu có một cạnh đi từ x đến y , chúng ta loại bỏ x và chuyển sang y (vì một đỉnh khác có thể đạt được từ nó); nếu không, chúng ta loại bỏ y (vì nó không thể đạt được từ x ). Khi chúng ta đạt đến đỉnh cuối cùng, bất kỳ đỉnh nào không bị loại bỏ nên được so sánh với các đỉnh khác (đảm bảo điều kiện siêu sao được duy trì: có một cạnh đến nhưng không đi ra ngoài) cho đến khi nó bị loại bỏ hoặc được xác nhận là siêu sao. Một số mã giả: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
Chúng ta hãy đi qua một ví dụ để minh họa phương pháp. Lấy mảng này, với đỉnh nguồn ở trên cùng và đích ở bên cạnh. 1 chỉ ra một cạnh:
12341-11121-11300-04111-
Tôi sẽ loại bỏ các đỉnh mà chúng ta đã loại trừ như những siêu sao tiềm năng. Tôi sẽ sử dụng màu xanh lá cây và màu đỏ để chỉ ra các cạnh mà chúng ta đang nhìn khi chúng thực hiện và không chứa cạnh chúng ta đang tìm kiếm và màu xanh lam để chỉ ra nơi chúng ta đã nhìn.
Chúng ta bắt đầu bằng cách nhìn vào các đỉnh 1 và 2.
Số màu xanh lá cây cho thấy có một cạnh từ 2 đến 1, vì vậy chúng tôi loại bỏ 2 và tìm cạnh từ 3 đến 1 :
12341-11121-11300-04111-
12341-11121-11300-04111-
Chúng tôi thấy không có cạnh như vậy, vì vậy chúng tôi loại bỏ 1 và lấy 3 làm đỉnh hiện tại của chúng tôi. Hãy nhớ lại rằng chúng tôi đã loại bỏ 2, vì vậy hãy xem liệu có cạnh từ 4 đến 3 hay không:
12341-11121-11300-04111-
Có một cạnh từ 4 đến 3, vì vậy chúng tôi loại bỏ 4. Tại thời điểm này, chúng tôi đã loại bỏ tất cả trừ một trong các đỉnh (3), vì vậy hãy kiểm tra các cạnh của nó và xem liệu nó có đủ điều kiện không:
12341-11121-11300-04111-
Có một cạnh từ 1 đến 3 nhưng không phải là ngược lại, vì vậy 3 vẫn là một ứng cử viên.
12341-11121-11300-04111-
Ngoài ra còn có một cạnh từ 2 đến 3 nhưng không phải là ngược lại, vì vậy 3 vẫn là một ứng cử viên.
12341-11121-11300-04111-
Có một cạnh từ 4 đến 3 nhưng không phải 3 đến 4; hoàn thành việc kiểm tra các cạnh của chúng tôi và chúng tôi đã thấy rằng trên thực tế, đó là một siêu sao.
n - 1nnn - 12 × ( n - 1 )3 n - 3Ô ( n )Θ ( n )