알고리즘 문제/이론

다이나믹 프로그래밍

2023. 6. 21. 18:00
목차
  1. 정의
  2. 조건
  3. 예시) 피보나치 수열
  4. 하향식
  5. 탑다운 VS 보텀업
  6. 다이나믹 프로그래밍 VS 분할 정복
  7. 다이나믹 프로그래밍 문제에 접근하는 방법

정의

  • 다이나믹 프로그래밍은 메모리를 적절히 사용하여 수행 시간 효율서을 비약적으로 향상시키는 방법이다.
  • 이미 계산된 결과(작은 문제는) 별도의 메모리 영여게 저장하여 다시 계산하지 않도록 합니다.
  • 다 프로그래밍의 구현은 일반적으로 두가지 방식(탑다운 보텀업) 으로 구성 됩니다.
  • 동적 계획법
    • 자료구조에서 동적 할당은 프로그램이 실행되는 도중에 실행에 대한 메모리를 할당하는 기법

조건

  1.  최적 부분 구조
    1. 큰 문제를 작은 문제로 나눌 수 있으며 작은 문제의 답으 모아서 큰 문제를 해결할 수 있습니다.
  2. 중복되는 부분 문제
    1. 동일한 작은 문제를 반복적으로 해결해야합니다.

예시) 피보나치 수열

public class fibonacci {
    // 피보나치 함수 재귀함수로 구현
    public static int fibo(int x){
        if(x==1 || x ==2){
            return 1;
        }
        return fibo(x-1) + fibo(x-2);
    }
    public static void main(String[] args) {
        System.out.println(fibo(4));
    }
}

하향식

메모이제이션(Memoization)

  • 한번 계산한 결과를 메모리 공간에 메모하는 기법이다
    • 같은 문제를 다시 호출하면 메모했던 결과를 그대로 가져옵니다,
    • 값을 기록해 놓는다는 점에서 캐싱이라고 합니다.

탑다운 VS 보텀업

  • 탑다운(메모이제이션) 방식은 하향식 보텀업 방식 상향식 이라고 한다.
  • 다이나믹 프로그램의 전형적인 형태는 보텀업 방식입니다.
    • 결과 저장용 리스트는 DP 테이블이라고 부릅니다.
  • 메모이제이션은 이전 계산된 결과를 일시적으로 기록해 놓은 넓은 개념을 의미

다이나믹 프로그래밍 VS 분할 정복

  • 다이나믹 프로그래밍과 분할 정복은 모두 최적 부분 구조를 가질 때 사용 할수 있습니다.
    • 큰문제를 작은 문제로 나눌수 있으며 작은 문제의 답을 모아서 큰 문제를 해결할 수 있는 상황
  • 다이나믹 프로그래밍과 분할 정복의 차이점은 부분 문제의 중복입니다.
    • 다이나믹  프로그래밍 문제에서는 각 부분 문제들이 서로 영향을 미치며 부분 문제가 중복됩니다.
    • 분할 정복 문제에서는 동일한 부분 문제가 반복적으로 계산되지 않습니다.

다이나믹 프로그래밍 문제에 접근하는 방법

  • 주어진 문제가
  • 다이나믹 프로그래밍 유형임을 파악하는 것이 중요합니다.
  • 가정 먼저 그리디, 구현, 완전 탐색등의 아이디어로 문제를 해결할수 있는지 검토
    • 다른 알고리즘으로  풀이 방법이 떠오르지 않으면 다이나믹 프로그래밍을 고려
  • 일단 재귀함수로 비효율인 완전 탐색 프로그램을 작성한 뒤에 작은 문제에서 구한 답이 큰 문제에서 그대로 사용될 수 있으면, 코드를 개선하는벙법을 사용
  • 일반적인 코딩 테스트 수준에서는 기본 유형의 다이나믹 프로그래밍 문제가 출제 되는 경우가 많습니다. - 그냥 보기에 찾아내기 힘들기 때문에 많은 시간이 소모된다.
저작자표시 (새창열림)

'알고리즘 문제 > 이론' 카테고리의 다른 글

이진 탐색  (0) 2023.06.13
그래프 탐색 알고리즘 : DFS/BFS  (0) 2023.05.15
이것이 코딩 테스트이다. 게임 개발(구현)  (0) 2023.05.14
구현(Implementaion)  (0) 2023.05.11
정렬 알고리즘  (0) 2023.04.06
  1. 정의
  2. 조건
  3. 예시) 피보나치 수열
  4. 하향식
  5. 탑다운 VS 보텀업
  6. 다이나믹 프로그래밍 VS 분할 정복
  7. 다이나믹 프로그래밍 문제에 접근하는 방법
'알고리즘 문제/이론' 카테고리의 다른 글
  • 이진 탐색
  • 그래프 탐색 알고리즘 : DFS/BFS
  • 이것이 코딩 테스트이다. 게임 개발(구현)
  • 구현(Implementaion)
가끔개발
가끔개발
가끔개발
가끔쓰는개발블로그
가끔개발
전체
오늘
어제
  • 분류 전체보기 (75)
    • 오류모음집 (8)
      • Ohouse버그 (6)
    • 포트폴리오 (14)
      • ohouseClone (12)
    • JAVA&Spring (4)
      • Settting (3)
    • Back-end (4)
    • 알고리즘 문제 (20)
      • 이론 (6)
      • DFS&BFS (2)
      • 이진탐색 (1)
      • 다이나믹 프로그래밍 (0)
      • 프로그래머스 (11)
    • 개발 잡동산이 (0)
    • 취업 준비 (19)
      • 실전 JPA (15)
    • 개발 꿀팁 (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 개발자
  • intellj
  • 취준생
  • programing
  • CS
  • 신입
  • java
  • 자바
  • 면접
  • 기술면접
  • 동빈나
  • 이것이 코딩 테스트이다
  • 백엔드
  • Spring
  • 취준

최근 댓글

최근 글

hELLO · Designed By 정상우.
가끔개발
다이나믹 프로그래밍
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.