헝가리안 알고리즘을 보다 보면 matching과 vertex cover이라는 용어가 계속 나온다.

이게 도대체 무슨 의미길래 계속 나오는가?

 

vertex cover란?

어떠한 그래프에서의 접점인데, 모든 간선들을 커버하는 접점

 

도대체 접점은 뭐고, 그래프는 뭐고, 간선은 뭔데???

이러한 기본 지식을 설명하려고 한다.

 

그래프(graph)

"그래프란 정점(vertex)들이 간선(edge)들로 연결되어 있는 구조"

아래 그림을 보면 이해가 쉽다.

vertex란 선과선이 연결되는 지점, 끝점이며

edge란 정점들을 연결하는 간선이다.

아래에는 6개의 vertex와 5개의 edge가 있는 그래프이다.

https://namnamseo.tistory.com/entry/Tree%EC%9D%98-%EA%B8%B0%EC%B4%88?category=589725 참조

 

 

자 그러면, 다시 vertex cover의 정의로 돌아가려고 한다.

vertex cover

"어떠한 그래프에서의 접점인데, 모든 간선들을 커버하는 접점"

이제 좀 이해가 가는가? 

아래의 각각의 그래프에서 빨간점은 모두 vertex cover가 된다. 

쉽게 말해 빨간점과 빨간 점에 이어진 선을 모두 제거하게 되면

남아있는 것이 없는 상태가 되는 vertex의 집합을 vertex cover라고 한다.

 

https://brilliant.org/problems/not-a-vertex-cover/ 참조

 

https://brilliant.org/problems/not-a-vertex-cover/ 참조

 

https://brilliant.org/problems/not-a-vertex-cover/ 참조

 

해당 내용을 기반으로 헝가리안 알고리즘을 다시 한번 보게 되면, 다른 블로그들의 설명을 좀 더 쉽게 이해할 수 있을 것이다. 

https://billionaire-hossa.tistory.com/36

reference

https://namnamseo.tistory.com/entry/Matching%EA%B3%BC-Vertex-cover

 

Matching과 Vertex cover

Matching이란, 어떠한 그래프에서 간선을 잘 고른 것이다. 이 때 이 간선들은 서로 어떠한 점에서도 만나지 않아야 한다. 즉, 그래프에서 한 간선을 잡고, 그 간선과 양 끝 점을 제외한 그래프에서

namnamseo.tistory.com

https://namnamseo.tistory.com/entry/Tree%EC%9D%98-%EA%B8%B0%EC%B4%88?category=589725

 

트리의 기초

트리(tree)는 그래프의 일종이다.그래프란 정점(vertex)들이 간선(edge)들로 연결되어있는 구조를 뜻한다. 정점은 node, 노드라고도 부른다.지하철 노선도에서 각 역이 정점, 이웃한 역을 잇는 노선이

namnamseo.tistory.com

https://brilliant.org/wiki/vertex-cover/

'프로그래밍 > 수학' 카테고리의 다른 글

확률 변수 & 확률 함수  (5) 2024.09.30
내적 (Dot product)  (3) 2024.09.29
Hungarian Algorithm (헝가리안 알고리즘이란?)  (2) 2024.03.29
e란 무엇인가?  (0) 2024.02.20
공분산  (0) 2023.03.16

SORT 논문을 학습중에 헝가리안 알고리즘이란 것을 쓴다는데... 도대체 이건 또 뭔지 알아보려고합니다.. 

 

Hungarian Algorithm이란?

헝가리안 알고리즘이라는 것은 assignment problem을 해결하는 최적의 솔루션(optimal solution) 입니다. 

 

그럼 먼저 assignment problem이 뭔지?,

그리고 어떻게 헝가리안 알고리즘이 사용하는지? 

알아보겠습니다.

 

assignment problem이란?

직역하면 할당 문제입니다.
어떻게 하면 가장 효과적으로 할당할 것이냐의 문제인데,
예를 들면, 회사에서 외주를 맡겨야 할 일이 3개가 있다고 한다면(식당, 보안, 환경관리)
해당 일들을 3개의 업체에 맡겨야 하는데 어떻게 맡기는것이 가장 효과적인가 하는 문제입니다.

아래는 각 업체별 업무에 따른 가격이 나와있습니다.

가격 식당 보안관리 환경관리
A업체 4 7 3
B업체 5 6 1
C업체 2 5 3

 

 

Optimal Solution (Hungarian algorithm)

위와 같은 상황에서 어떻게 하면 회사는 가장 저렴한 가격으로 각각의 업무를 부여할 수 있을까요?

이것을 해결하는 방법은 다음과 같은 절차를 따릅니다.  

1. 행에 대해서 가장 작은 값으로 뺀다

    -> 이 이유는 A업체에 각각에 비용에 3을 빼더라도 환경관리가 가장 싸고, 보안관리가 가장 비싸다는 내용 자체의 변화는 없기 때문입니다. 동일하게 행에 해당하는 B,C 업체도 동일하게 진행해줍니다.   

가격
식당
보안관리
환경관리
 
A업체
1 4 0 3
B업체
4 5 0 1
C업체
1 3 0 2

 

2. 열에 대해서 가장 작은값으로 뺀다.

이유는 동일합니다. 식당일은 1을 빼더라도 A,C업체가 가장 싸고 B업체가 비싼것에는 차이가 없기 때문입니다.

가격
식당
보안관리
환경관리
 
A업체
0 1 0 3
B업체
3 2 0 1
C업체
0 0 0 2
  1 3 0  

 

이렇게 얻은 행렬에서 0의 값을 가지는 업체-업무 쌍만 알게된다면 가장적은 비용으로 모든 업무를 처리해 낼 수 있을것입니다. 단 여기서 값에 해당하는 모든 행과 열은 0 이상의 값이여야 최적화를 할 수 있습니다. 

 

3. 모두가 0이되는 행과 열을(minimum-size vertex cover) 제외하고 가장 작은 값을 찾아 모든 행에 빼줍니다.

가격
식당
보안관리
환경관리
 
A업체
-1 0 -1 3+1
B업체
2 1 -1 1+1
C업체
0 0 0 2
  1 3 0  

 

4. 음수가 되는 행렬의 원소를 음이 아닌수로 만들어 줍니다. 

  식당
보안관리
환경관리
 
A업체
0 0 0 3+1
B업체
3 1 0 1+1
C업체
1 0 1 2
  0 3 -1  

 

 

최종적으로 A업체 - 식당, B업체 - 환경관리, C업체 - 보안관리가 최적의 선택이라는 결과가 나옵니다.

가격 식당 보안관리 환경관리
A업체 4 7 3
B업체 5 6 1
C업체 2 5 3

 

 

이 같은 알고리즘이 바로 헝가리안 알고리즘입니다. 

헝가리안 알고리즘

1. 각 행에서 가장 작은 항목을 해당 행의 다른 모든 항목에서 뺍니다. 이렇게 하면 행의 가장 작은 항목이 0이 되게 됩니다.
2. 각 열에서 가장 작은 항목을 해당 열의 다른 모든 항목에서 뺍니다. 이렇게 하면 열의 가장 작은 항목이 0이 되게 됩니다.
3. 0 항목을 포함하는 행과 열을 표시하여 가능한 적은 수의 선을 그립니다.
4. 만약 그려진 선이 n개라면, 0의 최적 할당이 가능하며 알고리즘이 완료됩니다. 선의 수가 n보다 적으면, 최적 수의 0이 아직 달성되지 않았습니다. 다음 단계로 이동합니다. (여기서 n은 행의수 = 열의수 = n)
5. 어떠한 선으로도 커버되지 않은 가장 작은 항목을 찾습니다. 이 항목을 선이 그어지지 않은 각 행에서 빼고, 선이 그려진 각 열에서 더합니다. 그런 다음, 단계 3으로 돌아갑니다.

 

 

reference

https://gazelle-and-cs.tistory.com/29

'프로그래밍 > 수학' 카테고리의 다른 글

내적 (Dot product)  (3) 2024.09.29
vertex cover란?  (0) 2024.04.02
e란 무엇인가?  (0) 2024.02.20
공분산  (0) 2023.03.16
표준편차  (0) 2023.03.15

+ Recent posts