본문 바로가기

Algorithm/알고리즘 설명14

[알고리즘] 플로이드 와샬 (Floyd-Warshall) 알고리즘 플로이드 와샬 (Floyd-Warshall) 유향 그래프에서 '모든 정점' → '모든 정점' 까지의 최단 경로를 구하는 알고리즘이다. 시간복잡도 : O(N ^ 3) , (N은 노드의 수) 삼중 반복문을 사용하기에 N의 크기가 상대적으로 적을 때 사용해야한다. 알고리즘 정점 i → 정점 j 까지의 최단 거리를 저장하는 dist[][] 배열을 둔다. dist 초기화 i == j : 0 i → j 까지의 간선이 존재한다면 dist[i][j] = w[i][j] i → j 까지의 간선이 존재한다면 dist[i][j] = INF (무한대) 삼중 반복문 실행 첫번째 반복문 k = 1 ~ N : 거쳐가는 정점 두번째 반복문 i = 1 ~ N : 시작점 세번째 반복문 j = 1 ~ N : 도착점 dist[i][j] = .. 2020. 10. 3.
[알고리즘] 다익스트라 (Dijkstra) 알고리즘 다익스트라 (Dijkstra) 모든 간선의 가중치가 '음이 아닌 경우' 의 유향 그래프 최단 경로 알고리즘 '한 정점' → '모든 정점' 까지의 최단 경로 구하기 우선순위 큐 사용O 시간복잡도 : O(E log V) 우선순위 큐 사용X 시간복잡도 : O(V ^ 2 + E) 정점 수 대비 간선의 수가 많은 경우 (간선 밀도가 높은 경우)에는 우선순위 큐를 사용하지 않는 경우가 더 빠르다. 모든 간선의 가중치가 같다면 BFS로 최단 경로를 구할 수 있지만 그렇지 않은 경우엔 다익스트라 사용 BFS 기반 그리디 알고리즘 (Greedy Algorithm) 알고리즘 시작점 start로부터의 정점들까지의 최단거리를 나타내는 dist 배열을 둔다. dist[start] = 0, 나머지는 무한대로 설정한다. queue.. 2020. 10. 2.
[알고리즘] 비트마스크 (BitMask) 비트마스크 (BitMask) 정수로 집합을 나타낼 수 있는 기법 비트마스크를 사용하는 이유 완전 탐색 시 재귀호출 없이 모든 경우를 살펴볼 수 있다. (브루트 포스) 집합을 배열의 인덱스로 표현 가능하다. → 메모리 절약 가능 상태가 다이나믹한 경우에 자주 사용한다. 연산 1. 포함 검사 '&' 사용 집합 S에 i가 포함되었는지 검사 : S & (1 2020. 9. 28.
[알고리즘] 정렬 (Sort) 1. 선택 정렬 (Selection Sort) $O(n^{2})$ 배열에서 가장 큰 원소를 찾아 배열의 끝자리에 있는 원소와 자리를 바꿈(swap) 나머지 원소들에 대해서도 반복 package com.company; public class Main { //원본 배열 (정렬x) static int A[] = {3,5,1,2,8,7,6,10,9,4}; static void selection_sort(int list[]) { //가장 큰 값 찾기 + swap 반복 for(int i=list.length-1;i>=0;i--) { int max_index = 0; int max = list[max_index]; //가장 큰 값 찾기 for(int j=0;j list[j+1]) { swap(list, j, j+1).. 2020. 9. 17.