[DATA STRUCTURES - Graph] Kruskal’s Algorithm (크루스칼) — “간선 중심” Greedy MST

2025. 12. 16. 01:57·CS

Kruskal 이란 , 가중치 그래프에서 MST (최소 스패닝 트리) 를 찾는 방법이다. 

 

MST 조건
- 모든 정점을 포함하되
- 사이클이 존재하면 안됨
- 간선의 수가 V-1 이여야 하며
총 가중치가 최소가 되어야 함! (단순 ST 와의 차이점.)

 

여기서 Kruskal은 가중치가 작은 간선부터 하나씩 고르고, 사이클이 생기면 버리는 것이다.

 

Greedy 알고리즘으로 분류되는 이유는 " 매 단계에서 가장 작은 간선을 고르는 지역 최적" 을 선택하기 때문인데,

그래도 누적이 돼서 전역 최적이 된다. 

 

 

 

KruskalMST(V,E):
  sort E by weight
  make-set(v) for all v in V
  T = ∅
  for each edge (u,v) in E:
      if find(u) != find(v):
          T = T ∪ {(u,v)}
          union(u,v)
      if |T| == |V|-1: break
  return T

 

Algorithm KruskalMST
Input: Graph G
Output: MST T
Begin
    T ← {};
    while( n(T) < n - 1 and G.E is not empty ) {
        (v, w) ← smallest edge of G.E;
        G.E ← G.E - {(v, w)};
        if no cycle in {(v, w)} ∪ T,
            T ← {(v, w)} ∪ T
    }
    if (n(T) < n - 1)
        cout << "No MST";
End Algorithm

 

Step1. 

T 를 초기화 한다.

여기서 T는 현재까지 선택한 MST 의 간선 집합이다. 처음에는 아무 간선도 선택 안 했으므로 공집합! 

 

While ()

현재 포함된 간선의 수는 n-1 이여야되니 해당 조건을 확인하고  , 확인할 간선이 남았는지도 확인!

해당 조건을 통과하면, G 에 있는 간선들 모음에서 가장 작은것들 빼고, 해당 것을 제외한 남은 애들만 남겨놓기 

(가중치가 가장 작은 간선 하나를 선택한다.) -> 이게 바로 Greedy

 

현재 MST 후보 T에 v,w 간선을 추가했을 때 사이클이 생기지 않는다면, 이 간선은 넣을 수 있다. 

(v,w 가 같은 컴포넌트에 있다면 cycle 이 발생한다.- DFS, BFS 로 경로 존재 여부를 검사해도 됨.) 사이클이 없다면 간선 집합에 추가한다. 

 

모든 간선을 다 봤는데도 v-1 조건을 만족하지 않는다면, MST 가 아니다! 

 

 

 

'CS' 카테고리의 다른 글

[CS - 컴퓨터구조] 컴퓨터가 이해하는 정보  (0) 2025.12.18
[CS - 네트워크] API 호출로 보는 네트워크  (0) 2025.12.17
[CS - 컴퓨터구조 ] 컴퓨터 구조 공부, 첫 걸음!  (0) 2025.12.17
[DATA STRUCTURES - Graph] Prim Algorithm — “정점 중심” Greedy MST  (0) 2025.12.16
[CS] 네트워크(Network) 정리  (0) 2025.12.12
'CS' 카테고리의 다른 글
  • [CS - 네트워크] API 호출로 보는 네트워크
  • [CS - 컴퓨터구조 ] 컴퓨터 구조 공부, 첫 걸음!
  • [DATA STRUCTURES - Graph] Prim Algorithm — “정점 중심” Greedy MST
  • [CS] 네트워크(Network) 정리
yeseul-kim01
yeseul-kim01
  • yeseul-kim01
    슬 개발일지
    yeseul-kim01
  • 전체
    오늘
    어제
    • 분류 전체보기 (79)
      • 자격증 (1)
        • 정보보안기사 (0)
      • DevOps (17)
        • Docker (6)
        • Kubernetes (1)
        • GitHub Actions (0)
        • AWS (4)
        • Monitoring (1)
        • Nginx (1)
        • GCP (3)
      • ServerDev (34)
        • SpringBoot (13)
        • DJango (5)
        • FastAPI (14)
        • Next (0)
        • Flask (0)
        • Database (2)
      • Algorithm (2)
        • BFS (0)
        • DFS (1)
        • 다익스트라 (0)
      • CS (8)
      • Data Engineering (1)
      • AI&MLOps (2)
      • Architecture (6)
      • Software Engineering (0)
        • Library Packaging (0)
      • Project (5)
        • docx-generator (0)
        • speak-note (2)
        • ms-serving (1)
        • keyshield (2)
      • ProgrammingLanguages (3)
        • Python (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    하이브리드아키텍처
    프로젝트기록-speaknote
    실무일기-백엔드편
    아키텍처
    FastAPI
    SpeakNote
    MLops
    depends
    di
    NLP부트캠프
    실시간시스템
    실무일기-인프라편
    동시성제어
    KServe
    FastAPI - CORS 마스터
    비동기처리
    SpringBoot
    아키텍처설계
    백엔드
    멀티모듈
    Kubernetes
    STT
    Django
    docker
    KeyShield
    multipartfile
    트러블슈팅
    grpc
    rag
    프로젝트기록-KeyShield
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
yeseul-kim01
[DATA STRUCTURES - Graph] Kruskal’s Algorithm (크루스칼) — “간선 중심” Greedy MST
상단으로

티스토리툴바