컴퓨터공학 💻/알고리즘
-
크루스칼 알고리즘 (Kruskal Algorithm) 크루스칼 알고리즘은 최소 비용 신장 트리(MST)를 만드는 데 사용되는 알고리즘입니다. 최소 비용 신장 트리란 가장 적은 최소한의 가중치(비용)로 모든 노드를 연결한 트리입니다. 즉, 여러 장소를 최소한의 비용으로 연결하고자 할 때 적용되는 알고리즘입니다. 우선 정점(노드) vertex과 간선 edge의 개념에 대해 알고 가야합니다. 그래프 자료구조에서 자세히 다루었으니 참고하시기 바랍니다. 알고리즘 원리 크루스칼 알고리즘의 동작 원리는 다음과 같습니다. 1. 최소 비용을 기준으로 간선을 오름차순 정렬 2. 사이클 확인 후 집합 생성 (사이클이면 사이클되는 간선을 배제함) 최소 비용 신장 트리의 경우 사이클이 생성되어서는 안됩니다. 사이클 여부는 유니..
[알고리즘] 크루스칼 알고리즘 (Kruskal Algorithm)크루스칼 알고리즘 (Kruskal Algorithm) 크루스칼 알고리즘은 최소 비용 신장 트리(MST)를 만드는 데 사용되는 알고리즘입니다. 최소 비용 신장 트리란 가장 적은 최소한의 가중치(비용)로 모든 노드를 연결한 트리입니다. 즉, 여러 장소를 최소한의 비용으로 연결하고자 할 때 적용되는 알고리즘입니다. 우선 정점(노드) vertex과 간선 edge의 개념에 대해 알고 가야합니다. 그래프 자료구조에서 자세히 다루었으니 참고하시기 바랍니다. 알고리즘 원리 크루스칼 알고리즘의 동작 원리는 다음과 같습니다. 1. 최소 비용을 기준으로 간선을 오름차순 정렬 2. 사이클 확인 후 집합 생성 (사이클이면 사이클되는 간선을 배제함) 최소 비용 신장 트리의 경우 사이클이 생성되어서는 안됩니다. 사이클 여부는 유니..
2021.07.10 -
합집합 찾기 알고리즘 (Union-Find) 서로소 집합(Disjoint-Set)이라고도 불리는 유니온 파인드는 서로 아무런 연결성도 없는 두 원소를 선택하여 그것들이 서로 같은 집합 내에 연결되어 있는 지 연결성을 확인하는 알고리즘입니다. 알고리즘 원리 위와 같이 6개의 아무런 연결성 없는 원소들이 존재할 때 각각의 원소들은 자기 자신의 집합에 속해있습니다. 원소 1은 집합 1에 속해있으며 원소 4는 집합 4에 속해있는 것입니다. 원소 1과 2를 연결하게 되면 이 둘을 Union 한 것이며 일반적으로 값이 더 작은 쪽으로 집합을 합치게 됩니다. 즉 원소 1과 2는 모두 집합 1에 속하게 되는 것입니다. 위 원리대로 볼 때 원소 2와 3을 연결하게 되면 원소 3은 집합 2에 속해야 할 것입니다. 하지만 ..
[알고리즘] 합집합 찾기 알고리즘 (Union-Find)합집합 찾기 알고리즘 (Union-Find) 서로소 집합(Disjoint-Set)이라고도 불리는 유니온 파인드는 서로 아무런 연결성도 없는 두 원소를 선택하여 그것들이 서로 같은 집합 내에 연결되어 있는 지 연결성을 확인하는 알고리즘입니다. 알고리즘 원리 위와 같이 6개의 아무런 연결성 없는 원소들이 존재할 때 각각의 원소들은 자기 자신의 집합에 속해있습니다. 원소 1은 집합 1에 속해있으며 원소 4는 집합 4에 속해있는 것입니다. 원소 1과 2를 연결하게 되면 이 둘을 Union 한 것이며 일반적으로 값이 더 작은 쪽으로 집합을 합치게 됩니다. 즉 원소 1과 2는 모두 집합 1에 속하게 되는 것입니다. 위 원리대로 볼 때 원소 2와 3을 연결하게 되면 원소 3은 집합 2에 속해야 할 것입니다. 하지만 ..
2021.07.10 -
DFS 알고리즘 (Depth First Search) 깊이 우선 탐색(DFS)은 BFS와 달리 스택 자료구조를 사용하여 깊이를 우선적으로 탐색하는 알고리즘입니다. 또한 재귀적 함수로도 구현이 가능합니다. 위와 같은 이진 트리에 대하여 깊이 우선 탐색을 해보겠습니다. 깊이 우선 탐색은 기본적으로 노드를 스택에 넣고 인접한 노드 중 방문하지 않은 노드를 스택에 넣고 방문이 완료되었으면 다시 방문하지 않은 노드를 찾아서 스택에 넣는 방식입니다. 가장 먼저 방문하는 노드 1을 스택에 넣고 방문 완료(visited)합니다. 스택은 큐와 달리 나중에 들어온 것이 먼저 나가는 후입선출 방식입니다. 인접해있던 노드 2를 스택에 넣고 방문 완료합니다. 위 과정을 통해 노드 7까지 스택에 삽입되었다면 노드 7, 6, 3은..
[알고리즘] 깊이 우선 탐색 DFS 알고리즘 (Depth First Search)DFS 알고리즘 (Depth First Search) 깊이 우선 탐색(DFS)은 BFS와 달리 스택 자료구조를 사용하여 깊이를 우선적으로 탐색하는 알고리즘입니다. 또한 재귀적 함수로도 구현이 가능합니다. 위와 같은 이진 트리에 대하여 깊이 우선 탐색을 해보겠습니다. 깊이 우선 탐색은 기본적으로 노드를 스택에 넣고 인접한 노드 중 방문하지 않은 노드를 스택에 넣고 방문이 완료되었으면 다시 방문하지 않은 노드를 찾아서 스택에 넣는 방식입니다. 가장 먼저 방문하는 노드 1을 스택에 넣고 방문 완료(visited)합니다. 스택은 큐와 달리 나중에 들어온 것이 먼저 나가는 후입선출 방식입니다. 인접해있던 노드 2를 스택에 넣고 방문 완료합니다. 위 과정을 통해 노드 7까지 스택에 삽입되었다면 노드 7, 6, 3은..
2021.07.09 -
BFS 알고리즘 (Breath First Search) 너비 우선 탐색 (BFS)은 큐 자료구조를 사용하여 너비를 우선적으로 탐색하는 탐색 알고리즘입니다. 흔히 최단 경로를 파악하여 최단 길이를 찾아낼 때 활용합니다. 순회의 순서로만 보면 이진 트리의 레벨 순회와 유사한 방식입니다. 위와 같은 이진 트리에 대하여 너비 우선 탐색을 해보겠습니다. 너비 우선 탐색은 기본적으로 '노드를 큐에넣고 -> 꺼내서 출력하고 -> 인접한 노드를 큐에넣고' 를 반복하는 알고리즘입니다. 가장 먼저 방문하는 노드1을 큐에 넣고 방문 완료(visited)합니다. 큐에 들어있던 1을 꺼내서 출력하고 인접해있던 노드 2와 3을 큐에 넣고 방문 완료합니다. 큐에서 먼저들어온 2를 꺼내서 출력하고 인접해있던 노드 4와 5를 큐에 넣..
[알고리즘] 너비 우선 탐색 BFS 알고리즘 (Breath First Search)BFS 알고리즘 (Breath First Search) 너비 우선 탐색 (BFS)은 큐 자료구조를 사용하여 너비를 우선적으로 탐색하는 탐색 알고리즘입니다. 흔히 최단 경로를 파악하여 최단 길이를 찾아낼 때 활용합니다. 순회의 순서로만 보면 이진 트리의 레벨 순회와 유사한 방식입니다. 위와 같은 이진 트리에 대하여 너비 우선 탐색을 해보겠습니다. 너비 우선 탐색은 기본적으로 '노드를 큐에넣고 -> 꺼내서 출력하고 -> 인접한 노드를 큐에넣고' 를 반복하는 알고리즘입니다. 가장 먼저 방문하는 노드1을 큐에 넣고 방문 완료(visited)합니다. 큐에 들어있던 1을 꺼내서 출력하고 인접해있던 노드 2와 3을 큐에 넣고 방문 완료합니다. 큐에서 먼저들어온 2를 꺼내서 출력하고 인접해있던 노드 4와 5를 큐에 넣..
2021.07.09 -
계수 정렬 알고리즘 (Counting Sort) 계수 정렬은 반드시 어떠한 범위안에 존재하는 데이터들로 이루어진 데이터 배열에 한하여 데이터의 크기를 기준으로 카운트하여 정렬하는 알고리즘입니다. 쉽게 말해 기준이 크기 5이하인 데이터 배열로 정수 1, 4, 4, 2, 3 가 들어있다면 크기가 1인 것은 1개, 크기가 2인 것은 1개, 크기가 3인 것은 1개, 크기가 4인 것은 2개로 카운트하여 크기가 작은 순, 혹은 큰 순으로 정렬합니다. 1 4 5 2 2 4 1 3 5 3 위와 같은 수가 있을 때 수들을 오름차순으로 계수 정렬을 해보겠습니다. 1 4 5 2 2 4 1 3 5 3 크기1 | 1 크기2 | 0 크기3 | 0 크기4 | 0 크기5 | 0 1 4 5 2 2 4 1 3 5 3 크기1 | 1 크기..
[알고리즘] 계수 정렬 알고리즘 (Counting Sort)계수 정렬 알고리즘 (Counting Sort) 계수 정렬은 반드시 어떠한 범위안에 존재하는 데이터들로 이루어진 데이터 배열에 한하여 데이터의 크기를 기준으로 카운트하여 정렬하는 알고리즘입니다. 쉽게 말해 기준이 크기 5이하인 데이터 배열로 정수 1, 4, 4, 2, 3 가 들어있다면 크기가 1인 것은 1개, 크기가 2인 것은 1개, 크기가 3인 것은 1개, 크기가 4인 것은 2개로 카운트하여 크기가 작은 순, 혹은 큰 순으로 정렬합니다. 1 4 5 2 2 4 1 3 5 3 위와 같은 수가 있을 때 수들을 오름차순으로 계수 정렬을 해보겠습니다. 1 4 5 2 2 4 1 3 5 3 크기1 | 1 크기2 | 0 크기3 | 0 크기4 | 0 크기5 | 0 1 4 5 2 2 4 1 3 5 3 크기1 | 1 크기..
2021.07.08 -
힙 정렬 (Heap Sort) 힙은 완전 이진트리 기반의 트리형 자료구조로써 최댓값이나 최솟값을 찾아내기 위해 사용됩니다. 힙에는 최대 힙과 최소 힙이 존재합니다. 최대 힙은 부모 노드의 키가 자식 노드의 키보다 같거나 큰 완전 이진 트리이며 최소 힙은 자식 노드의 키가 부모 노드의 키보다 같거나 큰 완전 이진 트리입니다. 힙 구조 생성과 최대 힙 연산에 관해서는 아래 포스팅에서 자세히 설명하였으니 참고하시기 바랍니다. https://yjg-lab.tistory.com/143?category=932096 [자료구조] 우선순위 큐 (priority queue), 히프의 삽입과 삭제 우선순위 큐 (priority queue) 우선순위 큐는 우선순위를 가진 항목들을 저장하는 큐입니다. 일반적으로 큐는 선입선출..
[알고리즘] 힙 정렬 알고리즘 (Heap Sort)힙 정렬 (Heap Sort) 힙은 완전 이진트리 기반의 트리형 자료구조로써 최댓값이나 최솟값을 찾아내기 위해 사용됩니다. 힙에는 최대 힙과 최소 힙이 존재합니다. 최대 힙은 부모 노드의 키가 자식 노드의 키보다 같거나 큰 완전 이진 트리이며 최소 힙은 자식 노드의 키가 부모 노드의 키보다 같거나 큰 완전 이진 트리입니다. 힙 구조 생성과 최대 힙 연산에 관해서는 아래 포스팅에서 자세히 설명하였으니 참고하시기 바랍니다. https://yjg-lab.tistory.com/143?category=932096 [자료구조] 우선순위 큐 (priority queue), 히프의 삽입과 삭제 우선순위 큐 (priority queue) 우선순위 큐는 우선순위를 가진 항목들을 저장하는 큐입니다. 일반적으로 큐는 선입선출..
2021.07.07