algorithm 5

[Algorithm/Python] MST(최소 신장 트리) 알고리즘 + 크루스칼(Kruskal), 프림(Prim) 알고리즘 정리

신장 트리(Spanning Tree)란?하나의 그래프가 있을 때 모든 노드를 포함하면서 사이클이 존재하지 않는 부분 그래프를 의미 1. 모든 정점을 포함해야 한다.2. 연결 그래프이자 부분 그래프여야 한다.3. 사이클이 존재하지 않아야 한다. 최소 비용 신장 트리(Minimum Cost Spanning Tree)란?그래프에서 모든 노드를 연결할 때 간선의 가중치 합이 최소가 되는 경우의 신장 트리 최소 비용 신장 트리에는 대표적으로 크루스칼 알고리즘과 프림 알고리즘이 존재한다. 크루스칼 알고리즘(Kruskal Algorithm)그리디 알고리즘을 통해 최소 신장 트리를 구하는 알고리즘이다.간선 데이터를 비용에 따라 오름차순으로 정렬한다.간선을 하나씩 확인하며 현재의 간선이 사이클을 발생시키는지 확인한다.사..

[Algorithm/Python] Disjoint Set(서로소 집합)이란? Union-Find 알고리즘 정리

서로소 집합(Disjoint Set)이란?서로 중복되지 않는 부분(서로소) 집합. 서로 다른 원소들이 같은 집합에 속해 있는지 여부를 확인하는데 사용. 이 서로소 집합을 나타내기 위해 사용되는 알고리즘으로 Union-Find 알고리즘이 있다. Union-Find 알고리즘각 그룹을 트리의 형태로 표현. 각 트리는 항상 최상위 노드인 루트 노드를 가진다.이 루트 노드를 가지고 그룹을 판별한다.(root 노드는 자신을 부모 노드로 설정) union 연산을 확인하며, 서로 연결된 두 노드 A, B를 확인한다.A와 B의 루트 노드를 각각 찾는다.A의 루트 노드를 B의 부모 노드로 설정한다.모든 union 연산 처리할 때까지 이전 과정을 반복한다. Find어떤 노드가 주어졌을 때 이 노드가 속한 집합의 root 노..

[Algorithm/Python] 다익스트라(Dijkstra) 알고리즘 정리

다익스트라 최단 경로 알고리즘그래프에서 여러 개의 노드가 있을 때, 특정한 노드에서 출발하여 다른 노드로 가는 각각의 최단 경로를 구해주는 알고리즘.음의 간선이 없을 때 정상적으로 동작.기본적으로 그리디 알고리즘으로 분류된다. => 매번 각 노드에 대한 현재까지의 최단 거리를 갱신하기 때문! 알고리즘 원리 과정1. 출발 노드를 설정한다.2. 최단 거리 테이블을 초기화한다.(무한으로)3. 방문하지 않은 노드 중에서 최단 거리가 가장 짧은 노드를 선택한다.4. 해당 노드를 거쳐 다른 노드로 가는 비용을 계산하여 최단 거리 테이블을 갱신한다.5. 위 과정에서 3과 4번을 반복한다. 각 노드에 대한 현재까지의 최단 거리를 1차원 리스트(최단 거리 테이블)에 계속 갱신한다는 특징이 있다. 힙 자료구조의 우선순위 ..

[Algorithm/Python] 다이나믹 프로그래밍 알고리즘 정리

DP(Dynamic Programming)는 연산 속도와 메모리 공간을 최대한 효율적으로 활용할 수 있게 해주는 알고리즘이다. 대표적인 예시 : 피보나치 수열 피보나치 수열을 점화식으로 표현하면 다음과 같다.프로그래밍에서는 이러한 수열을 배열이나 리스트로 표현(+ dict 자료형)# 피보나치 함수(Fibonacci Function)를 재귀 함수로 구현def fibo(x): if x == 1 or ×= = 2: return 1 return fibo(x - 1) + fibo(x - 2)print(fibo(4)) 하지만 위 코드는 n이 커지면 수행 시간이 기하급수적으로 늘어나는 문제가 발생한다.메모이제이션 기법을 사용해서 한 번 구현한 결과를 메모리 공간에 메모해두고 같은 식을 다시 호출하면 메..

[Algorithm/Python] 투 포인터(Two Pointers) 알고리즘 정리

투 포인터 알고리즘은 리스트에 순차적으로 접근해야 할 때 두 개의 점의 위치를 기록하면서 처리하는 알고리즘을 의미한다.리스트에 담긴 데이터에 순차적으로 접근해야 할 때, 시작점(start)과 끝점(end) 2개의 점으로 접근할 데이터의 범위를 표현할 수 있다. 특정한 합을 가지는 부분 연속 수열 찾기- N개의 자연수로 구성된 수열이 있다.- 합이 M인 부분 연속 수열의 개수를 구해보자.- 수행 시간 제한은 O(N)이다.  위 문제는 투 포인터를 활용하여 다음과 같은 알고리즘으로 문제를 해결할 수 있다. 1. 시작점(start)과 끝점(end)이 첫 번째 원소의 인덱스(0)를 가리키도록 한다.2. 현재 부분 합이 M과 같다면, 카운트한다.3. 현재 부분 합이 M보다 작다면, end를 1 증가시킨다.4. 모..