2.6 Arithmetic with Large Integer
2.6.2 Multiplication of Large Integers
굉장히 큰 정수의 곱셈은 어떻게 할까?
배열로 표현 한다.
n자리 정수의 곱 시간복잡도는? n자리 정수 2개 곱셈 = O(n^2)
그럼 Divide and conquer로 시간복잡도를 낮춰보자.
n자리 정수를 절반으로 나눠서 계산하자
m은 n자리 정수를 2로 나눈 값이다.
u와 v 는 n자리 정수이다. >>> integer 타입이 아니라 배열이다.
if ( u 나 v 가 0이면 ) : 곱이 0이니까 0이고
else if ( threshold보다 작다면 ) : u와 v를 그냥 곱한다.
else :
m은 n을 2로 나눈 값이고
divide는 나눈 몫을 나타낸다. 이때 divde는 배열을 나누는 것이다. 그냥 나누는것이 아닌 구현해야하는 function이다.
rem은 나머지를 나타낸다.
Divide (x, u, m)
시간 복잡도 -> master theorem 이용하기
naive랑 똑같이 나온다...
다른코드 써보자
'🕶 Algorithm > 알고리즘' 카테고리의 다른 글
Dynamic Programming - The Binomial Coefficient (0) | 2020.04.21 |
---|---|
Determining Thresholds (0) | 2020.04.19 |
Strassen Algorithm (0) | 2020.04.17 |
Divide-and-Conquer (part5) (0) | 2020.04.08 |
Divide-and-Conquer (part4) (0) | 2020.04.02 |