navis
알고리즘 10강 (그래프) 본문
728x90
학습개요
- 지난 시간에 이이서 이번 시간에도 그래프의 대표적인 응용문제로서, 최단 경로를 구하는 벨만-포드 알고리즘과 플로이드 알고리즘에 대해서 살펴보고, 네트워크 플로 문제와 이를 위한 가장 기본적인 형태의 포드-풀커슨 알고리즘에 대해서 학습한다.
학습목표
- 벨만-포드 알고리즘의 개념, 동작 그리고 특징을 이해하고 적용할 수 있다.
- 플로이드 알고리즘의 개념, 동작, 그리고 특징을 이해하고 적용할 수 있다.
- 네트워크 플로 문제의 정의, 용어 및 이를 위한 포드-풀커슨 알고리즘을 이해하고 적용할 수 있다.
주요용어
- 벨만-포드 알고리즘(Bellman-Ford algorithm)
- 음의 가중치를 갖는 간선이 존재하는 그래프에 대해서도 단일 출발점 최단 경로를 구할 수 있는 방법
- 간선을 1개부터 최대 (|V|-1)개까지를 사용하는 최단 경로를 단계적으로 구하는 방법 - 플로이드 알고리즘(Floyd algorithm)
- 동적 프로그래밍 방법을 적용하여 모든 정점 쌍 간의 최단 경로를 한꺼번에 구하는 알고리즘 - 네트워크 플로 문제(network flow problem)
- 주어진 네트워크에 대해서 소스에서 싱크로 보낼 수 있는 플로 값을 최대로 하는 문제(“최대 플로 문제”) - 포드-풀커슨 알고리즘(Ford-Fulkerson algorithm)
- 모든 간선의 플로를 0으로 둔 상태에서 시작해서 증가 경로가 더 이상 존재하지 않을 때까지 반복적으로 경로를 찾아서 최대 플로값을 구하는 방법 - 증가 경로(augmenting path)
- 소스에서 싱크까지 더 많은 플로를 보내기 위한 경로 - 커트(cut)
- 소스와 싱크가 각각 서로 다른 집합에 속하도록 정점의 집합을 2개의 집합으로 나누었을 때 두 집합을 연결하는 간선의 집합
정리하기
- 벨만-포드 알고리즘
⦁ 단일 출발점 최단 경로 알고리즘
- 데이크스트라 알고리즘 → 음의 가중치를 갖는 간선이 있으면 적용 불가
- 벨만-포드 알고리즘 → 음의 가중치를 갖는 간선이 존재하는 그래프에 대해서도 적용 가능 → 음의 사이클이 있는 경우에는 적용 불가
⦁ |V|=n인 G=(V,E)에서 간선을 1개부터 최대 (n-1)개까지를 사용하는 최단 경로를 단계적으로 구하는 방법 → 모든 간선을 한 번씩 조사하면서 기존 거리와 해당 간선을 지남으로써 결정되는 거리 중에서 작은 값으로 d[]를 조정하는 과정을 (n-1)번 반복 → 각 단계에서 모든 간선을 조사할 필요 없이, 실제로는 이전 단계에서 거리값이 조정된 정점에 부수된 간선만 조사하면 좀 더 효율적인 처리가 가능
⦁ 성능 → O(|V||E|)
⦁ 음의 가중치를 갖는 간선이 없는 경우에는 데이크스트라 알고리즘이 더 바람직 - 플로이드 알고리즘
⦁ 모든 정점 쌍 간의 최단 경로를 구하는 문제
- 경유할 수 있는 중간 정점의 범위가 1인 경로부터 시작해서 |V|인 경로까지 하나씩 정점의 범위를 늘려가면서 모든 정점 쌍 간의 최단 경로를 구함
- 가정 → 경로의 길이가 음인 사이클이 그래프에 존재하지 않음
- 동적 프로그래밍 방법이 적용됨
⦁ 성능 → O(|V|3)
⦁ 각 정점을 출발점으로 사용하여 데이크스트라 알고리즘을 반복적으로 적용해서도 해결 가능 → 플로이드 알고리즘이 더 효율적
⦁ |V|×|V| 크기의 배열 P[][]를 사용해서 최단 경로 자체를 구할 수 있음 → 정점 k를 경유하는 경로의 길이가 경유하지 않는 경로의 길이보다 더 짧으면 P[i][j]에 중간 정점 k를 저장해서 활용 - 포드-풀커슨 알고리즘
⦁ 주어진 네트워크 N에 대해서 소스 s에서 싱크 t로 보낼 수 있는 플로 값 F를 최대로 하는 문제
- 네트워크 N=(V,E,s,t,c)
- G=(V,E) → 가중 방향 그래프
- 용량 c → 간선의 가중치 → 간선을 통해 보낼 수 있는 최대의 양이나 값
- 플로 f(u,v) → 간선 <u,v> 의 용량 중에서 실제 사용하고 있는 양/값 → 용량 제약 조건, 플로 보존 제약 조건
- 플로 값 F → 소스에서 나가는 플로의 합 또는 싱크로 들어오는 플로의 합
⦁ 포드-풀커슨 알고리즘
- 모든 간선의 플로를 0으로 둔 상태에서 시작해서 소스에서 싱크로 플로를 더 보낼 수 있는 증가 경로가 더 이상 존재하지 않을 때까지 반복적으로 증가 경로를 찾아서 최대 플로 값을 구하는 방법
- 순방향 간선 ↔ 역방향 간선
- 잔여 용량 → 순방향 간선의 경우 해당 간선에 대해서 플로를 실제로 증가시킬 수 있는 값을 의미하고, 역방향 간선의 경우에는 간선에 부여된 플로를 줄일 수 있는 값을 의미
- 증가 경로의 여유량 → 경로에 포함된 모든 간선의 잔여 용량 중 가장 작은 값 → 해당 경로를 사용해서 증가시킬 수 있는 플로 값
- 성능 → O(|E|F)
- 간선의 용량이 무리수이면 알고리즘이 종료하지 않을 수 있음
- 증가 경로를 선택할 때 깊이 우선 탐색 사용 → 에드몬즈-카프 알고리즘은 너비 우선 탐색 적용
- 커트 → 소스와 싱크가 각각 서로 다른 집합에 속하도록 정점 집합을 두 개의 집합으로 나누었을 때 두 집합을 연결하는 간선의 집합
'방송통신대 컴퓨터과학과' 카테고리의 다른 글
인공지능 11강 (기계학습) (0) | 2024.04.30 |
---|---|
운영체제 11강 (장치관리) (0) | 2024.04.29 |
인공지능 10강 (기계 학습) (0) | 2024.04.24 |
운영체제 10강 (페이지 교체 알고리즘) (0) | 2024.04.23 |
운영체제 9강 (가상 메모리) (0) | 2024.04.22 |