728x90 반응형 Algorithm26 프림 알고리즘 최소 비용 신장 트리(Minimum Spanning Tree)는 신장 트리 중에서 사용된 간선들의 가중치 합이 최소인 신장트리이다. MST를 이용하면, 도로 건설이나 전기 회로 설계, 통신 인프라 구축 등의 문제를 가장 효율적으로 처리할 수 있다. 프림 알고리즘은 시작 정점에서부터 출발해서 신장 트리 집합을 단계적으로 확장해 나가는 방법 동작 순서는 다음과 같다. 1. 시작 단계에서는 시작 정점만이 MST(최소 비용 신장 트리) 집합에 포함된다. 2. 앞 단계에서 만들어진 MST 집합에 인접한 정점들 중에서 최소 간선으로 연결된 정점을 선택하여 트리를 확장한다. 3. 위의 과정을 트리가 (N-1)개 의 간선을 가질 때까지 반복한다. 프림 알고리즘의 시간 복잡도 인접 행렬과 최소 비용값들이 들어가 있는 배.. 2019. 4. 26. Union-Find(합집합 찾기) Union-Find 는 대표적인 그래프 알고리즘이다. Disjoint-Set이라고 해서 서로소 집합 알고리즘이라고도 부른다. 여러 개의 노드가 존재할 때, 두 개의 노드를 선택해서 현재 이 두 노드가 서로 같은 그래프에 속하는 지 판별하는 알고리즘 처음에 여러 개의 노드가 서로 자유롭게 존재한다. 이와 같이 모두 연결되지 않고 각자 자기 자신만을 집합의 원소로 가지고 있을 때, 첫 번째 행은 '노드 번호'를 의미하고 두 번째 행은 '부모 노드 번호'를 의미한다. 즉, 자신이 어떠한 부모에 포함되어 있는지를 의미한다. 이와 같이 1과 2가 연결되었다고 한다. 이러한 '연결성'을 우리가 프로그래밍 언어로 어떻게 표현할 수 있을 지에 대한 내용이 바로 Union-Find라고 생각하자. 2번째 인덱스의 값에 '.. 2019. 4. 26. 크루스칼 알고리즘(Kruskal Algorithm) 가장 적은 비용으로 모든 노드를 연결하기 위해 사용하는 알고리즘이다. 최소 비용 신장 트리를 만들기 위한 대표적인 알고리즘 중 하나. 흔히, 여러 개의 도시가 있을 때 각 도시를 도로를 이용해 연결하고자 할 때 비용을 최소한으로 하고자 한다면 적용되는 알고리즘이다. 이 그래프는 노드의 갯수가 7개 이고 간선의 갯수가 11개이다. "크루스칼 알고리즘의 핵심 개념은 간선을 거리가 짧은 순서대로 그래프에 포함시켜본다." 가장 먼저 간선 정보를 오름차순으로 정렬한 뒤에 비용이 적은 간선부터 차례대로 그래프에 포함 시킨다. 다음의 알고리즘에 맞게 그래프를 연결하면 가장 적은 비용으로 모든 노드를 연결한 그래프인 '최소 비용 신장 트리'가 만들어진다. 1. 정렬된 순서에 맞게 그래프에 포함시킨다. 2. 포함시키기 .. 2019. 4. 26. 플로이드 와샬(Floyd Warshall) 모든 정점에서 모든 정점으로의 최단 경로를 구하고 싶다면 플로이드 와샬 알고리즘을 사용한다. "거쳐가는 정점을 기준으로 최단 거리를 구하는 것" 위의 그래프에서 각각의 정점이 다른 정점으로 가는 비용을 이차원 배열에 출력하면 이 테이블이 의미하는 것은 현재까지 계산된 최소 비용이다. 이러한 이차원 배열을 반복적으로 갱신하여 최종적으로 모든 최소 비용을 구해야 한다. 반복의 기준이 '거쳐가는 정점' 인 것이다. 노드 1을 거쳐가는 경우 노드 1을 거쳐가는 경우는 위와 같이 6가지 공간만 갱신해준다. 즉, 예를 들어 2에서 3으로 가는 경우에는 2에서 3으로 가는 경우의 비용과 (2에서 1로 가는 경우) + (1에서 3으로 가는 경우)의 비용을 더한 값을 비교한다. 더 작은 값으로 교체한다. 2. 노드 2를.. 2019. 4. 26. 힙 정렬(Heap Sort) 힙 정렬 힙 트리 구조(Heap Tree Structure) 를 이용하는 정렬 방법 병합 정렬(Merge Sort)와 퀵 정렬(Quick Sort)만큼 빠른 정렬 알고리즘 힙이란? 최솟값이나 최댓값을 빠르게 찾아내기 위해 완전 이진 트리를 기반으로 하는 트리 최대힙이란? '부모 노드'가 '자식 노드'보다 큰 힙 자기 자신 노드의 자식이 되는 노드들이 자신보다 작다. 만약에, 어떤 노드의 경우가 최대 힙의 조건을 만족하지 않아, 최대 힙이 되지 않을 경우 힙 정렬을 수행하는데 이때 힙 생성 알고리즘(Heapify Algorithm) 을 사용한다. 힙 생성 알고리즘은 특정한 '하나의 노드'에 대해서 수행하는 것 또한 해당 '하나의 노드를 제외하고는 최대 힙이 구성되어 있는 상태'라고 가정을 한다는 특징이 있.. 2019. 4. 23. 다익스트라 알고리즘 다익스트라 알고리즘(Dijkstra 알고리즘) 다이나믹 프로그래밍을 활용한 대표적인 최단 경로 탐색 알고리즘 특정한 하나의 정점에서 다른 모든 정점으로 가는 최단 경로를 알려준다. 하나의 최단 거리를 구할 때 그 이전까지 구했던 최단 거리 정보를 그대로 사용한다. 다익스트라 알고리즘의 경우 어떤 경우에는 다이나믹 프로그래밍, 어떤 경우에는 탐욕 알고리즘으로 분류되기도 한다. 탐욕 알고리즘이란? 현재 상황에서 여러가지 경우가 있을 경우, 그 순간의 최선의 선택을 하는 알고리즘이다. 작동 과정 출발 노드를 설정 출발 노드를 기준으로 각 노드의 최소 비용을 저장 방문하지 않은 노드 중에서 가장 비용이 적은 노드를 선택 해당 노드를 거쳐서 특정한 노드로 가는 경우를 고려하여 최소 비용을 갱신 위 과정에서 3~4.. 2019. 4. 23. 해시, 해시테이블 해쉬란? 해쉬는 임의의 크기를 가진 데이터를 고정된 크기로 변환시키는 것 해시 함수란? 데이터의 효율적 관리를 목적으로 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수 이 때 매핑 전 원래 데이터의 값을 키(key), 매핑 후 데이터의 값을 해시값(hash value), 매핑 하는 과정 자체를 해싱(hashing) 해쉬알고리즘? 해쉬를 하는 방법에 대해 절차적으로 명세 해시 테이블이란? 데이터가 해시 함수를 거쳐 분류된 이후 그 정보가 저장되는 테이블 해시 충돌(collision) 해시함수는 해쉬값의 개수보다 대개 많은 키값을 해쉬값으로 변화하기 때문에 해시함수가 서로 다른 두 개의 키에 대해 동일한 해시값을 내는 해시 충돌이 발생할 수 있다. 해시테이블의 장점 적은 리소스로 많은 데이터를 .. 2019. 4. 18. 이전 1 2 3 4 다음 728x90 반응형