21-02-21 알고리즘 기초강의
큰 정수의 계산
- 특정 컴퓨터/언어가 표현할 수 없는 큰 정수의 산술 연산은 어떻게 할까?
- int값은 대부분 32bit (부호값 1bit + 31bit) 이므로 -2^32^ ~ 2^31^-1까지만 표현 가능
- 가정: 10진수 체계에서의 덧셈과 곱셈
- 10진수를 소프트웨어적으로 표현하는 법 : 리스트를 이용하여 각 자리수를 하나의 원소로 저장 (예:
567,832: S = [2,3,8,7,6,5]
)
:point_right: 참고 자바스크립트가 숫자를 다루는 법- 자바스크립트에는 number라는 하나의 숫자형만 존재하며 이는 64비트 2진 부동소수점 타입
- 1개의 부호비트와 11비트의 지수, 53비트의 유효 숫자로 구성됨
Number.MAX_SAFE_INTEGER = 9007199254740991
- 예로 숫자 9000000000000000000 는
["+", 8650752, 7098594, 31974]
로 표현된다
큰 정수의 덧셈
- n개의 자릿수 각각을 더하면서 올림수(carry)를 고려
파이썬으로 정수 더하기
1 | def ladd (u, v): |
자바스크립트로 정수 더하기
1 | const add = (a, b) => { |
큰 정수의 곱셈
- Brute-Force 방법 : O(n^2^)
- Divide-and-Conquer
- u (n자리) = *x * 10^m^* (n/2자리) + y (n/2자리)
- uv = (x * 10^m^** + y)(**w * 10^m^ + z)
→ uv = xw * 10^2m^ + (xy + yw) * 10^m^ + yz
파이썬으로 정수 곱하기
1 | def prod(u, v): |
곱셈 개선
1 | def prod2(u, v): |