반응형

유형 : dp

 

 LIS(Longest Increasing Subsequence)로 알려진 유명한 문제이다. 주어진 배열에서 몇 개의 요소들을 제거하여 만들 수 있는 가장 긴 증가하는 수열을 찾는 문제로, 배열이 [1,3,5,2,1,6] 으로 주어진 경우 [1,3,5,6]이 가장 긴 증가하는 부분 수열이 된다.

 

 아래의 풀이는 나무위키의 최장 증가 부분 수열을 Python으로 구현한 것이다.

 풀이를 살펴보면, 먼저 시간복잡도를 O(nlogn) 으로 하기 위해서는 이진탐색을 활용해야하므로, 먼저 이진탐색을 정의한다. bin_search 함수는 이진탐색으로 원하는 값보다 같거나 큰 가장 작은 수의 인덱스를 반환한다. dp[i]는 i+1번째 요소까지를 고려했을 때 가장 긴 부분 수열의 길이가 되며, p_i[i]는 길이가 i인 증가하는 부분수열의 마지막 수(가장 큰 수)이며, 이 값을 가장 작게 유지하는 것이 나중에 유리하다는 것을 알 수 있다.

 

풀이과정

1. bin_search를 통하여 p_i에서 a보다 크거나 같은 가장 작은 수의 인덱스를 찾는다(idx).

2-1. 이 idx가 배열 p_i의 길이와 같다면, 이는 가장 큰 수가 들어왔다는 것으로, 가장 긴 증가하는 부분 수열의 뒤에 붙으므로써 가장 긴 증가하는 부분 수열의 길이가 1 증가하게 된다. 즉, dp에는 idx 값을 넣어주고, p_i 에는 a 값을 추가로 넣어준다.(p_i의 길이가 늘어났다는 것은, dp의 최댓값 역시 늘어났다는 것을 의미한다.) 

2-2. idx가 배열 p_i의 길이보다 작다면, 이는 a 값을 마지막으로 하는 증가하는 부분 수열은 기존의 부분 수열보다 길이가 크지 않다는 것이고, idx는 a를 마지막으로 넣었을 때 만들수 있는 가장 긴 부분 수열의 길이를 나타낸다. 이 때, 기존의 길이가 idx인 부분 수열의 마지막 보다는 a가 작거나 같으므로 p_i[idx]의 값을 a로 바꾸어준다.

3. 이렇게 모든 요소에 대하여 반복한 후 dp의 최댓값을 반환한다.

 

시간복잡도

 1의 과정(이진탐색)의 시간 복잡도가 logn이고, 이 과정을 모든 요소에 대하여 반복해야 하므로 총 n번 진행하면 된다. 따라서 시간복잡도는 O(nlogn)이 된다.

 

코드

import sys

#t보다 크거나 같은 가장 작은 수 반환
def bin_search(arr, t):
    l=0
    r=len(arr)
    if t > arr[-1]:return len(arr)
    elif t<arr[0]:return 0
    mid = (l+r)//2
    while l<=r:
        if arr[mid] > t:
            r=mid-1
        elif arr[mid] < t:
            l = mid+1
        else:
            return mid
        mid = (l+r)//2
    return mid+1

n=map(int,sys.stdin.readline())
a_i = list(map(int,sys.stdin.readline().split()))

dp=[0]
p_i=[0]

for a in a_i:
    idx = bin_search(p_i,a)
    # 가장 큰 수가 들어왔다
    if idx == len(p_i):
        p_i.append(a)
    else:
        p_i[idx] = a
    dp.append(idx)
print(max(dp))

 

문제 풀기

 

11053번: 가장 긴 증가하는 부분 수열

수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다.

www.acmicpc.net

 

반응형

'알고리즘 > 백준' 카테고리의 다른 글

백준 2839 설탕배달  (0) 2020.02.24
백준 11052 카드 구매하기  (0) 2020.02.24
백준 7576 토마토  (0) 2020.02.21
백준 15998 카카오머니  (0) 2020.02.20
백준 1931 회의실 배정  (0) 2020.02.17
반응형

정상성

1. 평균이 일정하다.
2. 분산이 시점에 의존하지 않는다.
3. 공분산은 단지 시차에만 의존하고 시점 자체에는 의존하지 않는다.
시계열 모형

자기회귀모형 (Autoregressive model)

현 시점의 자료 $Z_t$가 p시간 이전까지의 자료들로 설명이 되는 모형이다.
$Z_t = \phi_1Z_{t-1} + \phi_2Z_{t-2}+...+\phi_pZ_{t-p}+a_t$
이러한 모형을 p차 자기회귀모형 AR(p)라 한다.

이동평균모형 (Moving Average model)

현 시점의 자료가 유한개의 노이즈의 선형결합으로 주어진다. 즉, 정상성을 만족한다. $Z_t = a_t - \theta_1a_{t-1}-\theta_2a_{t-2}+...$

자기회귀누적이동평균모형 (Autoregressive Integrated Moving Average model)

 차분이나 변환을 통해 위의 모형들로 정상화할 수 없는 비정상 시계열모형을 나타낸다. $ARIMA(p,d,q)$로 세개의 차수를 이용하여 나타내며 각각 p는 AR모형, q는 MA모형 과의 관계를 나타내며, d는 ARIMA에서 ARMA로 정상화할 때 몇 번 차분 했는지를 나타낸다.
 q=0 인 경우, d번 차분하면 AR(p) 모형, 즉, 현시점의 자료가 p시점 전까지의 자료들로 설명이 되는 p차 자기회귀모형이 된다. 분해시계열 시계열에 영향을 주는 요인을 시계열에서 분리해 분석하는 방법이다.

 

1. 추세요인
시간에 따른 전체적인 변화의 경향성이 있는 경우로, 꼭 선형적일 필요는 없다.
2. 계절요인
고정된 주기(요일, 월, 계절 등)에 따라 자료가 변화하는 경우 계절요인이 있다고 한다.
3. 순환요인
명백한 이유가 없이 알려지지 않은 주기를 가지고 변화하는 경우 순환요인이 있다고 한다.
4. 불규칙요인
위 세가지의 요인으로 설명 할 수 없는 회귀분석에서 오차에 해당하는 요인을 불규칙 요인이라 한다.

 

실습

(a) 아스완 댐에서 측정한 나일강의 연간 유입량 (b) 영국의 월별 폐질환 사망자

 (a)의 경우, 계절성을 보이지 않으며, 정상성 역시 만족하지 못한다.(평균이 계속 변화한다.) 반면, (b)의 경우, 매년 일정한 주기별로 사망자 수가 변화하는 계절성을 보인다.

ARIMA 모형

(a) 나일강 유입량 데이터의 1차 차분

 위의 그래프는 나일강 유입량의 차분($Z'_t := Z_t-Z_{t-1}$) 데이터이다. 차분하는 것은 추세요인이나 계절요인을 없애거나 줄이는데 도움이 될 수 있다. $Z_t$ 와는 달리 어느정도 정상성을 보이는(평균이 0으로 일정한) 것을 알 수 있다. 

자기상관함수와 편자기상관함수

 자기상관함수 $\rho_k$의 정의는 아래와 같다.
$\rho_k := corr(Z_t,Z_{t-k})$
 즉, 현재의 자료가 k 이전 시점의 자료와 얼마나 상관되어 있는가를 나타낸다. 또한 편자기상관함수의 경우, $\phi_{kk}$의 정의는 아래와 같으며,

$\phi_{kk} := corr(e_{t},e_{t-k})$

여기서 e_{t}는 $Z_{t-1}$부터 $Z_{t-k}$까지의 데이터들로 $Z_t$에 대하여 선형회귀분석을 한 결과이고, $e_{t-k}$는 $Z_{t-k}$만으로 $Z_t$에 대하여 회귀분석한 결과를 나타내며, 편자기상관함수는 결국 $Z_{t-1}, ... Z_{t-k-1}$을 제외하고 오직 $Z_{t-k}$만으로 $Z_t$값을 얼마나 설명할 수 있는지를 나타낸다.

(a) $Z'_t$ 의 자기상관함수 그래프 (b) 편자기상관함수

 위의 그래프를 보면 lag=0 일때는 자기자신과 자기자신의 상관관계이므로 당연히 1이 되고, lag=1, 8 일때, ACF의 값($\rho_{k=1,8}$)이 유의수준 이상의 값을 보여주는데, 이는 $Z_t$가 $Z_{t-1}, Z_{t-8}$ 과 상관관계가 있음을 의미한다. ACF 그래프는 평균이동모형의 차수를 알아내는데에 도움이 될수 있는데, q 값 이후 급격히 0에 가까워지는 것은 MA(q) 모형의 특징이다.

 또한, 편자기상관함수의 경우, lag가 커짐에 따라 서서히 0으로 떨어지는 경향성을 보여주는데, 이는 자기회귀 모형의 특징이다. AR(p) 모형의 경우, PACF 값이 p값 이후 급격히 0으로 감소한다. 

 

 

 

Reference

1. 데이터 분석 전문가 가이드, 한국데이터진흥원

2. https://freshrimpsushi.tistory.com/1209

3.https://datascienceschool.net/view-notebook/8030f5931c1b4cf68a46c2a194b3a1c6/

반응형

'이론, 자격증 > ADsP' 카테고리의 다른 글

ADsP 1과목 데이터의 이해  (0) 2020.02.17

+ Recent posts