![article thumbnail image](https://blog.kakaocdn.net/dn/dDEN81/btqDxJUFotl/ZVjlisdk2GbWOLKEDsKs40/img.png)
2.7 Determining Thresholds
threshold 란? : 단순한 알고리즘보다 Strassen의 알고리즘을 사용하는 편이 더 좋을 것이라고 예상되는 지점
n-1 : merge할 때 걸리는 시간.
실험을 통해 알아내야 한다.
merge 알고리즘을 만든 다음에 넣어봐야 아는 것이다.
merge 할 때 시간 복잡도가 32 n 이라면
시간복잡도가 32n logn 는 merge sort 알고리즘 시간복잡도 이고
exchange sort 했을 때 n(n-1)/2 이다.
exchange sort 실행 시간 < merge sort 실행 시간인 지점을 봐보자.
이 부등식의 의미는 n=1 이 될 때까지 한 것.
등식보다 ≥ 부등식으로 풀어야 한다.
현재 배열의 사이즈 = t 개
t개의 원소를 t/2로 나눠서 각각을 exchange sorting 한 다음에 merge한 것 ≥ t개를 exchange sort 한 것
t가 짝수인 경우 128
t가 127이 되면 exchange sort 하는게 더 빠르다.
t가 홀수일 때
t/2의 floor = (t-1)/2
t/2의 ceiling = (t+1)/2
따라서 128이 안되면 merge sort 보단 그냥 exchange sort 하는게 좋다.
lager integer multiplication에서 나온다.
이것의 optimal threshold를 구해보자.
t자리일 때 standard 알고리즘의 시간복잡도는 t^2이다.
t/2로 나눠서 걸리는 시간복잡도 좌항.
짝수일 때 t ≤ 64
홀수일 때 t ≤ 70.04
이때는 짝수일 때와 홀수일 때가 차이가 난다.
standard 일 때 걸리는 시간 , 두개로 나눠서 standard 곱셈을 한 다음에 결합했을 때 걸리는 시간
자리수가 짝수인 경우 64보다 작으면 divide 하지 않고 standard로 곱하는게 더 빠르다.
자리수가 홀수인 경우 70보다 작으면 divide 하지 않고 standard로 곱하는게 더 빠르다.
자리수가 홀수인 경우 71인 경우에는 divide 하는 것이 더 빠르다. 69인 경우에는 standard로 곱하는 것이 더 빠르다.
'🕶 Algorithm > 알고리즘' 카테고리의 다른 글
Dynamic Programming - Floyd's Algorithm (0) | 2020.04.21 |
---|---|
Dynamic Programming - The Binomial Coefficient (0) | 2020.04.21 |
Multiplication of Large Integers (아주 큰 정수의 곱셈) (0) | 2020.04.18 |
Strassen Algorithm (0) | 2020.04.17 |
Divide-and-Conquer (part5) (0) | 2020.04.08 |