일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 코딩테스트준비
- js
- 항해99
- dbms
- sql
- 생성자
- 자바의정석
- DB
- jsp
- BFS
- spring
- 가상컴퓨팅
- Algorithm
- 알고리즘
- 개발자취업
- 코테
- 코딩테스트
- javascript
- dfs
- 99클럽
- 크루스칼
- Queue
- JPA
- python
- Java
- 자료구조
- generic class
- til
- 암호학
- 공개키 암호화
- Today
- Total
목록computer science/Algorithm | Datastructure (16)
PLOD
위상정렬위상정렬은 정렬 알고리즘의 일종이다. 이상 정렬은 순서가 정해져 있는 일련의 작업을 차례대로 수행해야 할 때 사용 할 수 있는 알고리즘이다. 즉, 위상정렬은 방향 그래프의 모든 노드를 방향성에 거스르지 않도록 순서대로 나열하는 것이다. 위상 정렬 알고리즘을 사용하기 위해서는 진입 차수(degree) 부터 알아야한다. 진입차수란 특정한 노드로 들어오는 간선의 개수를 의미한다. 진입차수를 이용하여 위상정렬을 하는 방법은 다음과 같다.1. 진입차수가 0인 노드를 queue에 넣는다.2. 큐가 빌 때까지 다음의 과정을 반복한다.Ⅰ. 큐에서 원소를 꺼내 해당 노드에서 출발하는 간선을 그래프에서 제거한다.Ⅱ. 새롭게 진입차숙 0이 된 노드를 queue에 넣는다.위상 정렬의 시간 복잡도는 O(V+E)이다. ..
MST하나의 그래프가 있을 때 모든 노드를 포함하면서 사이클이 존재하지 않는 부분 그래프를 의미한다. 이때 모든 노드가 포함되어 서로 연결되면서 사이클이 존재하지 않는다는 조건은 트리의 성립 조건이기도 하다. 최소 길이의 간선으로 모든 노드들을 연결해야 되는 문제가 나올 때 최소 신장 트리 알고리즘을 사용 할 수 있다.Kruskal Algorithm크루스칼 알고리즘은 대표 적인 최소 신장 트리 알고리즘이다. 크루스칼 알고리즘은 greedy algorithm(탐욕 기법)에 속한다. 먼저 모든 간선에 대하여 정렬을 수행한 뒤에 가장 거리가 짧은 간선부터 집합에 포함시키면 된다. Kruskal 알고리즘은 간선을 정렬하는데 시간이 가장 오래 걸리기 때문에 간선의 개수가 E 일때, O(ElogE)의 시간 복잡도..
리스트에 순차적으로 접근해야 할 때 두개의 점의 위치를 기혹하면서 처리하는 알고리즘이다. 정렬되어 있는 두 리스트의 합집합에도 사용됨, 병합정렬(merge sort)의 counquer(정복)영역의 기초가 되기도 한다.예제 문제 - 특정한 합을 가지는 부분 연속 수열 찾기투포인터 알고리즘의 대표적인 문제입니다.어떤 숫자들의 리스트가 주어질 때, 해당 리스트의 연속 수열의 합이 특정 값을 가지는 것을 확인하는 문제입니다.시작점과 끝점이 첫번째 원소의 인덱스를 가리키도록 한다.(start, end = 0,0)현재 부분 합이 M과 같다면 카운트한다. (if sum[start:end] == M)현재 부분 합이 M보다 작다면 end를 1 증가시킨다. (end += 1)현재 부분 합이 M보다 크거나 같다면 start..
완전탐색(Brute-force)완전탐색은 굉장히 단순한 아이디어이다. 답을 찾기 위해 모든 경우를 다 살펴 본다는 전략으로 확실하게 반드시 답을 찾을 수 있다는 장점이 있다. 그러나 모든 경우를 다 살펴 보므로 시간이 오래 걸린다는 게 단점이다. 아무리 컴퓨터의 연산 속도가 빠르다지만, 탐색 범위가 너무 넓거나 필요한 연산 수가 많다면 한참이 걸려도 답이 나오지 않는다. 백트래킹(Backtracking)원하는 정답을 찾기 위해 모든 경우를 골라보며 완전탐색을 하는 알고리즘이다. 백트래킹은 DFS,BFS와 같은 완전탐색 방식이지만, 진행 과정에서 답이 아닌 분기를 만나면 탐색을 진행하지 않고 돌아가 다른 분기로 감으로써 가지치기를 한다는 차이가 있다. 백트래킹은 DFS와 비슷하지만 전체를 탐색하는 깊이..
최단 경로최단 경로 알고리즘은 가장 짧은 경로를 찾는 알고리즘을 의미다양한 문제 상황한 지점에서 다른 모든 지점까지의 최단 경로 + 음의 간선 → 벨만-포드 알고리즘한 지점에서 다른 모든 지점까지의 최단 경로 → 다익스트라 알고리즘모든 지점에서 다른 모든 지점까지의 최단 경로 → 플로이드 워셜 알고리즘말 그대로 가장 짧은 경로를 찾는 알고리즘이다. (ex. 길찾기 문제) 최단 경로 문제는 보통 그래프를 이용해 표현하는데 각 지점은 그래프에서 노드로 표현되고 노드 간 연결된 선분은 간선으로 표현된다. Dijkstra Algorithm 다익스트라는 그래프에서 양의 가중치가 있는 한 노드에서 모든 경로까지의 최단 경로를 찾을 때 사용한다. 다익스트라 알고리즘은 기본적으로 그리디 알고리즘으로 분류된다. → ..
동적계획법컴퓨터는 굉장히 빠른 연산 속도를 장점으로 갖고 있기 때문에 인간이 풀기엔 오래걸리는 문제라도 컴퓨터로는 금방 답을 얻을 수 있다. 이 특징이 가장 두드러지는 방법이 완전탐색이다. 완전탐색은 범위가 작을 때는 시간,공간적으로는 괜찮았지만 범위가 10000000000 이상이라면 코딩테스트에서 시간 , 메모리 초과가 발생한다. 그래서 더 효율적인 알고리즘을 사용해서 풀어야 하는데 그 방법은 동적 계획법이다.예를 들면 , 6번째 피보나치 수를 구하려면 5번째와 4번째가 필요하다 5번째를 구하기 위해서는 4번째와 3번째가 필요하고... 이렇게 계속 반복하다 보면 0번째와 1번째 까지 오게 된다 . 이를 가지고 2번째 피보나치 수를 구할 수 있고 연쇄적으로 6번째 피보나치 수를 구할 수 있다. 피보나치..