문제가 주어졌을 때 올바른 방법으로 접근하는 것이 중요하다. 주요 방법론을 정확하게 이해하고 관련된 문제들을 많이 풀어보는 것이 좋다.
- Input : Size n array A
- A 에서 가장 큰 element 와 작은 element 찾기 : Complete Search - O(n)
- A 에서 k 번째로 작은 element 찾기 : Divide and Conquer - O(n log n)
- A의 두 element x 와 y에 대해 |x-y|의 최대값 구하기 : Greedu - O(n)
- A의 LIS 구하기 : DP - O(n6=^2) or Binary Search + DP - O(n log n)
Complete Search
전체 혹은 일부 가능한 탐색 공간을 하나 하나 살펴봄으로써 원하는 답을 찾는 방법
ex) 8 Queens Chess Problem(Uva 750)
: 8x8 체스판에 퀸 8개를 서로 공격할 수 없도록 하는 모든 배치를 구하기
-좌표 (a, b) - a번째 row, b번째 columnn 에는 반드시 queen 이 위치해야함
방법1 : 64개의 칸에 가능한 8개의 퀸을 모두 배치하기 -> 40억개 경우의수
방법2 : 하나의 퀸이 하나의 column 에만 들어갈 수 있다는 사실 -> 1700만개 경우의 수
방법3 : 같은 row에도 두 퀸이 존재할 수 없다는 사실을 이용 - 퀸이 (j, i) 에 있는 경우 row[i] = j 위 예시의 경우 row = {2, 4, 6, 8, 3, 1, 5}.
Row array 는 permutation 이므로 8! ~ 40000으로 줄어든다
방법4 : 방법 3에서 불가능한 조건을 좀 더 pruning
-위치 (i, j)와 (x, y) 에 두 퀸이 있다고 하자.
- 이 때, |i-x| = |j-y| 인 경우 두 퀸은 같이 존재할 수 없다.( 대각선으로 만나기 때문애)
- 즉 위 제약조건을 만족하는 해들 중에서 row[b] = a 인 해를 출력하면 됨
ex) Rat Attack_ Uva 10360
모든 가능한 위치에 폭탄 설치해보기_ 약 26억번이므로 TLE 가능성 농후
=> Complete Search 를 거꾸로 생각가능
killed[1025][1025] array 를 만든다음 , 쥐의 위치와 마리수 정보 (x,y,p) 얻는 대로 |i-x| <= d, |j-y| <= d 를 만족하는 모든 killed[i][j] 에 p를 더한다. 이 후 killed array 의 최대값과 index를 출력하면 됨. 사전작업에 O(nd^2)
Divide and Conquer
: 탐색 공간의 전체를 살펴봄으로써 원하는 답을 찾는 방법
1. 주어진 문제를 작은 단위(subproblem) 으로 쪼갠다. 이 때 subproblem 은 본 문제와 같지만 input size 가 작은 문제를 뜻한다.
2. 1번에서나눈 subproblem 들을 recursion 이용하여 해결한다.
3. 2번에서 푼 subproblem 들의 답을 적절하게 조합하여 본 문제의 답을 제시한다.
ex) Merge Sort, Quick Sort, Binary Search
ex) Uva10341_Solve it
=> Binary Search 를 통해 0.0과 1.0 사이의 모든 숫자들에 대해 해가 있는지 여부 검색한다.
Bit-Parallel Algorithms
: 반복문 등을 비트 연산자를 이용한 연산으로 변형하여 수행하는 기법
ex) hamming Distance : 길이가 같은 두 bit string a, b가 있을 때, a와 b 사이의 hamming distance 는 a와 b의 symbol이 일치하지 않는 위치의 개수이다.
hamming (01101, 11001) = 2
'알고리즘' 카테고리의 다른 글
[알고리즘 #8] Graph Algorithms(3) (1) | 2023.04.27 |
---|---|
[알고리즘 #5] Problem Solving Paradigms(2) (0) | 2023.04.19 |
[알고리즘 #1] Introduction (0) | 2023.04.18 |
[알고리즘 #7] Graph Algorithm (2) (0) | 2023.04.13 |
[알고리즘 #3] Sorting, Searching, Data Structures(2) (0) | 2023.04.11 |