Download as pdf or txt
Download as pdf or txt
You are on page 1of 45

슈퍼 점화식 구하기 [중]

3309 이상민

1/45
1. 문제 설명

고급 알고리즘 dltkdals750@sasa.hs.kr 2/45


1. 문제 설명
문제
다음과 같은 점화식의 k번째 항을 구하는 문제
               ⋯        ,

고급 알고리즘 dltkdals750@sasa.hs.kr 3/45


1. 문제 설명
문제
다음과 같은 점화식의 k번째 항을 구하는 문제
               ⋯        ,

문제 조건
  초항의 수  ≤  ≤  
  구해야 하는 항  ≤  ≤  
  점화식의 계수  ≤  ≤  
  점화식의 초항  ≤  ≤  

고급 알고리즘 dltkdals750@sasa.hs.kr 4/45


2. 풀이 1

고급 알고리즘 dltkdals750@sasa.hs.kr 5/45


2. 풀이 1
풀이
dp[i]:  번째 항 ( )
v[i]: 점화식의  번째 계수 ( )

고급 알고리즘 dltkdals750@sasa.hs.kr 6/45


2. 풀이 1
풀이
dp[i]:  번째 항 ( )
v[i]: 점화식의  번째 계수 ( )

코드
for(i, m+1, k)
dp[i]=0
for(j, 1, m)
dp[i]+=v[j]*dp[i-j]

고급 알고리즘 dltkdals750@sasa.hs.kr 7/45


2. 풀이 1
풀이
dp[i]:  번째 항 ( )
v[i]: 점화식의  번째 계수 ( )

코드
for(i, m+1, k)
dp[i]=0
for(j, 1, m)
dp[i]+=v[j]*dp[i-j]

시간복잡도: O(mk)

고급 알고리즘 dltkdals750@sasa.hs.kr 8/45


3. 풀이 2 (정해)

고급 알고리즘 dltkdals750@sasa.hs.kr 9/45


3. 풀이 2 (정해)
풀이
                ⋯       

고급 알고리즘 dltkdals750@sasa.hs.kr 10/45


3. 풀이 2 (정해)
풀이
                ⋯       
위 점화식을 다음과 같은 행렬의 곱으로 표현

고급 알고리즘 dltkdals750@sasa.hs.kr 11/45


3. 풀이 2 (정해)
풀이
                ⋯       
위 점화식을 다음과 같은 행렬의 곱으로 표현

   ⋯                 ⋯      


  ⋯           
  ⋯             
⋮⋮⋱ ⋮ ⋮ ⋮ ⋮ ⋮

   
   ⋯                

고급 알고리즘 dltkdals750@sasa.hs.kr 12/45


3. 풀이 2 (정해)
풀이
                ⋯       
위 점화식을 다음과 같은 행렬의 곱으로 표현

      ⋯                
 
       ⋯   
     ⋯        ⋯     
       ⋯       ⋯    ⋯     
⋮ ⋮⋮⋱ ⋮ ⋮ ⋮ ⋮⋮⋱ ⋮ ⋮ ⋮

   
        ⋯         ⋯     

고급 알고리즘 dltkdals750@sasa.hs.kr 13/45


3. 풀이 2 (정해)
풀이
                ⋯       
위 점화식을 다음과 같은 행렬의 곱으로 표현

   ⋯       
  ⋯     
    ⋯   ,    
⋮⋮⋱ ⋮ ⋮ ⋮

 
   ⋯        

고급 알고리즘 dltkdals750@sasa.hs.kr 14/45


3. 풀이 2 (정해)
풀이
                ⋯       
위 점화식을 다음과 같은 행렬의 곱으로 표현

   ⋯       
  ⋯     
    ⋯   ,    
⋮⋮⋱ ⋮ ⋮ ⋮

 
   ⋯        

즉, 행렬  의 거듭제곱을 구하는 문제

고급 알고리즘 dltkdals750@sasa.hs.kr 15/45


3. 풀이 2 (정해)

고급 알고리즘 dltkdals750@sasa.hs.kr 16/45


3. 풀이 2 (정해)
시간 복잡도

고급 알고리즘 dltkdals750@sasa.hs.kr 17/45


3. 풀이 2 (정해)
시간 복잡도
 ×  정사각 행렬의 곱셈에 필요한 연산 횟수: m

고급 알고리즘 dltkdals750@sasa.hs.kr 18/45


3. 풀이 2 (정해)
시간 복잡도
 ×  정사각 행렬의 곱셈에 필요한 연산 횟수: m
분할 정복을 이용한 거듭제곱: log k

고급 알고리즘 dltkdals750@sasa.hs.kr 19/45


3. 풀이 2 (정해)
시간 복잡도
 ×  정사각 행렬의 곱셈에 필요한 연산 횟수: m
분할 정복을 이용한 거듭제곱: log k

최종 시간 복잡도: O(m log k)

고급 알고리즘 dltkdals750@sasa.hs.kr 20/45


4. 풀이 3 (번외)
풀이
키타마사 법(Kitamasa Method, きたまさ法)

고급 알고리즘 dltkdals750@sasa.hs.kr 21/45


4. 풀이 3 (번외)
풀이
키타마사 법(Kitamasa Method, きたまさ法)

         ⋯    꼴의 점화식을 최초 개의 항으로 표현

고급 알고리즘 dltkdals750@sasa.hs.kr 22/45


4. 풀이 3 (번외)
풀이
키타마사 법(Kitamasa Method, きたまさ法)

         ⋯    꼴의 점화식을 최초 개의 항으로 표현


       ⋯  꼴의 식으로 만드는 것이 목표

고급 알고리즘 dltkdals750@sasa.hs.kr 23/45


4. 풀이 3 (번외)
풀이
키타마사 법(Kitamasa Method, きたまさ法)

         ⋯    꼴의 점화식을 최초 개의 항으로 표현


       ⋯  꼴의 식으로 만드는 것이 목표

이 식을 만족시키는 수열  를 T(k, m) 시간 안에 찾을 수 있다면 O(T(k, m)+m)에 해결 가능

고급 알고리즘 dltkdals750@sasa.hs.kr 24/45


4. 풀이 3 (번외)
풀이
키타마사 법(Kitamasa Method, きたまさ法)

         ⋯    꼴의 점화식을 최초 개의 항으로 표현


       ⋯  꼴의 식으로 만드는 것이 목표

이 식을 만족시키는 수열  를 T(k, m) 시간 안에 찾을 수 있다면 O(T(k, m)+m)에 해결 가능


주어진 점화식에서 수열  를 찾는 문제

고급 알고리즘 dltkdals750@sasa.hs.kr 25/45


4. 풀이 3 (번외)
풀이
키타마사 법(Kitamasa Method, きたまさ法)

  ,   이고   일 때

고급 알고리즘 dltkdals750@sasa.hs.kr 26/45


4. 풀이 3 (번외)
풀이
키타마사 법(Kitamasa Method, きたまさ法)

  ,   이고   일 때
‧        
‧                      
‧                   
‧   ,   

고급 알고리즘 dltkdals750@sasa.hs.kr 27/45


4. 풀이 3 (번외)
풀이
키타마사 법(Kitamasa Method, きたまさ法)

  ,   이고   일 때
‧         , 양변에서            을 빼면
‧         , 양변에서            을 빼면
‧        
‧   ,   

고급 알고리즘 dltkdals750@sasa.hs.kr 28/45


4. 풀이 3 (번외)
풀이
키타마사 법(Kitamasa Method, きたまさ法)

  ,   이고   일 때
‧         , 양변에서            을 빼면
‧         , 양변에서            을 빼면
‧        
‧   ,   

양변에              ⋯       의 상수 배를 빼는 과정으로 표현 가능

고급 알고리즘 dltkdals750@sasa.hs.kr 29/45


4. 풀이 3 (번외)
풀이
키타마사 법(Kitamasa Method, きたまさ法)

이는    을               ⋯   으로 나눈 나머지를 구하는 과정과 동일

고급 알고리즘 dltkdals750@sasa.hs.kr 30/45


4. 풀이 3 (번외)
풀이
키타마사 법(Kitamasa Method, きたまさ法)

이는    을               ⋯   으로 나눈 나머지를 구하는 과정과 동일


실제로                 

고급 알고리즘 dltkdals750@sasa.hs.kr 31/45


4. 풀이 3 (번외)
풀이
키타마사 법(Kitamasa Method, きたまさ法)

이는    을               ⋯   으로 나눈 나머지를 구하는 과정과 동일


실제로                 

따라서    mod    를 구하는 데에 걸리는 시간에 따라 효율이 결정

고급 알고리즘 dltkdals750@sasa.hs.kr 32/45


4. 풀이 3 (번외)
풀이
키타마사 법(Kitamasa Method, きたまさ法)

   은  ,  ,  ,  , ⋯ 들의 곱으로 표현 가능
이는 총 O(log k)번의 다항식 곱셈을 필요로 함

고급 알고리즘 dltkdals750@sasa.hs.kr 33/45


4. 풀이 3 (번외)
풀이
키타마사 법(Kitamasa Method, きたまさ法)

   은  ,  ,  ,  , ⋯ 들의 곱으로 표현 가능
이는 총 O(log k)번의 다항식 곱셈을 필요로 함

   mod       mod     mod mod

고급 알고리즘 dltkdals750@sasa.hs.kr 34/45


4. 풀이 3 (번외)
풀이
키타마사 법(Kitamasa Method, きたまさ法)

   은  ,  ,  ,  , ⋯ 들의 곱으로 표현 가능
이는 총 O(log k)번의 다항식 곱셈을 필요로 함

   mod       mod     mod mod

mod    를 취하면 차수가 미만


즉, 차수가 미만인 두 다항식끼리의 곱셈과 나눗셈을 각각 O(log k)번 수행

고급 알고리즘 dltkdals750@sasa.hs.kr 35/45


4. 풀이 3 (번외)
풀이
키타마사 법(Kitamasa Method, きたまさ法)

   은  ,  ,  ,  , ⋯ 들의 곱으로 표현 가능
이는 총 O(log k)번의 다항식 곱셈을 필요로 함

   mod       mod     mod mod

mod    를 취하면 차수가 미만


즉, 차수가 미만인 두 다항식끼리의 곱셈과 나눗셈을 각각 O(log k)번 수행

차수가 미만인 다항식의 곱셈 나눗셈에 걸리는 시간

고급 알고리즘 dltkdals750@sasa.hs.kr 36/45


4. 풀이 3 (번외)
풀이
키타마사 법(Kitamasa Method, きたまさ法)

차수가 미만인 다항식의 곱셈 나눗셈에 걸리는 시간

고급 알고리즘 dltkdals750@sasa.hs.kr 37/45


4. 풀이 3 (번외)
풀이
키타마사 법(Kitamasa Method, きたまさ法)

차수가 미만인 다항식의 곱셈 나눗셈에 걸리는 시간



‧ naive한 구현: m

고급 알고리즘 dltkdals750@sasa.hs.kr 38/45


4. 풀이 3 (번외)
풀이
키타마사 법(Kitamasa Method, きたまさ法)

차수가 미만인 다항식의 곱셈 나눗셈에 걸리는 시간



‧ naive한 구현: m
‧ FFT(고속 푸리에 변환): mlog m

고급 알고리즘 dltkdals750@sasa.hs.kr 39/45


4. 풀이 3 (번외)
풀이
키타마사 법(Kitamasa Method, きたまさ法)

차수가 미만인 다항식의 곱셈 나눗셈에 걸리는 시간



‧ naive한 구현: m
‧ FFT(고속 푸리에 변환): mlog m

최종 시간 복잡도: O(mlog m log k)

고급 알고리즘 dltkdals750@sasa.hs.kr 40/45


4. 풀이 3 (번외)
풀이
키타마사 법(Kitamasa Method, きたまさ法)

차수가 미만인 다항식의 곱셈 나눗셈에 걸리는 시간



‧ naive한 구현: m
‧ FFT(고속 푸리에 변환): mlog m

최종 시간 복잡도: O(mlog m log k)

풀이 출처: https://justicehui.github.io/hard-algorithm/2021/03/13/kitamasa/

고급 알고리즘 dltkdals750@sasa.hs.kr 41/45


4. 풀이 3 (번외)
풀이
키타마사 법(Kitamasa Method, きたまさ法)

차수가 미만인 다항식의 곱셈 나눗셈에 걸리는 시간



‧ naive한 구현: m
‧ FFT(고속 푸리에 변환): mlog m

최종 시간 복잡도: O(mlog m log k)

풀이 출처: https://justicehui.github.io/hard-algorithm/2021/03/13/kitamasa/
키타마사 문제집: https://www.acmicpc.net/problemset?sort=ac_desc&algo=112

고급 알고리즘 dltkdals750@sasa.hs.kr 42/45


5. 테스트 케이스

고급 알고리즘 dltkdals750@sasa.hs.kr 43/45


5. 테스트 케이스
test case
‧ set1:  ≤  ≤ ,  ≤  ≤ 
‧ set2:   ,  ≤  ≤ 
‧ set3:  ≤  ≤  ≤ 

고급 알고리즘 dltkdals750@sasa.hs.kr 44/45


5. 테스트 케이스
test case
‧ set1:  ≤  ≤ ,  ≤  ≤ 
‧ set2:   ,  ≤  ≤ 
‧ set3:  ≤  ≤  ≤ 

풀이 제출
풀이 1: set1+set3 통과
풀이 2: 모든 set 통과 , 실행 시간: 1000ms
풀이 3: 모든 set 통과 , 실행 시간: 83ms

고급 알고리즘 dltkdals750@sasa.hs.kr 45/45

You might also like