navis
알고리즘 9강 (그래프) 본문
728x90
학습개요
- 이번 시간에는 그래프를 활용한 대표적인 응용문제로서, 최소 신장 트리를 구하는 크루스칼 알고리즘과 프림 알고리즘, 그리고 단일 출발점 최단 경로를 구하는 데이크스트라 알고리즘에 대해서 학습한다.
학습목표
- 최소 신장 트리를 구하는 크루스칼 알고리즘의 개념과 동작을 이해하고 적용할 수 있다.
- 최소 신장 트리를 구하는 프림 알고리즘의 개념과 동작을 이해하고 적용할 수 있다.
- 단일 출발점 최단 경로를 구하는 데이크스트라 알고리즘의 개념, 동작 및 특성을 이해하고 적용할 수 있다.
주요용어
- 최소 신장 트리(minimum spanning tree)
- 신장 트리 중에서 간선의 가중치의 합이 가장 작은 것
- 신장 트리 → 가중 무방향 그래프에서 모든 정점을 포함하는 연결된 부분 그래프 중에서 트리인 것 - 크루스칼 알고리즘(Kruskal algorithm)
- 간선이 하나도 없는 상태에서 시작해서 가중치가 가장 작은 간선부터 하나씩 골라서 사이클을 형성하지 않는 간선을 추가하는 방식으로 최소 신장 트리를 만들어가는 알고리즘 - 프림 알고리즘(Prim algorithm)
- 임의의 한 정점에서 시작해서, 이미 선택된 정점의 집합과 선택되지 않는 정점의 집합을 잇는 간선 중에서 가중치가 가장 작은 간선을 선택해서 추가하는 방식으로 최소 신장 트리를 구하는 알고리즘 - 최단 경로(shortest path)
- 가중 그래프에서 두 정점을 연결하는 경로 중에서 간선의 가중치의 합이 가장 작은 경로 - 데이크스트라 알고리즘(Dijkstra algorithm)
- 하나의 출발점에서 시작해서 거리값이 최소인 정점을 차례대로 선택하여 최단 경로를 구하는 알고리즘
- 미선택 정점 집합에서 거리값이 가장 작은 정점 u를 선택하고, u의 인접 정점에 대해서 u를 경유하는 거리와 기존 거리를 비교해서 작은 값을 새로운 거리값으로 조정하는 과정을 반복적으로 거침
정리하기
- 크루스칼 알고리즘
⦁ 최소 신장 트리 → 신장 트리 중에서 간선의 가중치 합이 가장 작은 것
- 신장 트리 → 가중 무방향 그래프에서 모든 정점을 포함하는 트리
- 크루스칼 알고리즘과 프림 알고리즘 → 욕심쟁이 방법이 적용됨
⦁ 크루스칼 알고리즘
- 간선이 하나도 없는 상태에서 시작해서 가중치가 가장 작은 간선부터 하나씩 골라서 사이클을 형성하지 않으면 추가하는 방식
- 간선 (u,v)의 두 정점 u,v가 서로 다른 연결 성분에 속하면 해당 간선은 사이클을 형성하지 않음
- |V|=n개의 정점이 각각의 서로 다른 연결 성분으로 구성된 상태에서 시작해서 간선을 추가할 때마다 연결 성분들이 하나씩 합쳐져서 최종적으로 하나의 연결 성분을 형성함
- 성능 → O(|E|log|E|) - 프림 알고리즘
⦁ 임의의 한 점에서 시작해서 연결된 정점을 하나씩 선택해서 추가시키는 방법
- 이미 선택된 정점 집합 S와 미선택 정점 집합 V-S를 잇는 간선 중에서 가중치가 가장 작은 간선을 선택해서 추가하는 방식
⦁ 성능
- 인접 행렬 → O(|V|2)
- 인접 리스트와 힙 사용 → O((|V|+|E|)log|V|) - 데이크스트라 알고리즘
⦁ 최단 경로 → 가중 그래프에서 두 정점 u에서 v를 연결하는 경로 중 간선의 가중치의 합이 가장 작은 경로
⦁ 데이크스트라 알고리즘
- 단일 출발점 최단 경로를 구하는 알고리즘 → 하나의 출발점에서 시작하여 거리 d[]가 최소인 정점을 선택해 나감으로써 최단 경로를 구하는 방법 → 욕심쟁이 방법 적용 → 음의 가중치를 갖는 간선이 없는 경우에만 적용 가능
- 거리 d[v] → 출발점에서 현재까지 선택된 정점 집합 S를 경유하여 정점 v에 이르는 최소 경로의 길이
- 적용 방법 → ⓐ 미선택 정점 집합 V-S에서 거리 d[]가 최소인 정점 u를 선택하고, ⓑ u의 인접 정점들에 대하여 u를 경유하는 거리와 기존 거리 중에서 작은 것을 새 거리값으로 조정
- 성능 → 인접 행렬 O(|V|2), 인접 리스트 O((|E|+|V|)log|V|)
'방송통신대 컴퓨터과학과' 카테고리의 다른 글
운영체제 9강 (가상 메모리) (0) | 2024.04.22 |
---|---|
인공지능 9강 (컴퓨터 시각과 패턴인식) (0) | 2024.04.22 |
운영체제 8강 (메모리 관리) (0) | 2024.04.19 |
인공지능 8강 (컴퓨터 시각과 패턴인식) (0) | 2024.04.19 |
알고리즘 8강 (그래프) (1) | 2024.04.19 |