Algorithm/Concepts
-
[Algorithm] 벨만-포드(Bellman-ford) 알고리즘Algorithm/Concepts 2024. 10. 23. 15:00
벨만-포드(Bellman-ford) 알고리즘이란?벨만-포드 알고리즘은 최단 경로 알고리즘 중 하나로, 그래프 내의 모든 정점에서 특정 시작 정점까지의 최단 경로를 찾는 알고리즘이다. 특히, 음수 가중치를 가진 간선이 있는 그래프에서도 작동하며, 음수 사이클을 감지할 수 있다. 시간복잡도벨만-포드 알고리즘의 시간 복잡도는 O(V * E)이다. 여기서 V는 정점의 수, E는 간선의 수를 의미한다. 이 시간 복잡도는 모든 간선에 대해 V−1번의 반복을 수행하는 것에서 비롯된다. 벨만-포드 알고리즘의 기본 원리초기화:시작 정점을 제외한 모든 정점까지의 거리를 무한대(∞)로 설정시작 정점의 거리는 0으로 설정계산:그래프의 모든 간선에 대해 정점을 반복적으로 탐색각 간선을 검사하여, 해당 간선을 통해 더 짧은 ..
-
[Algorithm] 프림(Prim) 알고리즘Algorithm/Concepts 2024. 9. 22. 02:39
프림(Prim) 알고리즘이란?프림 알고리즘(Prim's Algorithm)은 최소 신장 트리(MST, Minimum Spanning Tree)를 찾기 위한 또 다른 그리디 알고리즘이다.알고리즘의 기본 아이디어는 시작점에서 출발해 인접한 간선을 선택하며 최소 신장 트리를 점진적으로 확장해가는 방식이다. 프림 알고리즘은 힙(heap)이나 우선순위 큐(priority queue)를 사용하여 효율적으로 최소 가중치의 간선을 선택할 수 있다. 시간복잡도프림 알고리즘의 시간 복잡도는 그래프를 구현하는 방식에 따라 다르다인접 리스트를 사용하고, 우선순위 큐로 구현:O(ElogV), 여기서 E는 간선의 수, V는 정점의 수우선순위 큐를 통해 간선 선택을 효율적으로 처리인접 행렬을 사용:O(V^2) 시간이 걸립니다. ..
-
[Algorithm] 크루스칼(Kruskal) 알고리즘Algorithm/Concepts 2024. 9. 22. 02:32
크루스칼(Kruskal) 알고리즘이란?최소 신장 트리(MST, Minimum Spanning Tree) 를 찾기 위한 대표적인 그리디 알고리즘 중 하나이다.알고리즘의 기본 아이디어는 간선을 가중치 순으로 정렬한 후, 가장 작은 가중치의 간선을 하나씩 선택하면서, 선택된 간선이 사이클을 이루지 않는 경우에만 최소 신장 트리에 포함하는 것이다. 시간복잡도크루스칼 알고리즘의 시간 복잡도는 O(ElogE)이다. 여기서 E는 그래프의 간선 수를 의미한다. 주요 연산은 다음과 같다:간선 정렬: 간선들을 가중치 순으로 정렬하는 데 O(ElogE)의 시간이 소요된다.유니온-파인드 연산: 각 간선에 대해 유니온-파인드를 사용하여 사이클을 판별하는 데 O(Eα(V))의 시간이 소요된다. α(V)는 아커만 함수의 역..
-
[Algorithm] 유니온-파인드(Union-Find) 알고리즘Algorithm/Concepts 2024. 9. 16. 13:23
유니온-파인드(Union-Find) 알고리즘이란? 유니온-파인드 알고리즘은 서로소 집합(Disjoint Set)을 효율적으로 관리하는 자료구조이다. 주로 그래프에서 사이클을 판별하거나, 네트워크 연결 문제에서 각 노드 간의 연결 여부를 확인하는 데 사용된다.알고리즘의 기본 아이디어는 여러 개의 원소가 존재하는 집합을 트리 구조로 표현하고, 두 집합을 합치거나(Union) 특정 원소가 속한 집합을 찾는(Find) 연산을 효율적으로 수행하는 것이다. 시간복잡도유니온-파인드 알고리즘의 시간 복잡도는 경로 압축(Path Compression)과 랭크에 의한 합치기(Union by Rank)를 사용할 경우, 거의 상수 시간인 O(α(n))이 된다. 여기서 α(n)은 아커만 함수의 역함수로, 매우 느리게 증가하는..
-
[Algorithm] 비트마스킹(Bitmask) 알고리즘Algorithm/Concepts 2024. 9. 2. 03:28
비트마스킹(Bitmask) 알고리즘이란?비트마스킹 알고리즘은 상태나 집합을 효율적으로 표현하고 조작하기 위해 비트 연산을 사용하는 알고리즘이다. 주로 배열 대신 비트를 사용하여 메모리를 절약하고, 빠른 연산을 통해 성능을 개선할 수 있다.알고리즘의 기본 아이디어는 각 상태나 원소를 비트로 표현하고, 비트 연산을 통해 빠르게 조작하는 것이다. 시간복잡도비트마스킹 알고리즘의 시간 복잡도는 문제의 특성에 따라 달라진다. 예를 들어, 비트마스킹을 사용하여 방문 여부를 표시하고 탐색하는 경우, 비트 연산 자체는 O(1)로 매우 빠르다. 그러나 상태를 표현하는 비트마스크가 n개의 비트를 사용하는 경우, 모든 가능한 상태를 탐색하거나 확인해야 한다면, 최악의 경우 시간 복잡도는 O(2^n)이 될 수 있다. 이는 모..
-
[Algorithm] 플로이드-워셜(Floyd-Warshall) 알고리즘Algorithm/Concepts 2024. 8. 31. 15:07
플로이드-워셜(Floyd-Warshall) 알고리즘이란?플로이드-워셜 알고리즘은 그래프 내의 모든 정점 쌍에 대해 최단 경로를 찾는 알고리즘이다. 인접 행렬을 사용하여 구현되며, 그래프의 가중치가 음수일 수 있지만, 음수 사이클이 없는 경우에만 유효하다.알고리즘의 기본 아이디어는 모든 가능한 경로를 시도하면서 더 짧은 경로가 발견되면 이를 갱신하는 것이다. 시간복잡도플로이드-워셜 알고리즘의 시간 복잡도는 O(n^3)이다. 그래프의 모든 정점 쌍에 대해 경로를 확인하기 때문이다. 여기서 n은 그래프의 정점 수를 의미한다. 플로이드-워셜의 기본 원리초기화:각 정점 간의 최단 경로를 저장할 2차원 배열 dist를 초기화그래프의 직접 연결된 정점 사이의 가중치로 dist 배열을 설정dist[i][i]는 0으..
-
[Algorithm] 누적 합(Prefix Sum) 알고리즘Algorithm/Concepts 2024. 8. 22. 17:55
누적 합(Prefix Sum) 알고리즘이란?주어진 배열에서 각 요소까지의 합을 계산하여 새로운 배열을 생성하는 알고리즘이다. 이는 특정 구간의 합을 빠르게 계산할 때 유용하며, 특히 큰 데이터를 다룰 때 효율적이다.알고리즘의 기본 아이디어는 원래 배열의 첫 번째 요소부터 마지막 요소까지의 합을 점진적으로 계산하여 새로운 배열에 저장하는 것이다. 시간복잡도누적합 알고리즘의 시간복잡도는 O(n)이다. 배열의 각 요소에 대해 한 번씩만 계산하면 되기 때문에 매우 효율적이다.누적합을 통해 구간 합을 계산할 때는 추가적인 반복 없이 O(1) 시간에 계산할 수 있다. 누적 합의 기본 원리초기화:첫 번째 요소를 그대로 사용하여 누적합 배열의 첫 번째 요소를 초기화계산:두 번째 요소부터 마지막 요소까지의 합을 계산..
-
[Algorithm] 분할 정복(Divide and Conquer) 알고리즘Algorithm/Concepts 2024. 7. 4. 16:25
분할 정복(Divide and Conquer) 알고리즘이란?하위 문제들이 중복되지 않을 경우에 사용하는 알고리즘이다.알고리즘의 기본 아이디어는 복잡한 문제를 더 작고 다루기 쉬운 하위 문제로 나누고, 각각을 독립적으로 해결한 다음, 그 해결 결과를 합쳐 전체 문제의 최적 해를 도출하는 것입니다. 시간복잡도분할 정복(Divide and Conquer) 알고리즘의 시간복잡도는 문제를 어떻게 분할하고 정복하는지에 따라 달라진다. 일반적인 계산을 위해 사용되는 방법은 재귀식을 통해 시간복잡도를 표현하는 것이다. 이는 문제의 크기를 줄여가면서 하위 문제의 수와 각 하위 문제를 해결하는 데 걸리는 시간을 고려한다. 이진 탐색(Binary Search):분할: 배열을 반으로 나눔.정복: 한 쪽 반을 선택하여 탐색을..