
Q. 주어진 거스름돈을 가장 적은 수의 동전으로 거슬러주는 알고리즘을 고안하라. (이후로 후보군 집합을 C, 해결책 집합을 S라고 명명함.)
A.

그리디 알고리즘에서 필요한 세 가지 함수
1. Select() - 조건에 맞는 원소를 선택
2. Feasible() - S 집합에 들어갈 수 있는지 판단
3. Solution() - 문제가 해결되었는지 확인
* 최적화 문제
대상 함수
가능(feasible)한 해결책 : C를 만족하는 아무 결과
최적의 결과 : 대상 함수를 최적화하는 해결책
* 그리디 알고리즘(Greedy Algorithm)
현재 갖고 있는 정보만을 가지고 결정을 내리는 것. 이에 따른 미래에 영향을 고려하지 않음.
대체로 최적화 문제를 해결하기 위해 쓰임.

- 일반적인 성질
최적화된 방법으로 풀기 위한 몇몇 문제들이 주어짐.
문제에 대한 해결책을 만들기 위한 후보군 집합 C가 있음.
- 알고리즘이 진행됨에 따라, 두 집합이 축적됨.
집합 1 (S) : 이미 고려되고 선택된 후보가 포함되어 있음.
집합 2 : 이미 고려되고 선택되지 않은 후보가 포함되어 있음.
- 함수 Solutiuon()
후보군들의 특정 집합이 문제에 대한 해결책을 제시하는지 체크하며, 당분간은 최적성에 대한 의문을 무시함.
- 함수 Feasible()
후보를 집합에 추가함으로써 집합을 완성시킬 수 있는지, 더불어 문제에 대한 해결이 되는지 체크함.
- 함수 Selection()
선택되거나 거부되지 않고 남은 나머지 후보들 중에서 어떤 것이 가장 적합한지를 나타냄.
* 그래프 : 최소 비용 트리(Minimum Spanning Tree, MST)

대표적인 최소비용트리 알고리즘에는 1) 크루스칼 알고리즘과, 2) 프림 알고리즘이 있음.

- 가중치가 있는 연결된 무방향 그래프
여기서
- 연결된 서브그래프
-
i) 연결된 서브그래프
ii) n-1개를 넘는 개수의 간선을 가지는 서브그래프
i와 ii에 의해,
- 용어 정의
- 가능한 간선들의 집합이 확장되어 최적의 해결책이 될 수 있다면 "적합(Promising)"이라고 부름.
- 집합
를 MST가 만들어지는 과정에서 정점의 집합이라고 가정, 만일 한 간선의 두 끝부분 중 하나만이 이 집합에 속한다면 "간선이 노드 집합 를 떠난다"라고 함.
- Lemma (보조 정리, 정리를 위한 정리)
는 가중치가 있는 무방향성 그래프임. 임. 는 어느 간선도 를 떠나지 않는 간선들의 집합임. 는 를 떠나는 제일 짧은 간선임. 그렇다면, 는 적합함.

- 증명
이제
- 크루스칼 알고리즘(Kruskal's Algorithm)
처음에,
간선을 오름차순으로 검사함.
만일 간선이 두 다른 컴포넌트를 잇고 있다면 T에 포함시킴.
두 연결된 컴포넌트는 새로운 하나의 컴포넌트를 이룸. (합쳐짐.)
알고리즘은 하나의 컴포넌트만 남겨질 때까지 계속됨.

반복문이 진행될 때마다

※ Kruskal의 시간 복잡도
노드 n개의 최대 간선수 =
처음 정렬할 때
for문에서
- 프림 알고리즘 (Prim's Algorithm)
집합 A의 간선들은 하나의 트리를 이룸.
각각의 단계에서, 현재 있는 트리에 새로운 가지(branch)를 한 개 추가함.
각각의 단계에서, 알고리즘은 가능한 최소의 간선

반복문이 진행될 때마다

* 그래프 : 단일 출발점(Single Source) 최단 경로 문제


※ 기존의 값을
- 가중치가 있는 방향성 그래프
각 간선은 음이 아닌 길이를 가짐.
정점들 중 하나,
- 문제는 시작점부터 각각의 다른 정점들까지의 최소 거리를 구하는 것임.
- 다익스트라 알고리즘(Dijkstra's Algorithm)
집합
알고리즘은 반복적으로 정점

반복문이 진행될 때마다

* 스케줄링(Scheduling)
시스템의 시간을 최소화하는 것.
작업이 시스템에서 사용하는 시간을 최소화하는 것이 목표임.
서비스 시간은 미리 주어짐. (작업
작업의 수가 고정되어 있기 때문에, 시스템의 전체 시간을 줄이는 것과 동일함. (
최적의 스케줄은 작업들이 걸리는 시간이 짧은 순서대로 정렬되어 있을 때 해결 가능함. (Shortest Job First 기법)
- 마감 기한(Deadline)이 있는 단위 시간(Unit time) 작업 스케줄링

수행되어야 할 n개의 작업의 집합이 있고, 각각은 단위 시간만큼 소요됨.
작업
작업 집합은 그 안의 작업 전부가 각각의 마감기한을 넘기지 않고 실행되도록 하는 순서(sequence)가 하나 이상 존재하는 경우에만 가능(feasible)함.
- 그리디 알고리즘
각 단계에서 아직 고려되지 않은 작업들 중 가장 높은
WLOG. 작업들은
배열 d는 마감 기한을 담고 있고, 해결책은 배열 j에 담기로 함.
스케줄은 배열 j에 순서대로 담김.
변수
배열 j안의
작업

알고리즘이 진행될 때 배열 j의 상황은 다음과 같음.

'Data Structure & Algorithm > Algorithm' 카테고리의 다른 글
02. 알고리즘 분석 (1) | 2023.10.18 |
---|---|
01. 알고리즘이란 (1) | 2023.10.11 |