검사 하는 각 모서리에 대해 하나의 가능성을 제거 할 수 있으므로 모서리 의 존재를 확인하여 정점 중 하나를 제외한 모든 꼭지점을 제거 할 수 있습니다. 에지에서가 존재하는 경우, 특히, X 로 Y는 , 우리는 제거 X 행에 이동 및 Y를 (다른 정점 그것으로부터 도달 할 수있는 바와 같이); 그렇지 않은 경우, 우리는 y 를 제거합니다 ( x 에서 도달 할 수 없기 때문에 ). 마지막 정점에 도달하면 제거되지 않은 정점을 서로 다른 정점과 비교해야합니다 (수퍼 스타 조건이 유지되도록해야합니다. 일부 의사 코드 :n - 1엑스와이엑스와이yx
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)를 제외한 나머지를 모두 제거 했으므로 모서리를 확인하고 적합한 지 확인하십시오.
12341−11121−11300−04111−
1에서 3까지의 모서리가 있지만 그 반대는 아니므로 3은 여전히 후보입니다.
12341−11121−11300−04111−
2에서 3까지의 모서리가 있지만 그 반대는 아니므로 3은 여전히 후보입니다.
12341−11121−11300−04111−
가장자리는 4 ~ 3이지만 3 ~ 4는 아닙니다. 3의 모서리를 확인한 결과 실제로 슈퍼 스타임을 알았습니다.
우리는 먼저 각각의 슈퍼 가능한 하나 개 정점 제거 이후
에지 검사, 최상의 경우가 있다는 것이다 번째 수표의 복잡성에 대한 최종 정점 제거 . 최악의 경우 (마지막 또는 두 번째-마지막 정점은 수퍼 스타이거나 최종 검사에서 자격을 상실합니다) 첫 번째 비교 후 후보를 더 많은 정점과 비교합니다. 최악의 경우 복잡도는 ( )입니다. 따라서이 알고리즘은
입니다.n n n − 1 2 × ( n − 1 ) 3 n − 3 O ( n ) Θ ( n )n−1nnn−12×(n−1)3n−3O(n)Θ(n)