본문 바로가기
반응형

알고리즘8

[알고리즘] 크루스칼(Kruskal)과 프림(Prim) Goal MST란? 크루스칼이란? 프림이란? 최소 신장 트리에 사용된 최소 비용을 어떻게 구할까? 최소 비용으로 신장 트리를 어떻게 만들 수 있을까? 1. 크루스칼? 프림? MST? 1) MST(Minimum Spanning Tree) 신장 트리(Spanning Tree) 무방향 그래프 G(V,E)에서 E에 속한 간선들로 사이클을 포함하지 않으면서 모든 정점 V를 연결한 부분 그래프를 신장 트리(Spanning Tree)라 한다. 그래프에서 신장 트리는 여러 형태로 존재할 수 있으며, 신장 트리의 특징은 n개의 정점을 갖는 그래프에서 신장 트리에 속하는 간선의 수는 n-1개이며 사이클을 이루지 않는다는 특징이 있다. MST란 최소 비용 신장 트리(이하 최소 신장 트리)를 뜻하며, 무방향 그래프의 간선들에.. 2021. 12. 15.
[알고리즘] Graph-위상 정렬(Topological Sort) 참고 자료 : https://www.youtube.com/watch?v=qzfeVeajuyc Topological Sort Result : 1 : 위상 정렬 가능(사이클이 존재하지 않는다.) 2 : 1, 2, 3, 5, 4, 6, 7 or 1, 2, 3, 4, 5, 6, 7 위상 정렬(Topological Sort)이란? 순서가 정해져 있는 작업을 차례대로 수행해야 할 때 사용하는 알고리즘으로, 방향 그래프에 존재하는 각 정점들의 선행 순서를 지키며 모든 정점을 나열하는 것이다. 위상 정렬(Topologicla Sort)의 특징 여러 개의 답이 존재할 수 있다. 그래프의 흐름은 '조건'이다. 사이클이 발생하는 경우 위상 정렬을 수행할 수 없다. 즉, DAG(Directed Acyclic Graph : 사.. 2021. 7. 24.
[알고리즘] 분할 정복(Divide and Conquer) 분할 정복(Divide and Conquer)이란? 주어진 문제의 입력을 나눌 수 없을 때까지 분할(Divide)하여 문제를 해결(Conquer : 정복)한 뒤, 다시 병합(Combine)하는 방식의 알고리즘으로, 이진 탐색(Binary Search) 알고리즘, 병합 정렬(Merge Sort) 알고리즘, 퀵 정렬(Quick Sort) 알고리즘 등에 사용된다. Divide : 문제가 분할이 불가능할 때까지, 2개 이상의 문제로 나눈다. Conquer : 문제를 해결한다.(정렬, 탐색 등) Combine : Conquer한 문제들을 병합하여 원래 문제의 답을 얻는다. 분할 정복(Divide and Conquer)의 특징 1. 분할된 문제들은 크기만 작아질 뿐, 원래 문제와 성격이 동일하다. 2. 대개 재귀적.. 2021. 7. 21.
[알고리즘] 병합/합병 정렬(Merge Sort) 병합 정렬(Merge Sort)이란? 리스트를 반으로 더 이상 나눌 수 없을 때까지 반으로 나누고(Divide : 분할), 나누어진 부분 리스트들을 두 개씩 짝지어 정렬(Conquer : 정복)하며 합치는(Combine : 결합) 과정을 반복하는 방법으로 원소들을 작은 순, 혹은 큰 순으로 정렬하는 알고리즘 중 하나이다. 병합 정렬(Merge Sort)의 특징 1. 주어진 배열(입력 배열) 이외에 다른 추가 메모리를 요구한다. //추가적인 리스트가 필요하다. 2. 중복된 값은 입력 순서와 동일하게 정렬되는 안정 정렬(Stable Sort)이다. // merge할 때 같은 값이 나온다면 앞의 그룹의 숫자를 먼저 써야 함 3. 데이터들 간의 상대적 크기 관계만을 이용해서 정렬하는 비교 정렬이다 4. 시간 복.. 2021. 7. 21.
[알고리즘] 퀵 정렬(Quick Sort) 퀵 정렬(Quick Sort)이란? 리스트에서 하나의 피벗(Pivot)을 정하고, 이를 기준으로 피벗보다 작은 요소들, 피벗보다 큰 요소들로 두 개의 부분 리스트를 만들고(Divide : 분할), 정렬 후 다시 결합(Conquer : 정복)을 재귀적으로 반복하는 방법으로 원소들을 작은 순, 혹은 큰 순으로 정렬하는 알고리즘 중 하나이다. 퀵 정렬(Quick Sort)의 특징 1. 주어진 배열(입력 배열) 이외에 다른 추가 메모리를 요구하지 않는 제자리 정렬(in-place sorting) 알고리즘이다. //주어진 배열만으로 정렬을 할 수 있다. //메모리가 제한적인 경우에 이점이 있다. 2. 중복된 값은 입력 순서와 동일하게 유지된다는 보장을 할 수 없는 불안정 정렬(Unstable Sort)이다 3. .. 2021. 7. 19.
[알고리즘] 삽입 정렬 (Insertion Sort) 삽입 정렬(Insertion Sort)이란? 앞(왼쪽)의 원소들이 정렬되어 있다는 가정 하에 적절한 위치에 삽입하는 방법으로 원소들을 작은 순, 혹은 큰 순으로 정렬하는 알고리즘 중 하나이다. 삽입 정렬(Insertion Sort)의 특징 1. 주어진 배열(입력 배열)이외에 다른 추가 메모리를 요구하지 않는 제자리 정렬(in-place sorting) 알고리즘이다. //주어진 배열만으로 정렬을 할 수 있다. //메모리가 제한적인 경우에 이점이 있다. 2. 코드가 직관적이며 정렬 알고리즘 중에 난이도가 쉬운 편이다. 3. 중복된 값은 입력 순서와 동일하게 정렬되는 안정 정렬(Stable Sort)이다. 4. 손 안의 카드를 정렬하는 방법과 유사하다. 5. 시간 복잡도는 Best : O(N), Avg : O.. 2021. 7. 18.
[알고리즘] 버블 정렬 (Bubble Sort) 버블 정렬(Bubble Sort)이란? 서로 인접한 두 원소를 검사하여 더 작거나 큰 값을 반복적으로 앞으로 보내는 방법으로 원소들을 작은 순, 혹은 큰 순으로 정렬하는 알고리즘 중 하나이다. 버블 정렬(Bubble Sort)의 특징 1. 주어진 배열(입력 배열)이외에 다른 추가 메모리를 요구하지 않는 제자리 정렬(in-place sorting) 알고리즘이다. //주어진 배열만으로 정렬을 할 수 있다. //메모리가 제한적인 경우에 이점이 있다. 2. 코드가 직관적이며 정렬 알고리즘 중 구현 방법이 가장 간단하다. 3. 중복된 값은 입력 순서와 동일하게 정렬되는 안정 정렬(Stable Sort)이다. 4. 시간 복잡도는 최선, 평균, 최악의 경우 모두 O(N^2)이며 모든 정렬 중에 가장 비효율적인 정렬 .. 2021. 7. 18.
[알고리즘] 선택 정렬 (Selection Sort) 선택 정렬(Selection Sort)이란? 주어진 리스트에서 최솟값을 찾아(선택) 맨 앞으로 보내는 방법으로 원소들을 작은 순, 혹은 큰 순으로 정렬하는 알고리즘 중 하나이다. 선택 정렬(Selection Sort)의 특징 1. 주어진 배열(입력 배열)이외에 다른 추가 메모리를 요구하지 않는 제자리 정렬(in-place sorting) 알고리즘이다. //주어진 배열만으로 정렬을 할 수 있다. //메모리가 제한적인 경우에 이점이 있다. 2. 코드가 직관적이며 정렬 알고리즘 중에 난이도가 쉬운 편이다. 3. 중복된 값은 입력 순서와 동일하게 유지된다는 보장을 할 수 없는 불안정 정렬(Unstable Sort)이다. // 짜기 나름이다. 아래 코드는 stable하다. 4. 시간 복잡도는 최선, 평균, 최악의.. 2021. 7. 18.
반응형