[지연/week3] 동적 계획법

동적 계획법 - Dynamic Programming ; DP

중복된 계산을 피하는 방법ㄷ

1. 메모이제이션 (Memoization) : Top-down 방식

계속 중복되는 계산을 제거하기 위한 테크닉. 계산된 값을 버리지 말고 저장한다는 뜻이다. 이렇게 저장되는 배열을 ‘캐시’라고 하며, 중간에 저장하는걸 ‘캐싱한다’라고 부른다.

2. Bottom-up 방식

가장 기본적인 값으로 특정한 값을 계산하려고 하는 것을 Bottom-up 이라고 한다. 이런 Bottom-up 방식으로 계산하는 테크닉을 다이나믹 프로그래밍이라고 한다.

Memoization vs. Dynamic Programming

  1. 메모이제이션이나 다이나믹 프로그래밍 둘 다 순환식을 계산하는 방법이다.
  2. 모두 동적 계획법의 일종이라고 본다.
  3. 메모이제이션은 Top-down 방식이고 실제 필요한 sub problem을 푼다.
  4. 다이나믹 프로그래밍은 Bottom-up 방식이며 재귀에 수반되는 overhead가 없다.

예시 - 피보나치 수열

재귀로 풀면 보통 시간초과가 난다. 그래서 DP로 바꿔서 해결한다.

1.메모이제이션을 이용한 방법

    int memo[100];

    int fibonacci(int n){
        if(n<=1) //0번째, 1번째 피보나치 수
            return n; 

        if(memo[n]!= 0) //메모가 있는지 확인. 0으로 초기화 되었으므로 0이 아니라면 메모가 쓰임.
            return memo[n];
        
        memo[n] = fibonacci(n-1) + fibonacci(n-2); //작은 문제로 분할

        return memo[n];
    }

하위 결과를 memo에 저장해놓는다. 여기서 memo는 캐시이다.

2. Bottom-up 방식을 이용한 방법

    int f_data[N] = {1, 1}; //N은 정의하기 나름
    int last_pos = 1; //마지막으로 계산한 지점. 이 코드에선 이미 f_data[1]까지 정의되어 있기 때문에 1로 초기화한다.

    int f(int n){ //피보나치 수열의 제 n항을 구한다. 배열의 관점에서는 n-1번째 요소를 구하는 것.
        int i;

        if(f_dat[n-1]==0){ //아직 구한 적이 없으면 구한다.
            for(i=last_pos+1; i<n; ++i){
                f_data[i] = f_data[i-1] + f_data[i-2];
            }
            last_pos = n-1;
        }

        return f_data[n-1];
    }

2019

[세호/week6] 그래프의 개념과 정의, 탐색 방법

1 분 소요

그래프 그래프는 유한하고, 하나 이상의 원소를 갖는 Vertex 집합과 Vertex의 부분집합의 순서있는 쌍으로 이루어진 Edge의 집합으로 이루어진다. Edge는 Vertex의 쌍 (v1, v2)와 같이 나타내고, 방향그래프에서 순서는 유의미하다 헷갈리는 그래프 관련 ...

[지연/week4] 선형 자료구조 - 큐, 스택, 데크

최대 1 분 소요

자료구조란? 자료구조(data structure)는 전산학에서 자료를 효율적으로 이용할 수 있도록 컴퓨터에 저장하는 방법이다. 신중히 선택한 자료구조는 보다 효율적인 알고리즘을 사용할 수 있게 한다.

[세호/week2] 분할정복과 퀵정렬, 병합정렬

1 분 소요

분할 정복이란 문제를 둘 이상의 부분으로 나누어, 부분 문제에 대한 답을 재귀 호출을 이용해 계산하는 알고리즘 디자인. 분할 정복을 적용하기 위해서는 .. 문제를 둘 이상의 부분 문제로 나누는 자연스러운 방법이 있어야하고 부분 분제의 답을 조...

Algorithm Study day 1

최대 1 분 소요

Algorithm Study Week1 일자 : 2019년 10월 7일 월요일 Member : 이세호, 김범철, 이지연, 이지혜 “프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략” 2, 3, 4장 키워드 : 시간복잡도와 Big-O 표기 Algospot 튜토리...

Week1 Keyword

최대 1 분 소요

Algorithm Study Week1 일자 : 2019년 10월 7일 월요일 Member : 이세호, 김범철, 이지연, 이지혜 “프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략” 2, 3, 4장 키워드 : 시간복잡도와 Big-O 표기 Algospot 튜토리...

맨 위로 이동 ↑