SlideShare uma empresa Scribd logo
1 de 8
Baixar para ler offline
알고리즘
문제해결전략
#2
분할 정복
지난 시간 숙제
recursion 과 stack overflow
• Iteration vs recursion
• Fibonacci f(n) = f(n-1) + f(n-2)
• Recursion 으로 푸는 편이 자연스럽다. 하지만…
• 자라나는 stack 의 속도 : 2n
• Stack overflow 발생
• Tail call recursion?
• Function 자신을 return하면 stack이 linear 하게 자라남
• Compiler가 지원해주면 stack이 자라나지 않을수도(!) 있음
• Tail call optimization 이라고 한다.
지난 시간 숙제
recursion 과 stack overflow
• Trampoline
• Coding 은 recursion 으로
• 수행은 iteration 처럼
• 값이 evaluation 될 때 까지 call
stack 이 자라나지 않음
지난 시간 숙제
recursion 과 stack overflow
• Java 의 tail call optimization 지원 계획은?
• https://blogs.oracle.com/jrose/entry/tail_calls_in_the_vm
• http://openjdk.java.net/projects/mlvm/subprojects.html#TailCall
• 딱히 지원해 줄 것 같지는 않아 보인다.
• 다른 언어는?
• golang, scala, ECMA6 … : 지원 또는 부분 지원
• 그밖에 다른 언어는 직접 알아보도록
Divide and conquer
• 큰 문제를 작은 문제로 나눈다.
• 작은 문제를 해결한다.
• 병합한다.
출처 : http://kugistory.net/76
카라츠바 알고리즘
• 매우 큰 수에 대한 곱셈 연산
• 매우 큰 수를 다음과 같이 int[] 로 저장해보자
• 100000 : {0,0,0,0,0,1}
• O(𝑛2
) 방법
• 일반적으로 노트에 적어가며 푸는 방식과 동일
• 카라츠바 알고리즘
• 이항연산의 규칙을 이용하여 연산의 횟수를 줄임
• 큰 곱셈 문제를 작은 곱셈 여러 번으로 나누어 이 규칙을 적용
1234
x 5678
9872
8638
….
카라츠바 알고리즘
• 시간복잡도 분석
• n 자릿수 곱셈에 대하여, n = 2 𝑘
라 할 때
• k 개의 Karatsuba 연산으로 분할
• 그런데 1개의 Karatsuba 연산에 3 번의 곱셈(=Karatsuba)이 발생하므로
• 𝑎1 × 𝑏1
• 𝑎0 × 𝑏0
• 𝑎0 + 𝑎1 × 𝑏0 + 𝑏1
• 시간복잡도 = O(3 𝑘
)
• 그런데, n = 2 𝑘
이므로 양변에 밑이 2인 로그를 취하면
• 𝑙𝑜𝑔2 𝑛 = 𝑘 𝑙𝑜𝑔22
• 𝑙𝑜𝑔2 𝑛 = 𝑘
• O(3 𝑘
) = O(3𝑙𝑜𝑔2 𝑛
)
• 3𝑙𝑜𝑔2 𝑛
= 𝑥 라 할 때
• 𝑙𝑜𝑔23𝑙𝑜𝑔2 𝑛
= 𝑙𝑜𝑔2 𝑥
• 𝑙𝑜𝑔2 𝑛 × 𝑙𝑜𝑔23 = 𝑙𝑜𝑔2 𝑥
• 𝑙𝑜𝑔2 𝑛𝑙𝑜𝑔23
= 𝑙𝑜𝑔2 𝑥
• 𝑛 𝑙𝑜𝑔23
= 𝑥
• 따라서, 3𝑙𝑜𝑔2 𝑛
= 𝑛 𝑙𝑜𝑔23
• O(3𝑙𝑜𝑔2 𝑛
) = O(𝑛𝑙𝑜𝑔23
)
카라츠바 알고리즘

Mais conteúdo relacionado

Destaque

멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면Byeongsu Kang
 
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드도형 임
 
Aws summit 2017 사내전파교육
Aws summit 2017 사내전파교육Aws summit 2017 사내전파교육
Aws summit 2017 사내전파교육Byeongsu Kang
 
코딩소림사 Rx java
코딩소림사 Rx java코딩소림사 Rx java
코딩소림사 Rx javaByeongsu Kang
 
예외처리가이드
예외처리가이드예외처리가이드
예외처리가이드도형 임
 
Kth개발자 세미나 1회
Kth개발자 세미나 1회Kth개발자 세미나 1회
Kth개발자 세미나 1회Byeongsu Kang
 
Scala dreaded underscore
Scala dreaded underscoreScala dreaded underscore
Scala dreaded underscoreRUDDER
 
카카오스토리 웹팀의 코드리뷰 경험
카카오스토리 웹팀의 코드리뷰 경험카카오스토리 웹팀의 코드리뷰 경험
카카오스토리 웹팀의 코드리뷰 경험Ohgyun Ahn
 
Webservice cache strategy
Webservice cache strategyWebservice cache strategy
Webservice cache strategyDaeMyung Kang
 
세션3. geth 클라이언트 실습 및 모니터링과 시각화
세션3. geth 클라이언트 실습 및 모니터링과 시각화세션3. geth 클라이언트 실습 및 모니터링과 시각화
세션3. geth 클라이언트 실습 및 모니터링과 시각화Jay JH Park
 
Bitcoin 2.0(blockchain technology 2)
Bitcoin 2.0(blockchain technology 2)Bitcoin 2.0(blockchain technology 2)
Bitcoin 2.0(blockchain technology 2)Wooseung Kim
 
세션5. web3.js와 Node.js 를 사용한 dApp 개발
세션5. web3.js와 Node.js 를 사용한 dApp 개발세션5. web3.js와 Node.js 를 사용한 dApp 개발
세션5. web3.js와 Node.js 를 사용한 dApp 개발Jay JH Park
 
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍Jay JH Park
 
세션2. 이더리움 합의 알고리즘과 마이닝
세션2. 이더리움 합의 알고리즘과 마이닝세션2. 이더리움 합의 알고리즘과 마이닝
세션2. 이더리움 합의 알고리즘과 마이닝Jay JH Park
 
세션1. block chain as a platform
세션1. block chain as a platform세션1. block chain as a platform
세션1. block chain as a platformJay JH Park
 
텐서플로우 설치도 했고 튜토리얼도 봤고 기초 예제도 짜봤다면 TensorFlow KR Meetup 2016
텐서플로우 설치도 했고 튜토리얼도 봤고 기초 예제도 짜봤다면 TensorFlow KR Meetup 2016텐서플로우 설치도 했고 튜토리얼도 봤고 기초 예제도 짜봤다면 TensorFlow KR Meetup 2016
텐서플로우 설치도 했고 튜토리얼도 봤고 기초 예제도 짜봤다면 TensorFlow KR Meetup 2016Taehoon Kim
 
지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016
지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016
지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016Taehoon Kim
 
알아두면 쓸데있는 신기한 강화학습 NAVER 2017
알아두면 쓸데있는 신기한 강화학습 NAVER 2017알아두면 쓸데있는 신기한 강화학습 NAVER 2017
알아두면 쓸데있는 신기한 강화학습 NAVER 2017Taehoon Kim
 
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016Taehoon Kim
 
책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017
책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017
책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017Taehoon Kim
 

Destaque (20)

멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면
 
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
Exception log practical_coding_guide, 예외와 로그 코딩 실용 가이드
 
Aws summit 2017 사내전파교육
Aws summit 2017 사내전파교육Aws summit 2017 사내전파교육
Aws summit 2017 사내전파교육
 
코딩소림사 Rx java
코딩소림사 Rx java코딩소림사 Rx java
코딩소림사 Rx java
 
예외처리가이드
예외처리가이드예외처리가이드
예외처리가이드
 
Kth개발자 세미나 1회
Kth개발자 세미나 1회Kth개발자 세미나 1회
Kth개발자 세미나 1회
 
Scala dreaded underscore
Scala dreaded underscoreScala dreaded underscore
Scala dreaded underscore
 
카카오스토리 웹팀의 코드리뷰 경험
카카오스토리 웹팀의 코드리뷰 경험카카오스토리 웹팀의 코드리뷰 경험
카카오스토리 웹팀의 코드리뷰 경험
 
Webservice cache strategy
Webservice cache strategyWebservice cache strategy
Webservice cache strategy
 
세션3. geth 클라이언트 실습 및 모니터링과 시각화
세션3. geth 클라이언트 실습 및 모니터링과 시각화세션3. geth 클라이언트 실습 및 모니터링과 시각화
세션3. geth 클라이언트 실습 및 모니터링과 시각화
 
Bitcoin 2.0(blockchain technology 2)
Bitcoin 2.0(blockchain technology 2)Bitcoin 2.0(blockchain technology 2)
Bitcoin 2.0(blockchain technology 2)
 
세션5. web3.js와 Node.js 를 사용한 dApp 개발
세션5. web3.js와 Node.js 를 사용한 dApp 개발세션5. web3.js와 Node.js 를 사용한 dApp 개발
세션5. web3.js와 Node.js 를 사용한 dApp 개발
 
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍
 
세션2. 이더리움 합의 알고리즘과 마이닝
세션2. 이더리움 합의 알고리즘과 마이닝세션2. 이더리움 합의 알고리즘과 마이닝
세션2. 이더리움 합의 알고리즘과 마이닝
 
세션1. block chain as a platform
세션1. block chain as a platform세션1. block chain as a platform
세션1. block chain as a platform
 
텐서플로우 설치도 했고 튜토리얼도 봤고 기초 예제도 짜봤다면 TensorFlow KR Meetup 2016
텐서플로우 설치도 했고 튜토리얼도 봤고 기초 예제도 짜봤다면 TensorFlow KR Meetup 2016텐서플로우 설치도 했고 튜토리얼도 봤고 기초 예제도 짜봤다면 TensorFlow KR Meetup 2016
텐서플로우 설치도 했고 튜토리얼도 봤고 기초 예제도 짜봤다면 TensorFlow KR Meetup 2016
 
지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016
지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016
지적 대화를 위한 깊고 넓은 딥러닝 PyCon APAC 2016
 
알아두면 쓸데있는 신기한 강화학습 NAVER 2017
알아두면 쓸데있는 신기한 강화학습 NAVER 2017알아두면 쓸데있는 신기한 강화학습 NAVER 2017
알아두면 쓸데있는 신기한 강화학습 NAVER 2017
 
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기 DEVIEW 2016
 
책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017
책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017
책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017
 

Semelhante a 알고리즘2

하스켈로 알고리즘 문제 풀기
하스켈로 알고리즘 문제 풀기하스켈로 알고리즘 문제 풀기
하스켈로 알고리즘 문제 풀기민석 이
 
3.neural networks
3.neural networks3.neural networks
3.neural networksHaesun Park
 
하스켈 성능 튜닝 2
하스켈 성능 튜닝 2하스켈 성능 튜닝 2
하스켈 성능 튜닝 2민석 이
 
하스켈 성능 튜닝
하스켈 성능 튜닝하스켈 성능 튜닝
하스켈 성능 튜닝민석 이
 
Deep Learning from scratch 5장 : backpropagation
 Deep Learning from scratch 5장 : backpropagation Deep Learning from scratch 5장 : backpropagation
Deep Learning from scratch 5장 : backpropagationJinSooKim80
 
Lecture 4: Neural Networks I
Lecture 4: Neural Networks ILecture 4: Neural Networks I
Lecture 4: Neural Networks ISang Jun Lee
 
[OpenTRS-001] Hotel California
[OpenTRS-001] Hotel California[OpenTRS-001] Hotel California
[OpenTRS-001] Hotel CaliforniaTheori
 
Dsh data sensitive hashing for high dimensional k-nn search
Dsh  data sensitive hashing for high dimensional k-nn searchDsh  data sensitive hashing for high dimensional k-nn search
Dsh data sensitive hashing for high dimensional k-nn searchWooSung Choi
 
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)HYUNJEONG KIM
 
2.linear regression and logistic regression
2.linear regression and logistic regression2.linear regression and logistic regression
2.linear regression and logistic regressionHaesun Park
 
3 sat with randomization
3 sat with randomization3 sat with randomization
3 sat with randomizationChangki Yun
 
확통 회귀분석
확통 회귀분석확통 회귀분석
확통 회귀분석jaypi Ko
 
Ruby Enumerator(루비 열거자) 이해하기
Ruby Enumerator(루비 열거자) 이해하기Ruby Enumerator(루비 열거자) 이해하기
Ruby Enumerator(루비 열거자) 이해하기Daegwon Kim
 
강화학습기초(MDP, Monte-Carlo, Time-difference, sarsa, q-learning) 파트1
강화학습기초(MDP, Monte-Carlo, Time-difference, sarsa, q-learning) 파트1강화학습기초(MDP, Monte-Carlo, Time-difference, sarsa, q-learning) 파트1
강화학습기초(MDP, Monte-Carlo, Time-difference, sarsa, q-learning) 파트1Euijin Jeong
 
Backtracking [ICPC Sinchon]
Backtracking [ICPC Sinchon]Backtracking [ICPC Sinchon]
Backtracking [ICPC Sinchon]Jae-yeol Lee
 
딥러닝의 기본
딥러닝의 기본딥러닝의 기본
딥러닝의 기본deepseaswjh
 
Neural network (perceptron)
Neural network (perceptron)Neural network (perceptron)
Neural network (perceptron)Jeonghun Yoon
 
Coursera Machine Learning (by Andrew Ng)_강의정리
Coursera Machine Learning (by Andrew Ng)_강의정리Coursera Machine Learning (by Andrew Ng)_강의정리
Coursera Machine Learning (by Andrew Ng)_강의정리SANG WON PARK
 

Semelhante a 알고리즘2 (20)

하스켈로 알고리즘 문제 풀기
하스켈로 알고리즘 문제 풀기하스켈로 알고리즘 문제 풀기
하스켈로 알고리즘 문제 풀기
 
3.neural networks
3.neural networks3.neural networks
3.neural networks
 
하스켈 성능 튜닝 2
하스켈 성능 튜닝 2하스켈 성능 튜닝 2
하스켈 성능 튜닝 2
 
하스켈 성능 튜닝
하스켈 성능 튜닝하스켈 성능 튜닝
하스켈 성능 튜닝
 
Deep Learning from scratch 5장 : backpropagation
 Deep Learning from scratch 5장 : backpropagation Deep Learning from scratch 5장 : backpropagation
Deep Learning from scratch 5장 : backpropagation
 
Lecture 4: Neural Networks I
Lecture 4: Neural Networks ILecture 4: Neural Networks I
Lecture 4: Neural Networks I
 
[OpenTRS-001] Hotel California
[OpenTRS-001] Hotel California[OpenTRS-001] Hotel California
[OpenTRS-001] Hotel California
 
Dsh data sensitive hashing for high dimensional k-nn search
Dsh  data sensitive hashing for high dimensional k-nn searchDsh  data sensitive hashing for high dimensional k-nn search
Dsh data sensitive hashing for high dimensional k-nn search
 
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
 
2.linear regression and logistic regression
2.linear regression and logistic regression2.linear regression and logistic regression
2.linear regression and logistic regression
 
3 sat with randomization
3 sat with randomization3 sat with randomization
3 sat with randomization
 
확통 회귀분석
확통 회귀분석확통 회귀분석
확통 회귀분석
 
Ruby Enumerator(루비 열거자) 이해하기
Ruby Enumerator(루비 열거자) 이해하기Ruby Enumerator(루비 열거자) 이해하기
Ruby Enumerator(루비 열거자) 이해하기
 
강화학습기초(MDP, Monte-Carlo, Time-difference, sarsa, q-learning) 파트1
강화학습기초(MDP, Monte-Carlo, Time-difference, sarsa, q-learning) 파트1강화학습기초(MDP, Monte-Carlo, Time-difference, sarsa, q-learning) 파트1
강화학습기초(MDP, Monte-Carlo, Time-difference, sarsa, q-learning) 파트1
 
DL from scratch(4~5)
DL from scratch(4~5)DL from scratch(4~5)
DL from scratch(4~5)
 
Backtracking [ICPC Sinchon]
Backtracking [ICPC Sinchon]Backtracking [ICPC Sinchon]
Backtracking [ICPC Sinchon]
 
딥러닝의 기본
딥러닝의 기본딥러닝의 기본
딥러닝의 기본
 
Neural network (perceptron)
Neural network (perceptron)Neural network (perceptron)
Neural network (perceptron)
 
Coursera Machine Learning (by Andrew Ng)_강의정리
Coursera Machine Learning (by Andrew Ng)_강의정리Coursera Machine Learning (by Andrew Ng)_강의정리
Coursera Machine Learning (by Andrew Ng)_강의정리
 
Variational AutoEncoder(VAE)
Variational AutoEncoder(VAE)Variational AutoEncoder(VAE)
Variational AutoEncoder(VAE)
 

Mais de Byeongsu Kang

Concurrent programming 2
Concurrent programming 2Concurrent programming 2
Concurrent programming 2Byeongsu Kang
 
Concurrent programming
Concurrent programmingConcurrent programming
Concurrent programmingByeongsu Kang
 
Dependency hell과 빌드지옥 탈출
Dependency hell과 빌드지옥 탈출Dependency hell과 빌드지옥 탈출
Dependency hell과 빌드지옥 탈출Byeongsu Kang
 
Stash 사용자 교육
Stash 사용자 교육Stash 사용자 교육
Stash 사용자 교육Byeongsu Kang
 
신규 협업도구 사용자 교육(공통 비개발자)
신규 협업도구 사용자 교육(공통 비개발자)신규 협업도구 사용자 교육(공통 비개발자)
신규 협업도구 사용자 교육(공통 비개발자)Byeongsu Kang
 
생각이라는 벽돌로 만드는 집
생각이라는 벽돌로 만드는 집생각이라는 벽돌로 만드는 집
생각이라는 벽돌로 만드는 집Byeongsu Kang
 
개발자 환경 설정
개발자 환경 설정개발자 환경 설정
개발자 환경 설정Byeongsu Kang
 

Mais de Byeongsu Kang (10)

Kotlin study #1
Kotlin study #1Kotlin study #1
Kotlin study #1
 
Kotlin study #0
Kotlin study #0Kotlin study #0
Kotlin study #0
 
Rx java essentials
Rx java essentialsRx java essentials
Rx java essentials
 
Concurrent programming 2
Concurrent programming 2Concurrent programming 2
Concurrent programming 2
 
Concurrent programming
Concurrent programmingConcurrent programming
Concurrent programming
 
Dependency hell과 빌드지옥 탈출
Dependency hell과 빌드지옥 탈출Dependency hell과 빌드지옥 탈출
Dependency hell과 빌드지옥 탈출
 
Stash 사용자 교육
Stash 사용자 교육Stash 사용자 교육
Stash 사용자 교육
 
신규 협업도구 사용자 교육(공통 비개발자)
신규 협업도구 사용자 교육(공통 비개발자)신규 협업도구 사용자 교육(공통 비개발자)
신규 협업도구 사용자 교육(공통 비개발자)
 
생각이라는 벽돌로 만드는 집
생각이라는 벽돌로 만드는 집생각이라는 벽돌로 만드는 집
생각이라는 벽돌로 만드는 집
 
개발자 환경 설정
개발자 환경 설정개발자 환경 설정
개발자 환경 설정
 

알고리즘2

  • 2. 지난 시간 숙제 recursion 과 stack overflow • Iteration vs recursion • Fibonacci f(n) = f(n-1) + f(n-2) • Recursion 으로 푸는 편이 자연스럽다. 하지만… • 자라나는 stack 의 속도 : 2n • Stack overflow 발생 • Tail call recursion? • Function 자신을 return하면 stack이 linear 하게 자라남 • Compiler가 지원해주면 stack이 자라나지 않을수도(!) 있음 • Tail call optimization 이라고 한다.
  • 3. 지난 시간 숙제 recursion 과 stack overflow • Trampoline • Coding 은 recursion 으로 • 수행은 iteration 처럼 • 값이 evaluation 될 때 까지 call stack 이 자라나지 않음
  • 4. 지난 시간 숙제 recursion 과 stack overflow • Java 의 tail call optimization 지원 계획은? • https://blogs.oracle.com/jrose/entry/tail_calls_in_the_vm • http://openjdk.java.net/projects/mlvm/subprojects.html#TailCall • 딱히 지원해 줄 것 같지는 않아 보인다. • 다른 언어는? • golang, scala, ECMA6 … : 지원 또는 부분 지원 • 그밖에 다른 언어는 직접 알아보도록
  • 5. Divide and conquer • 큰 문제를 작은 문제로 나눈다. • 작은 문제를 해결한다. • 병합한다. 출처 : http://kugistory.net/76
  • 6. 카라츠바 알고리즘 • 매우 큰 수에 대한 곱셈 연산 • 매우 큰 수를 다음과 같이 int[] 로 저장해보자 • 100000 : {0,0,0,0,0,1} • O(𝑛2 ) 방법 • 일반적으로 노트에 적어가며 푸는 방식과 동일 • 카라츠바 알고리즘 • 이항연산의 규칙을 이용하여 연산의 횟수를 줄임 • 큰 곱셈 문제를 작은 곱셈 여러 번으로 나누어 이 규칙을 적용 1234 x 5678 9872 8638 ….
  • 8. • 시간복잡도 분석 • n 자릿수 곱셈에 대하여, n = 2 𝑘 라 할 때 • k 개의 Karatsuba 연산으로 분할 • 그런데 1개의 Karatsuba 연산에 3 번의 곱셈(=Karatsuba)이 발생하므로 • 𝑎1 × 𝑏1 • 𝑎0 × 𝑏0 • 𝑎0 + 𝑎1 × 𝑏0 + 𝑏1 • 시간복잡도 = O(3 𝑘 ) • 그런데, n = 2 𝑘 이므로 양변에 밑이 2인 로그를 취하면 • 𝑙𝑜𝑔2 𝑛 = 𝑘 𝑙𝑜𝑔22 • 𝑙𝑜𝑔2 𝑛 = 𝑘 • O(3 𝑘 ) = O(3𝑙𝑜𝑔2 𝑛 ) • 3𝑙𝑜𝑔2 𝑛 = 𝑥 라 할 때 • 𝑙𝑜𝑔23𝑙𝑜𝑔2 𝑛 = 𝑙𝑜𝑔2 𝑥 • 𝑙𝑜𝑔2 𝑛 × 𝑙𝑜𝑔23 = 𝑙𝑜𝑔2 𝑥 • 𝑙𝑜𝑔2 𝑛𝑙𝑜𝑔23 = 𝑙𝑜𝑔2 𝑥 • 𝑛 𝑙𝑜𝑔23 = 𝑥 • 따라서, 3𝑙𝑜𝑔2 𝑛 = 𝑛 𝑙𝑜𝑔23 • O(3𝑙𝑜𝑔2 𝑛 ) = O(𝑛𝑙𝑜𝑔23 ) 카라츠바 알고리즘