본문 바로가기
728x90
반응형

Algorithm25

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.
정렬 알고리즘 정렬 알고리즘이란? n개의 숫자가 입력으로 주어졌을 때, 이를 사용자가 지정한 기준에 맞게 정렬하여 출력하는 알고리즘 정렬이 일어나는 장소에 따라 내부정렬(internal sorting) 데이터의 크기가 주 기억장소 용량보다 적을 경우 기억장소를 활용하여 정렬하는 방법 - 버블정렬, 삽입정렬, 선택정렬, 퀵정렬, 쉘정렬 힙정렬 외부정렬(external sorting) 데이터의 크기가 주기억장소의 용량보다 클 경우 외부 기억장치를 사용하여 정렬하는 방법 - 머지정렬 선택정렬(Selection sort) 현재 위치에 들어갈 값을 찾아 정렬하는 배열 정렬 되지 않은 인덱스의 맨 앞에서 부터, 이를 포함한 그 이후의 배열값 중 가장 작은 값을 찾는다. 가장 작은 값을 찾으면, 그 값을 현재 인덱스의 값과 바꿔준.. 2019. 4. 18.
728x90
반응형