728x90
반응형

Algorithm 7

[알고리즘] 크루스칼 알고리즘 (Kruskal Algorithm)

신장 트리 (Spanning Tree) 그래프에서 모든 노드를 포함하면서 사이클이 존재하지 않는 부분 그래프를 의미한다. 모든 노드가 포함되어 서로 연결되면서 사이클이 존재하지 않는다는 조건은 트리의 조건이기도 하다. 신장 트리 사용 목적 모든 노드가 연결되어 있지만 일부 간선을 사용하지 않아도 된다는 점에서 실제 문제 상황에서 효과적으로 사용될 수 있다. 최소 신장 트리 (MST, Minimum Spanning Tree) 최소한의 비용으로 구성되는 신장 트리를 찾아야 할 때 어떻게 해야 할까요? 예를 들어 N개의 도시가 존재하는 상황에서 두 도시 사이에 도로를 놓아 전체 도시가 서로 연결될 수 있게 도로를 설치하는 경우를 생각해 봅시다. 두 도시 A, B를 선택했을 때 A에서 B로 이동하는 경로가 반드..

Algorithm 2023.12.14

[알고리즘] 서로소 집합 (Disjoint Sets) - 사이클 판별

서로소 집합을 활용한 사이클 판별 서로소 집합은 무방향 그래프 내에서의 사이클을 판별할 때 사용할 수 있습니다. 참고로 방향 그래프에서의 사이클 여부는 DFS를 이용하여 판별할 수 있습니다. 1. 사이클 판별 알고리즘 각 간선을 하나씩 확인하며 두 노드의 루트 노드를 확인합니다. 루트 노드가 서로 다르다면 두 노드에 대하여 합집합(Union) 연산을 수행합니다. 루트 노드가 서로 같다면 사이클(Cycle)이 발생한 것입니다. 그래프에 포함되어 있는 모든 간선에 대하여 1번 과정을 반복합니다. 2. 동작 과정 살펴보기 3. 서로소 집합을 활용한 사이클 판별 (코드) 1) 서로소 집합을 활용한 사이클 판별 (Python) # 특정 원소가 속한 집합을 찾기 def find_parent(parent, x): #..

Algorithm 2023.12.10

[알고리즘] 서로소 집합 (Disjoint Sets) - 자료구조

그래프 그래프(Graph)란 노드와 노드 사이에 연결된 간선의 정보를 가지고 있는 자료구조를 의미한다. 서로소 집합 서로소 집합(Disjoint Sets)이란 공통 원소가 없는 두 집합을 의미한다. 서로소 집합 자료구조 서로소 부분 집합들로 나누어진 원소들의 데이터를 처리하기 위한 자료구조이다. 서로소 집합 자료구조는 두 종류의 연산을 지원한다. 합집합(Union): 두 개의 원소가 포함된 집합을 하나의 집합으로 합치는 연산이다. 찾기(Find): 특정한 원소가 속한 집합이 어떤 집합인지 알려주는 연산이다. 서로소 집합 자료구조는 합치기 찾기(Union Find) 자료구조라고 불리기도 한다. 1. 여러 개의 합치기 연산이 주어졌을 때 서로소 집합 자료구조의 동작 과정 합집합(Union) 연산을 확인하여,..

Algorithm 2023.12.09

[알고리즘] 최장 증가 부분 수열(LIS) 알고리즘

최장 증가 부분 수열(Longest Increasing Subsequence)이란? 원소개 n개인 배열의 일부 원소를 골라내서 만든 부분 수열 중, 각 원소가 이전 원소보다 크다는 조건을 만족하고, 그 길이가 최대인 부분 수열을 최장 증가 부분 수열이라고 한다. 간단히 말해, 가장 긴 증가하는 부분 수열이다. 예시 [6, 2, 5, 1, 7, 4, 8, 3] 이라는 배열에서 최장 증가 부분 수열(LIS)은 [2, 5, 7, 8]이 된다. [2, 5, 7], [2, 4, 8] 등 증가하는 부분 수열은 많지만 그 중에서 가장 긴 것은 [2, 5, 7, 8]이다. 최장 증가 부분 수열 알고리즘 풀이 방법 최장 증가 부분 수열의 길이를 구할 수 있는 풀이 방법은 크게 2가지가 있다. 동적계획법 (DP, Dyna..

Algorithm 2023.09.01

[알고리즘] 에라토스테네스의 체 (소수 판별)

소수 (Prime Number) 1보다 큰 자연수 중에서 1과 자기 자신을 제외한 자연수로는 나누어 떨어지지 않는 자연수 6은 1, 2, 3, 6으로 나누어 떨어지므로 소수가 아니다. 7은 1과 7을 제외하고는 나누어 떨어지지 않으므로 소수이다. 소수의 판별: 기본적인 알고리즘 1. 기본적인 알고리즘 소스 코드- 파이썬 (Python) # 소수 판별 함수 (2이상의 자연수에 대하여) def is_prime_number(x): # 2부터 (x - 1)까지의 모든 수를 확인하며 for i in range(2, x): # x가 해당 수로 나누어 떨어진다면 if x % i == 0: return False # 소수가 아니다. # 나누어 떨어지는 수가 하나도 존재하지 않는다면 return True # 소수이다. ..

Algorithm 2023.08.25

[알고리즘] 이진 탐색 / 이분 탐색 (Binary Search)

이진 탐색은 정렬된 리스트에 적용할 수 있는 간단한 고속 탐색 기법이며, 이분 탐색이라고도 불린다. 순차 탐색 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 확인하는 방법이다. 이진 탐색 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법이다. 이진 탐색은 시작점, 끝점, 중간점을 이용하여 탐색 범위를 설정한다. 이진 탐색 (이분 탐색) 알고리즘 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법이다. 배열 내부의 데이터가 정렬되어 있어야만 사용할 수 있는 알고리즘이다. 시작점, 끝점, 중간점(start, end, mid) 변수 3개를 사용하여 탐색한다. 찾으려는 데이터와 중간점 위치에 있는 데이터를 반복적으로 비교해서 원하는 데..

Algorithm 2023.08.17

[알고리즘] 시간 복잡도 (Time Complexity)

시간 복잡도 (Time Complexity) 문제를 해결하기 위한 알고리즘의 로직을 코드로 구현할 때, 입력값의 변화에 따라 연산을 실행할 때, 연산 횟수에 비해 시간이 얼만큼 걸리는가? 즉, 특정 알고리즘이 어떤 문제를 해결하는데 걸리는 시간을 의미한다. 효율적인 알고리즘이란, 입력값이 커짐에 따라 증가하는 시간의 비율을 최소화한 알고리즘 을 구성했다는 것이다. 시간 복잡도는 주로 빅-오 표기법(Big-O)을 사용해 나타낸다. 일반적으로 수행 시간은 1억 번의 연산을 1초의 시간으로 간주하여 예측한다. 시간 복잡도 유형 시간 복잡도는 3가지 경우로 나타낸다. 최선의 경우 (Best Case) Big-Ω (빅-오메가) 빅 오메가 표기법 사용 최선의 시나리오로 최소 이만한 시간이 걸림 최악의 경우 (Wor..

Algorithm 2023.08.14
728x90
반응형