1. 해시
- 각각 데이터를 고유한 숫자 값으로 표현하여 데이터의 존재 여부를 확인하거나 또는 원본 데이터를 추출하는 과정
- 빠른 자료 탐색 ( O(1) )
- 충돌 시, 체이닝( 연결 리스트 뒤에 연결 )과 오픈 어드레싱( 테이블의 빈 곳을 찾아(선형, 제곱) 저장 )을 사용
- C++은 체이닝 사용 ( std::unordered_set, std::unordered_map 체이닝 사용 시 multi를 사용)
2. 그래프
- 한붓 그리기, 오일러 경로
- 인접 행렬( O(N^2) )과 인접 리스트( O(N+M) )를 통해서 프로그래밍 표현 ( N : 정점, M : 에지 )
- 행렬은 그래프에 간선이 많이 존재하는 밀집 그래프일 경우, 리스트는 간선이 적은 희소 그래프일 경우 사용한다.
- 그래프 순회( DFS( 재귀함수, 스택 ), BFS( 큐 ) )
- DFS는 경로의 특징을 저장해둬야 하는 문제 BFS는 최단거리 구해야 하는 문제에 각각 유리하다.
3. 동적 계획법
- 복잡한 문제를 여러 개로 나눠서 해결하여 저장한 후, 그 값을 이용하여 전체 문제를 해결.
- 분할 정복법(ex.퀵 정렬)은 분할된 문제들이 겹치지 않지만 동적 계획법은 작은 문제가 큰 문제의 일부가 될 수 있다.
- 최적화 문제( 최적해를 구하여 전체 문제의 최적해를 구하는 경우 )와 카운팅 문제에 주로 사용한다.
- 메모이제이션(top-down) 방법과 타뷸레이션(bottom-up) 방법을 사용.
- 최소 비용 경로와 정수 삼각형 문제가 유명하다.
- 기저 위치와 탐색 범위를 조심하여 조건을 설정할 것
'Computer Science > Algorithm' 카테고리의 다른 글
[Algorithm] 코딩 테스트 대비 알고리즘 정리 (1/2) (0) | 2022.05.13 |
---|