Problem-Solving/Algorithm
-
[최소신장트리] 크루스칼(Kruskal) 알고리즘Problem-Solving/Algorithm 2023. 10. 29. 03:28
🍀 목차 크루스칼 알고리즘 같은 목적을 가진 알고리즘 기본 이해 구현(JavaScript) 시간 복잡도 크루스칼 알고리즘 최소 신장 트리 (MST : Minimum Spanning Tree) 알고리즘 중 하나. MST(Minimum Spanning Tree) 모든 정점을 잇는 최소 비용 Spanning Tree를 찾는 것이 목적. 무향 가중치 그래프에서 적용한다. 사이클이 포함되어서는 안 된다(트리는 사이클 없이 모든 정점이 연결되어 있는 그래프 자료구조). 기본적으로 그리디 알고리즘을 바탕으로 하고 있다. 항상 최소 비용을 찾고 탐욕적으로 선택한다. 간선 선택 기반 알고리즘이다. 간선을 가중치(비용) 오름차순으로 정렬하고 Union-Find 알고리즘을 적용하며 사이클 형성 유무를 판단하며 선택해 간다...
-
[그래프] 유니온-파인드(Union-Find)Problem-Solving/Algorithm 2022. 6. 1. 17:09
🍀 목차 유니온-파인드 알고리즘 기본 이해 구현(JavaScript) 활용 예 시간 복잡도 유니온-파인드 알고리즘 집합을 관리하는 자료구조 유니온-파인드를 활용해 합집합을 찾는 알고리즘이며, Disjoint Set(서로소 집합, 상호 배타적 집합), Merge find Set 알고리즘이라고도 불린다. 유니온-파인드는 루트 노드 밑에 자식 노드들이 엮인 트리 구조를 따른다. 여러 개의 노드 중 선택된 두 노드가 같은 그래프에 속해 있는지 판별한다. 크게 3가지의 과정을 거친다. Initialization(초기화) : 각 노드가 각각의 집합에 포함되도록 초기화하는 과정 Find(찾기) : 특정 노드의 부모를 찾는다. (해당 노드가 속한 집합의 루트를 반환한다.) Union(합치기) : 두 노드 A와 B를 한..
-
[수학] 최대공약수(GCD), 최소공배수(LCM) 알고리즘Problem-Solving/Algorithm 2022. 5. 13. 15:20
🍀 목차 최대공약수, 최소공배수 알고리즘 기본 이해 구현(JavaScript) 시간 복잡도 최대공약수, 최소공배수 알고리즘 최대공약수(Greatest Common Divisor, GCD) : 두 수의 여러 공약수 중 최대인 수. 최소공배수(Least Common Multiple, LCM) : 두 수에 공통으로 존재하는 배수 중 가장 작은 수. A, B의 최대공약수를 구할 때 1부터 시작하여 Math.min(A, B)까지 A와 B가 나누어 떨어지는 최대의 수를 구하면 최대공약수를 구할 수 있지만 이 방법은 시간 복잡도가 O(n)이다. 그래서 최대공약수를 구할 때 유클리드 호제법을 쓴다. 두 수가 서로 상대방 수를 나누어서 결국 원하는 수를 얻는 알고리즘이다. 나눠가며(log) 구해가기 때문에 훨씬 효율적이..
-
[최단경로] 플로이드-워셜(Floyd-Warshall) 알고리즘Problem-Solving/Algorithm 2022. 5. 11. 15:18
🍀 목차 플로이드-워셜 알고리즘 같은 목적을 가진 알고리즘 기본 이해 구현(JavaScript) 그냥 다익스트라를 정점만큼 돌리면 안 되나요? 시간 복잡도 플로이드-워셜 알고리즘 가중 그래프에서 간선 가중치의 합이 최소가 되는 경로를 찾는 최단 경로를 찾기 위한 알고리즘 중 하나. 한 번 실행하여 모든 정점 - 모든 정점 간의 최단 경로를 구할 수 있는 알고리즘. 다이나믹 프로그래밍(DP)을 바탕으로 하고 있다. 음의 사이클이 없는 그래프라면 음의 가중치를 가졌을 때도 사용 가능. (음의 사이클의 존재를 판단할 수 있음.) 같은 목적을 가진 알고리즘 다익스트라 알고리즘 게시글에 정리해놓았다. 기본 이해 모든 정점과 모든 정점 간의 최단 거리를 구해야 하므로 2차원 배열을 생성, 갱신해 나간다. 단계별로 ..
-
[최단경로] 다익스트라(Dijkstra) 알고리즘Problem-Solving/Algorithm 2022. 5. 4. 15:21
🍀 목차 다익스트라 알고리즘 같은 목적을 가진 알고리즘 최단경로 알고리즘과 MST와의 차이점은 뭐지? 기본 이해 구현(JavaScript) 왜 음수 가중치에서는 사용이 불가능한 것일까? 시간 복잡도 따라서... 다익스트라 알고리즘 가중 그래프에서 간선 가중치의 합이 최소가 되는 경로를 찾는 최단 경로를 찾기 위한 알고리즘 중 하나. 기본적으로 그리디 알고리즘을 바탕으로 하고 있다. 거리를 기록하며 이미 최단 경로를 구한 곳은 다시 구할 필요가 없기 때문에 다이나믹 프로그래밍으로 보기도 한다. 항상 최단 경로를 찾고 탐욕적으로 선택한다. - 그리디 이미 계산된 경로를 저장후, 그를 활용해 중복된 하위 문제를 푼다. - DP 다익스트라 알고리즘은 음수 가중치가 포함된 그래프에서는 사용할 수 없다. 이유 알아..