생각나는 대로 올리겠슴니다
출처 : 서울특별시교육청 출간 고등교과 <알고리즘>, 위키백과
동적 계획법(DP : Dynamic Programming)
문제를 해결하기 위해 문제를 해결이 가능한 더 작은 문제로 분할함. 그런 다음 작은 문제를 먼저 해결하고 그 결과를 활용하여 전체 문제를 해결하는 방법.
> 메모이제이션(Memoization)
컴퓨터 프로그램이 동일한 계산을 반복해야 할 때, 이전에 계산한 이전에 계산한 값을 메모리에 저장함으로써 동일한 계산의 반복 수행을 제거하여 프로그램 실행 속도를 빠르게 하는 기술.
ex) fiboncci 수열을 구하는 함수 fib(n)이 있을 때, 여러 번 함수를 수행할 경우 같은 인자값에 대해 반복함. 실행시간 단축을 위해 따로 저장공간을 두어 fib(n)을 계산할때마다 그 저장공간에 저장하고 필요할때 마다 참조.
활용 : 검색, 소스 코드 생성, 암호화 또는 데이터 압축 영상 변환과 같은 반복 계산 ..
https://ko.wikipedia.org/wiki/%EB%A9%94%EB%AA%A8%EC%9D%B4%EC%A0%9C%EC%9D%B4%EC%85%98
> Top down(하향식) vs Bottom up(상향식)
문제를 여러 작은 부분으로 분할하는 형식의 Top down(=분할 정복)
제일 작은 부분부터 해결해 나가면서 큰 부분을 해결하는 형식의 Bottom up(=동적 프로그래밍)
욕심쟁이 알고리즘(그리디 알고리즘 : Greedy Algorithm)
현재의 상태에서 가장 좋다고 판단되는 것부터 선택하여 나가는 방법. 때로는 그리디 알고리즘이 가장 효율적이고 간단할 때가 있기 때문에 알고리즘이 항상 최적인 해답을 주는지 확인이 필요함.
역추적 기법(Back Tracking)
가능한 모든 방법을 빠짐없이 탐색하여 문제를 해결하는 방법. 이 기법은 데이터의 양이 조금만 늘어나도 실행시간이 엄청나게 늘어나기 때문에 불필요한 탐색을 하지 않기 위해 가지치기 전략을 구사하여 실행시간을 줄여야 함.
분할 정복(Divide and Conquer)
주어진 문제를 원래 문제와 같은 형태의 작은 문제들로 나누어 문제를 해결하는 기법. 나누어진 문제가 해결이 어렵다면 해결할 수 있을 만큼 더 작은 문제들로 나누어 해결하는 방식
그래프 탐색 방법
> DFS(Depth First Search, 깊이 우선 탐색)
> BFS(Breadth First Search, 너비 우선 탐색)
'Algorithm > 개념' 카테고리의 다른 글
이진 검색 트리(Binary Search Tree) (0) | 2018.03.22 |
---|---|
보간 검색(Interpolation Search) (0) | 2018.03.22 |
이진 검색(Binary Search) (0) | 2018.02.09 |
정렬(Sort) (0) | 2018.02.07 |