감사쟁이야
감사쟁이의 성장기록
감사쟁이야
  • 분류 전체보기 (130)
    • Java-Spring (0)
    • ComputerScience (0)
    • Project (64)
      • TIL, WIL (57)
      • Project Retrospect (7)
    • Problem Solving (63)
    • Book Review (1)
    • Culture & Discovery (0)
    • Daily Log (2)

블로그 메뉴

  • 홈
  • 깃허브
  • 방명록
hELLO · Designed By 정상우.
감사쟁이야

감사쟁이의 성장기록

TIL(27) 21-10-25 : Brute Force, DP, Greedy
Project/TIL, WIL

TIL(27) 21-10-25 : Brute Force, DP, Greedy

2021. 10. 28. 14:42

Facts

✅ 완전탐색 2문제

✅ DP 1문제

✅ Greedy 1문제

 

Findings

Fibonacci 공식을 Recursive와 Dynamic Programming으로 구현시 차이점

  • Recursive

f(n) = f(n-1) + f(n-2)

f(1) = 1

f(2) = 1

def fibonacci(N):
	if N == 1 or N == 2:
		return 1

	return fibonacci(N-2) * fibonacci(N-1)

 

  • Dynamic Programming

f(n) = f(n-1) + f(n-2)

f(1) = 1

f(2) = 1

계산이 중복되므로, 계산 값을 자료구조에 저장하여, 두번 이상 벌어지는 로직에 대해 그 값을 쓰게 한다.

def factorial(N):
    dp = [0 for i in range(N+1)]
    dp[1] = 1
    dp[2] = 1
    for i in range(3, N+1):
    	dp[i] = dp[i-1] + dp[i-2]
    
    return dp[N]

→ DP의 장점

  • 피보나치 함수를 재귀를 통해 값을 구하면 O(2 ^ N)이라는 값이 나오지만,
  • memorization 방법을 사용하면
    (= 계산 값을 자료구조에 저장하여, 두번 이상 벌어지는 로직에 그 값을 쓰게 하면),
    dp배열을 1번부터 N번까지 채우는  O(N)이라는 시간복잡도면 충분하다!
  • 계산 값을 자료구조에 저장하여, 두번 이상 벌어지는 로직에 그 값을 쓰게 하여,
    시간복잡도를 줄일 수 있다.

'Project > TIL, WIL' 카테고리의 다른 글

TIL(29) 21-10-28 : 서버리스 백엔드  (0) 2021.10.28
TIL(28) 21-10-27 : 서버리스 프론트엔드  (0) 2021.10.28
TIL(26) 21-10-22 : 탐색(힙, 그래프, DFS, BFS)  (0) 2021.10.23
TIL(25) 21-10-21 : 자료구조 (스택, 큐, 해쉬)  (0) 2021.10.21
TIL(24) 21-10-20 : 구현, Linked List, 이진 탐색, 재귀  (0) 2021.10.21
    'Project/TIL, WIL' 카테고리의 다른 글
    • TIL(29) 21-10-28 : 서버리스 백엔드
    • TIL(28) 21-10-27 : 서버리스 프론트엔드
    • TIL(26) 21-10-22 : 탐색(힙, 그래프, DFS, BFS)
    • TIL(25) 21-10-21 : 자료구조 (스택, 큐, 해쉬)
    감사쟁이야
    감사쟁이야
    sunzero0116@gmail.com

    티스토리툴바