도구스개발

전역 최소 절단(스토어–바그너) 계산기

무방향 가중 그래프를 둘로 쪼갤 때 끊어야 하는 간선 무게의 최솟값과 그때의 분할을 구합니다. 흐름을 한 번도 계산하지 않고 최대 인접 순서만으로 답을 찾는 스토어–바그너 알고리즘의 단계를 그대로 보여줍니다.

한 줄에 하나씩 「점 점 무게」. 무게를 생략하면 1입니다. # 로 시작하는 줄은 주석.

최소 절단값

4

이 무게만큼만 끊으면 그래프가 두 동강 납니다. 4개와 4개로 갈립니다.

8개
간선12개
한쪽 무리3, 4, 7, 8
나머지1, 2, 5, 6
모든 분할을 훑으면127가지
그중 최솟값4
스토어–바그너와 같은지일치합니다
무식하게 훑은 결과와 같습니다. 가능한 분할 127가지를 모두 세어 가장 작은 것을 골랐더니 스토어–바그너의 답과 같습니다. 원리가 겹치지 않는 두 방법이라 서로를 검산해 주는 셈입니다. 점이 20개를 넘으면 이 대조는 건너뜁니다 — 경우의 수가 백만 가지를 넘어가기 때문입니다.

단계마다

#고른 차례합친 두 점이 단계의 절단
11 → 5 → 2 → 6 → 3 → 4 → 7 → 87 + 85
21 → 5 → 2 → 6 → 3 → 4 → 74 + 77
31 → 5 → 2 → 6 → 3 → 43 + 47
41 → 5 → 2 → 6 → 36 + 34
51 → 5 → 2 → 62 + 68
61 → 5 → 25 + 27
71 → 51 + 55

단계마다 「지금까지 고른 무리와 가장 굵게 이어진 점」을 차례로 고르고(최대 인접 순서), 마지막으로 고른 점 하나만 떼어 내는 절단을 후보로 적어 둔 뒤 마지막 두 점을 합칩니다. 파란 값이 그중 가장 작은 것이자 답입니다. 점이 n개면 n−1단계로 끝납니다.

흐름을 한 번도 계산하지 않습니다. 최소 절단이라면 보통 최대 유량부터 떠올리지만, 스토어–바그너는 최대 인접 순서만으로 답을 찾습니다. 근거는 이렇습니다 — 마지막 두 점을 s, t라 하면 최소 절단은 둘을 가르거나 가르지 않거나 둘 중 하나인데, 가른다면 「t만 떼어 내는 절단」이 이미 그 답이고, 가르지 않는다면 둘을 합쳐도 답이 변하지 않습니다.
edu/max-flow의 최소 절단과 다른 문제입니다. 거기서는 s와 t를 미리 정해 놓고 그 둘을 갈라야 하지만, 여기서는 어디서 갈라도 좋습니다. 모든 (s, t) 짝에 대해 최대 유량을 구해 가장 작은 것을 골라도 되지만 그러면 계산이 훨씬 많아집니다.
네트워크가 얼마나 잘 견디는지 재는 데 씁니다. 최소 절단값이 작다는 것은 그만큼의 회선만 끊겨도 통신이 두 동강 난다는 뜻입니다. 위 예제에서 「약한 다리 하나」를 눌러 보면, 튼튼한 두 덩이가 무게 1짜리 간선 하나에 매달려 있는 그래프에서 정확히 그 자리를 짚어 냅니다.

사용 방법

  1. 1간선을 한 줄에 하나씩 「점 점 무게」로 적습니다.
  2. 2최소 절단값과 그때의 두 무리를 확인합니다.
  3. 3단계 표에서 어떤 점끼리 합쳐졌고 그때 절단값이 얼마였는지 봅니다.
  4. 4점이 적으면 모든 분할을 훑은 결과와 대조해 봅니다.
  5. 5약한 간선 하나로 이어진 그래프를 넣어 그 자리에서 끊기는지 확인합니다.

자주 묻는 질문

그래프의 점들을 비어 있지 않은 두 무리로 가를 때, 두 무리 사이를 지나는 간선 무게의 합이 가장 작아지는 분할입니다. 네트워크가 몇 개의 회선만 끊기면 두 동강 나는지, 그 회선이 어디인지를 보는 문제와 같습니다.

거기서는 s와 t 두 점을 미리 정해 놓고 그 둘을 갈라야 합니다. 여기서는 어디서 갈라도 좋습니다. 모든 (s, t) 짝에 대해 최대 유량을 구해 가장 작은 것을 골라도 되지만 그러면 계산이 많아지고, 스토어–바그너는 그럴 필요가 없습니다.

흐름을 한 번도 계산하지 않습니다. 아무 점에서 시작해 「지금까지 고른 무리와 가장 굵게 이어진 점」을 차례로 고르고(최대 인접 순서), 마지막으로 고른 점 하나만 떼어 내는 절단을 후보로 적어 둔 뒤 마지막 두 점을 합칩니다. 이것을 점이 하나 남을 때까지 되풀이하면 후보 가운데 가장 작은 것이 답입니다.

마지막 두 점을 s, t라 하면 최소 절단은 둘을 가르거나 가르지 않거나 둘 중 하나입니다. 가른다면 「t만 떼어 내는 절단」이 이미 s와 t를 가르는 최소 절단이므로 후보에 들어 있고, 가르지 않는다면 s와 t를 한 점으로 합쳐도 답이 변하지 않습니다. 그래서 합치고 되풀이하면 됩니다.

네트워크가 얼마나 잘 견디는지 재는 데 씁니다. 최소 절단값이 작다는 것은 그만큼의 회선만 끊겨도 통신이 두 동강 난다는 뜻입니다. 이미지 분할, 회로 배치, 군집 나누기에도 같은 문제가 나옵니다.

최소 절단값이 0입니다. 이미 갈라져 있으니 아무것도 끊지 않아도 두 무리로 나뉘기 때문입니다. 이 도구는 그 경우를 따로 알려줍니다.

전송되지 않습니다. 계산은 모두 브라우저 안에서 이뤄지고, 입력한 그래프는 이 기기에만 남습니다.

알아두면 좋은 점

  • 정답지는 무식한 방법입니다. 점이 20개 이하면 가능한 모든 분할(첫 점을 포함하는 부분집합 2^(n−1)−1가지)을 훑어 최솟값을 구하고, 스토어–바그너의 답과 같은지 봅니다. 무작위 그래프 400개에서 한 건도 어긋나지 않았습니다.
  • 스토어–바그너 논문에 실린 여덟 점 예제의 답 4와 그때의 분할 {3,4,7,8} / {1,2,5,6}을 검산값으로 고정했습니다.
  • 찾은 분할이 실제로 그 값을 내는지도 따로 확인합니다. 값만 맞고 분할이 엉뚱한 구현을 걸러 내기 위한 것입니다.
  • 두 삼각형을 무게 1짜리 간선 하나로 이어 둔 그래프에서 그 간선을 끊고 3 대 3으로 갈리는 것, 삼각형은 어느 점을 떼어도 2인 것, 이어져 있지 않으면 0인 것을 함께 검사합니다.
  • 단계 수가 점 수보다 하나 적고, 단계별 절단값의 최솟값이 곧 답인 것도 검사값으로 넣었습니다.
  • 같은 두 점 사이에 여러 간선이 있으면 무게를 더합니다. 무게를 생략하면 1로 봅니다.
  • 점은 60개, 간선은 400개까지 다룹니다. 모든 분할을 훑는 대조는 점이 20개를 넘으면 건너뜁니다 — 백만 가지가 넘어가기 때문입니다.
  • 무게는 0보다 커야 합니다. 음수 무게가 있으면 최소 절단 문제 자체가 다른 문제(NP-난해)가 됩니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.