본문 바로가기

반응형

Algorithm/Concept

(5)
[Algorithm] 다익스트라(dijkstra) 알고리즘 다익스트라 알고리즘 다익스트라 알고리즘은, 모든 간선의 weight가 0이상 일 때 사용가능한 알고리즘으로, 특정 vertex를 출발점으로 하여 모든 vertex까지의 최소 거리를 구하는 알고리즘입니다. 알고리즘의 동작 원리는, "매 단계마다, 도달할 수 있는 정점 중에서 시작점으로부터 거리가 가장 가까운 정점을 확정해 나가는 방식입니다. weight가 작은 노드부터 계속 가지고와야 하다보니, 다익스트라 알고리즘은 일반적으로 PriorityQueue를 사용하여 구현합니다. 최솟값을 가진 노드를 찾기 위해 일반 배열의 경우 복잡도가 O(n)이지만, PriorityQueue의 경우에는 O(log n)입니다. 구현 - 노드 정의 package baek1753; import java.io.BufferedRead..
[Algorithm/Concept] Dynamic Programming 공부 자료 바킹독 블로그 [실전 알고리즘] 0x10강 - 다이나믹 프로그래밍 다이나믹 프로그래밍(Dynamic Programming, DP) 여러 개의 하위 문제를 푼 후, 그 결과를 쌓아올려 주어진 문제를 해결하는 알고리즘 문제를 해결하기 위한 점화식을 찾아낸 후, 점화식의 항을 밑에서부터 차례로 구해나가서 답을 알아내는 형태의 알고리즘 가장 유명한 예: 피보나치 수열 DP를 푸는 과정 테이블 정의하기 점화식 찾기 초기값 정하기 BOJ 1463번: 1로 만들기 import java.util.Scanner; public class Main { static int d[]; public static void main(String[] args) throws Exception { Scanner sc = new ..
분할 정복을 이용한 거듭 제곱 예를 들어 3^5 = 3x3x3x3x3로 5번의 반복이 있어야한다. 즉 n 거듭 제곱을 위해선 시간 복잡도가 O(n)이어야 한다. 하지만, 분할 정복을 이용하면 O(logn)으로 값을 얻을 수 있다. C^n = C^(n/2) * C^(n/2) (if n % 2 == 0) C^((n-1)/2) * C^((n-1)/2) else 이러한 방법을 사용해야 하는 알고리즘 문제들의 특징은 n > 10^7이상일 때다. 파이썬 기준, 1초에 10^7번의 작업이 가능하다. 만약 n이 이보다 높다면, O(n)으로 해결할 수 없어, 분할 정복을 이용한 거듭 제곱을 활용해야 할 가능성이 높다. 참고 문제 https://www.acmicpc.net/problem/11444 11444번: 피보나치 수 6 첫째 줄에 n이 주어진다..
Python - itertools 알고리즘에서 사용되는 iteration 기능들 1. permutations(iteration,k) iteration에서 k개를 뽑아 순열을 반환해줍니다. 2. combinations(iteration,k) iteration에서 k개를 뽑아 조합을 반환해줍니다. 3. combinations_with_replacement(iteration,k) iteration에서 k개를 뽑아 중복조합을 반환해줍니다. 4. product(iterationA,iterationB) 두 개의 iteration에 대한 데카르트 곱을 반환해줍니다. # 백준 관련 문제들 https://www.acmicpc.net/problem/15657
그래프 이론 - 플로이드워셜 알고리즘 나무위키를 기반으로 정리하였습니다. 플로이드 워셜을 그래프에서 가능한 모든 노드 쌍에 대한 최단 거리를 구하는 알고리즘입니다. data[a][b] = min(data[a][b], data[a][k]+data[k][b]) 가 핵심코드입니다. a-> b 로 바로 가는게 더 빠르냐 a->k->b 로 k를 거쳐서 가는게 더 빠르냐 더 빠른 놈으로 data[a][b]를 업데이트해라. 내가 헷갈렸던 부분은, D(2,3) = min(D(2,3),D(2,1)+D(1,3))이라고 하자. 이때 k는 1이다. 만약 D(2,1) 의 최소가 D(2,5)+D(5,1)이라면, 최적이 되는가? 였다. 이에 대한 답은 아래와 같다. 2->5->3이서 최솟값이 되는 과정은 (2->5->1)->3 순이 아니라 2-> ( 5->1->3) ..

반응형