SlideShare a Scribd company logo
1 of 15
Download to read offline
By	POSTECH	Computer	Algorithm	Team
sqrt(n) Algorithm
조승혁
Contents
POSTECH Computer Algorithm Team
Offline Query 1
Sqrt Decomposition 0
Mo’s Algorithm 2
POSTECH Computer Algorithm Team
- 1학기 때 segment	tree를 하면서, 처음으로 query	problem을 접하였을 것이다.
- 오늘은 이런 query	problem을 푸는 방법 중 하나인, sqrt(n)	algorithm에 대해 배울 것이다.
Query problems
POSTECH Computer Algorithm Team
- 1학기 때 했던 query	문제를 떠올려 보자.
- N개의 수로 이루어진 수열, A[1…N]이 있고, 다음과 같은 query가 주어진다.
Query1)	A[p…q]의 최댓값을 출력
Query2)	A[idx]를 val로 업데이트
Sqrt Decomposition Sqrt Decomposition
POSTECH Computer Algorithm Team
Sqrt Decomposition
- Segment	tree를 떠올려보자.
- Segment	tree는 구간들을 적절히 생성하여, 효율적으로 다루는 자료구조이다.
- 만약, A[1…N]을 동일한 크기의 구간들로 관리하면 어떨까?
Ex)	A[1…a],	A[a+1…2a],	…	,	A[ka+1…N]
POSTECH Computer Algorithm Team
Sqrt Decomposition
Query1)
- 구간 [p,	q]가 들어오면 p,	q가 속해있는 구간을 찾는다.
- p, q가 각각 속해있는 구간들에서의 최댓값과, 그 사이의 구간들에서의 최댓값을 비교한다.
Query2)
- idx가 들어오면 idx가 속해있는 구간을 찾는다.
- 그 구간의 값과 A[idx]의 값을 update한다.
Q1)	속해있는 구간을 어떻게 찾을까?
Q2)	각각의 시간복잡도는?
POSTECH Computer Algorithm Team
Sqrt Decomposition
- 이렇게 일정한 구간(버킷)들로 쪼개어 관리하는 방법을 sqrt	decomposition이라고 한다.
- 왜냐하면 버킷 크기를 sqrt(n)으로 하는 것이 가장 효율적이기 때문이다.
- 시간복잡도 O(Q	sqrt(N)).
POSTECH Computer Algorithm Team
- 앞의 sqrt	decomposition 까지는 온라인 알고리즘이라고 할 수 있다.
- 온라인 알고리즘 : 입력 받은 쿼리를 바로 계산하여 결과를 출력
- 오프라인 알고리즘 : 입력 받은 쿼리들을 모아서, 한 번에 계산하여 결과를 출력
Offline Algorithm Offline Algorithm
POSTECH Computer Algorithm Team
Offline Algorithm
- 그럼 앞에서 언급한 query	problem을 offline	algorithm으로 풀어보자.
- 이제는 update 없이, Q개의 구간 [p,	q]들이 들어온다고 생각하자.
Q)	효율적으로 해결할 수 있는 오프라인 알고리즘을 생각해보자.
POSTECH Computer Algorithm Team
Offline Algorithm
A)
- 구간들을 p순으로 정렬한다.(p가 같으면 q순으로)
- 만약 이전 구간이 [p1,	q1],	현재 입력 받은 구간을 [p2,	q2]라고 하자.
- Case	#1	:	p1	==	p2,	q1	<	q2
- Case	#2	:	p1	<	p2,	q1	>	q2
- Case	#3	:	p1	<	p2,	q1	<	q2
Q)	각각 해결하는데 걸리는 시간복잡도는?
POSTECH Computer Algorithm Team
Offline Algorithm
A)
- 모두 다 최악의 경우, O(N)이다.
- 따라서 전체 시간복잡도는 O(QN),	기존의 알고리즘보다 느리다.
- 더 빠르게 할 수는 없을까?
POSTECH Computer Algorithm Team
- Mo’s	Algorithm은 sqrt	decomposition과 offline	query를 합친 것이라고 볼 수 있다.
- 일반적으로 segment	tree를 사용할 때, 각 구간의 값을 O(1)만에 처리할 수 없는 문제들을 해결하는데 사용한다.
Mo’s Algorithm Mo’s Algorithm
POSTECH Computer Algorithm Team
Mo’s Algorithm
- [p,	q]들이 들어오면, p순으로 정렬하는 것이 아닌, p	/	(bucket	size)로 정렬한다!
- 시간복잡도는?
POSTECH Computer Algorithm Team
Mo’s Algorithm
1) P의 변화
- (bucket	size)를 sqrt(N)이라고 하자. 그러면 bucket의 수는 sqrt(N)개
- 그러면 각 query마다 sqrt(N)씩의 연산이 생긴다고 볼 수 있다.(bucket을 옮겨다니는 cost)
- 한 번에 여러 bucket을 넘어갈 수 있지만,	모든 query	통틀어서 O(N)이 걸린다.	
- 전체 시간복잡도 :	O(N	+	Q	sqrt(N))
2)	Q의 변화
- 각 bucket별로 오름차순 되어 있다.
- 즉,	각 bucket별로 O(N)이 걸린다고 볼 수 있다.
- 전체 시간복잡도 :	O(N	sqrt(N))
POSTECH Computer Algorithm Team
https://www.acmicpc.net/problem/13547
https://www.acmicpc.net/problem/8462
https://www.acmicpc.net/problem/2042
https://www.acmicpc.net/problem/2912
오늘의 문제

More Related Content

Similar to Sqrt(n) algorithm

03. segment tree
03. segment tree03. segment tree
03. segment tree승혁 조
 
01. c and time complexity
01. c and time complexity01. c and time complexity
01. c and time complexity승혁 조
 
코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다
코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다
코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다ultrasuperrok
 
Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexityskku_npc
 
Escamp Seminar @KAIST
Escamp Seminar @KAISTEscamp Seminar @KAIST
Escamp Seminar @KAISTDaegeun Lee
 
2019 ppc answers
2019 ppc answers2019 ppc answers
2019 ppc answers승혁 조
 
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.ultrasuperrok
 
Neural network (perceptron)
Neural network (perceptron)Neural network (perceptron)
Neural network (perceptron)Jeonghun Yoon
 
[devil's camp] - 알고리즘 대회와 STL (박인서)
[devil's camp] - 알고리즘 대회와 STL (박인서)[devil's camp] - 알고리즘 대회와 STL (박인서)
[devil's camp] - 알고리즘 대회와 STL (박인서)NAVER D2
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트S.O.P.T - Shout Our Passion Together
 
DP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdfDP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdfHo Jeong Im
 
퍼시스턴트 세그먼트 트리 - Sogang ICPC Team, 2020 Winter
퍼시스턴트 세그먼트 트리 - Sogang ICPC Team, 2020 Winter퍼시스턴트 세그먼트 트리 - Sogang ICPC Team, 2020 Winter
퍼시스턴트 세그먼트 트리 - Sogang ICPC Team, 2020 WinterSuhyun Park
 
딥 러닝 자연어 처리를 학습을 위한 파워포인트. (Deep Learning for Natural Language Processing)
딥 러닝 자연어 처리를 학습을 위한 파워포인트. (Deep Learning for Natural Language Processing)딥 러닝 자연어 처리를 학습을 위한 파워포인트. (Deep Learning for Natural Language Processing)
딥 러닝 자연어 처리를 학습을 위한 파워포인트. (Deep Learning for Natural Language Processing)WON JOON YOO
 

Similar to Sqrt(n) algorithm (20)

03. segment tree
03. segment tree03. segment tree
03. segment tree
 
01. c and time complexity
01. c and time complexity01. c and time complexity
01. c and time complexity
 
DP 중급 2
DP 중급 2DP 중급 2
DP 중급 2
 
01. dp hard
01. dp hard01. dp hard
01. dp hard
 
코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다
코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다
코딩테스트 합격자 되기 C++ 03장(시간 복잡도)를 설명한 ppt입니다
 
Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexity
 
Escamp Seminar @KAIST
Escamp Seminar @KAISTEscamp Seminar @KAIST
Escamp Seminar @KAIST
 
2019 ppc answers
2019 ppc answers2019 ppc answers
2019 ppc answers
 
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
코딩 테스트 합격자 되기 C++ 00장~ 01장을 정리한 강의자료 입니다.
 
Neural network (perceptron)
Neural network (perceptron)Neural network (perceptron)
Neural network (perceptron)
 
[devil's camp] - 알고리즘 대회와 STL (박인서)
[devil's camp] - 알고리즘 대회와 STL (박인서)[devil's camp] - 알고리즘 대회와 STL (박인서)
[devil's camp] - 알고리즘 대회와 STL (박인서)
 
자료구조01
자료구조01자료구조01
자료구조01
 
자료구조01
자료구조01자료구조01
자료구조01
 
자료구조01
자료구조01자료구조01
자료구조01
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
[SOPT] 데이터 구조 및 알고리즘 스터디 - #01 : 개요, 점근적 복잡도, 배열, 연결리스트
 
DP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdfDP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdf
 
6. Sorting
6. Sorting6. Sorting
6. Sorting
 
퍼시스턴트 세그먼트 트리 - Sogang ICPC Team, 2020 Winter
퍼시스턴트 세그먼트 트리 - Sogang ICPC Team, 2020 Winter퍼시스턴트 세그먼트 트리 - Sogang ICPC Team, 2020 Winter
퍼시스턴트 세그먼트 트리 - Sogang ICPC Team, 2020 Winter
 
딥 러닝 자연어 처리를 학습을 위한 파워포인트. (Deep Learning for Natural Language Processing)
딥 러닝 자연어 처리를 학습을 위한 파워포인트. (Deep Learning for Natural Language Processing)딥 러닝 자연어 처리를 학습을 위한 파워포인트. (Deep Learning for Natural Language Processing)
딥 러닝 자연어 처리를 학습을 위한 파워포인트. (Deep Learning for Natural Language Processing)
 
양자컴퓨터
양자컴퓨터양자컴퓨터
양자컴퓨터
 

More from 승혁 조

RSS Live Slider
RSS Live SliderRSS Live Slider
RSS Live Slider승혁 조
 
Parallel binary search
Parallel binary searchParallel binary search
Parallel binary search승혁 조
 
Geometry Algorithms
Geometry AlgorithmsGeometry Algorithms
Geometry Algorithms승혁 조
 
Heavy light decomposition
Heavy light decompositionHeavy light decomposition
Heavy light decomposition승혁 조
 
Advanced segment tree
Advanced segment treeAdvanced segment tree
Advanced segment tree승혁 조
 
L-R network flow
L-R network flowL-R network flow
L-R network flow승혁 조
 
String algorithm
String algorithmString algorithm
String algorithm승혁 조
 
Tree algorithm
Tree algorithmTree algorithm
Tree algorithm승혁 조
 
05. network flow 2
05. network flow 205. network flow 2
05. network flow 2승혁 조
 
05 divide and conquer
05 divide and conquer05 divide and conquer
05 divide and conquer승혁 조
 
04. network flow 1
04. network flow   104. network flow   1
04. network flow 1승혁 조
 
04. binary search
04. binary search04. binary search
04. binary search승혁 조
 
02. binary search tree
02. binary search tree02. binary search tree
02. binary search tree승혁 조
 

More from 승혁 조 (20)

RSS Live Slider
RSS Live SliderRSS Live Slider
RSS Live Slider
 
Parallel binary search
Parallel binary searchParallel binary search
Parallel binary search
 
Geometry Algorithms
Geometry AlgorithmsGeometry Algorithms
Geometry Algorithms
 
FFT
FFTFFT
FFT
 
Heavy light decomposition
Heavy light decompositionHeavy light decomposition
Heavy light decomposition
 
Advanced segment tree
Advanced segment treeAdvanced segment tree
Advanced segment tree
 
L-R network flow
L-R network flowL-R network flow
L-R network flow
 
MCMF
MCMFMCMF
MCMF
 
NIM game
NIM gameNIM game
NIM game
 
분할정복
분할정복분할정복
분할정복
 
String algorithm
String algorithmString algorithm
String algorithm
 
Tree algorithm
Tree algorithmTree algorithm
Tree algorithm
 
Number theory
Number theoryNumber theory
Number theory
 
06. sorting
06. sorting06. sorting
06. sorting
 
05. network flow 2
05. network flow 205. network flow 2
05. network flow 2
 
05 divide and conquer
05 divide and conquer05 divide and conquer
05 divide and conquer
 
04. network flow 1
04. network flow   104. network flow   1
04. network flow 1
 
04. binary search
04. binary search04. binary search
04. binary search
 
02. binary search tree
02. binary search tree02. binary search tree
02. binary search tree
 
03. dp easy
03. dp easy03. dp easy
03. dp easy
 

Sqrt(n) algorithm

  • 2. Contents POSTECH Computer Algorithm Team Offline Query 1 Sqrt Decomposition 0 Mo’s Algorithm 2
  • 3. POSTECH Computer Algorithm Team - 1학기 때 segment tree를 하면서, 처음으로 query problem을 접하였을 것이다. - 오늘은 이런 query problem을 푸는 방법 중 하나인, sqrt(n) algorithm에 대해 배울 것이다. Query problems
  • 4. POSTECH Computer Algorithm Team - 1학기 때 했던 query 문제를 떠올려 보자. - N개의 수로 이루어진 수열, A[1…N]이 있고, 다음과 같은 query가 주어진다. Query1) A[p…q]의 최댓값을 출력 Query2) A[idx]를 val로 업데이트 Sqrt Decomposition Sqrt Decomposition
  • 5. POSTECH Computer Algorithm Team Sqrt Decomposition - Segment tree를 떠올려보자. - Segment tree는 구간들을 적절히 생성하여, 효율적으로 다루는 자료구조이다. - 만약, A[1…N]을 동일한 크기의 구간들로 관리하면 어떨까? Ex) A[1…a], A[a+1…2a], … , A[ka+1…N]
  • 6. POSTECH Computer Algorithm Team Sqrt Decomposition Query1) - 구간 [p, q]가 들어오면 p, q가 속해있는 구간을 찾는다. - p, q가 각각 속해있는 구간들에서의 최댓값과, 그 사이의 구간들에서의 최댓값을 비교한다. Query2) - idx가 들어오면 idx가 속해있는 구간을 찾는다. - 그 구간의 값과 A[idx]의 값을 update한다. Q1) 속해있는 구간을 어떻게 찾을까? Q2) 각각의 시간복잡도는?
  • 7. POSTECH Computer Algorithm Team Sqrt Decomposition - 이렇게 일정한 구간(버킷)들로 쪼개어 관리하는 방법을 sqrt decomposition이라고 한다. - 왜냐하면 버킷 크기를 sqrt(n)으로 하는 것이 가장 효율적이기 때문이다. - 시간복잡도 O(Q sqrt(N)).
  • 8. POSTECH Computer Algorithm Team - 앞의 sqrt decomposition 까지는 온라인 알고리즘이라고 할 수 있다. - 온라인 알고리즘 : 입력 받은 쿼리를 바로 계산하여 결과를 출력 - 오프라인 알고리즘 : 입력 받은 쿼리들을 모아서, 한 번에 계산하여 결과를 출력 Offline Algorithm Offline Algorithm
  • 9. POSTECH Computer Algorithm Team Offline Algorithm - 그럼 앞에서 언급한 query problem을 offline algorithm으로 풀어보자. - 이제는 update 없이, Q개의 구간 [p, q]들이 들어온다고 생각하자. Q) 효율적으로 해결할 수 있는 오프라인 알고리즘을 생각해보자.
  • 10. POSTECH Computer Algorithm Team Offline Algorithm A) - 구간들을 p순으로 정렬한다.(p가 같으면 q순으로) - 만약 이전 구간이 [p1, q1], 현재 입력 받은 구간을 [p2, q2]라고 하자. - Case #1 : p1 == p2, q1 < q2 - Case #2 : p1 < p2, q1 > q2 - Case #3 : p1 < p2, q1 < q2 Q) 각각 해결하는데 걸리는 시간복잡도는?
  • 11. POSTECH Computer Algorithm Team Offline Algorithm A) - 모두 다 최악의 경우, O(N)이다. - 따라서 전체 시간복잡도는 O(QN), 기존의 알고리즘보다 느리다. - 더 빠르게 할 수는 없을까?
  • 12. POSTECH Computer Algorithm Team - Mo’s Algorithm은 sqrt decomposition과 offline query를 합친 것이라고 볼 수 있다. - 일반적으로 segment tree를 사용할 때, 각 구간의 값을 O(1)만에 처리할 수 없는 문제들을 해결하는데 사용한다. Mo’s Algorithm Mo’s Algorithm
  • 13. POSTECH Computer Algorithm Team Mo’s Algorithm - [p, q]들이 들어오면, p순으로 정렬하는 것이 아닌, p / (bucket size)로 정렬한다! - 시간복잡도는?
  • 14. POSTECH Computer Algorithm Team Mo’s Algorithm 1) P의 변화 - (bucket size)를 sqrt(N)이라고 하자. 그러면 bucket의 수는 sqrt(N)개 - 그러면 각 query마다 sqrt(N)씩의 연산이 생긴다고 볼 수 있다.(bucket을 옮겨다니는 cost) - 한 번에 여러 bucket을 넘어갈 수 있지만, 모든 query 통틀어서 O(N)이 걸린다. - 전체 시간복잡도 : O(N + Q sqrt(N)) 2) Q의 변화 - 각 bucket별로 오름차순 되어 있다. - 즉, 각 bucket별로 O(N)이 걸린다고 볼 수 있다. - 전체 시간복잡도 : O(N sqrt(N))
  • 15. POSTECH Computer Algorithm Team https://www.acmicpc.net/problem/13547 https://www.acmicpc.net/problem/8462 https://www.acmicpc.net/problem/2042 https://www.acmicpc.net/problem/2912 오늘의 문제