동적 프로그래밍 메모리 낭비 질문
194
작성한 질문수 121
안녕하세요!
동적 프로그래밍 방식을 사용하면 for 문 안에 table[i] = table[i-1] + table[i-2] 를 볼 수 있었습니다.
int[] dp = new int[n + 1];
이런식으로 객체를 계속 만들어서 이에 대한 메모리 낭비(?) 는
같은 계산이 반복되어서 발생하는 낭비보다 훨씬 덜 한 것인가요 ?
또한
메모리제이션이랑 동적프로그래밍 알고리즘을 구현하는 것은 시간 복잡도를 줄이기 위함인가요? 아니면 메모리 낭비를 방지하기 위함인가요 ? 아니면 시간복잡도가 곧 메모리 낭비와 상당히 관련이 있기에 둘다 신경써준다고 봐야하나요 ?
답변 1
0
안녕하세요 ghuhan18님!
어떤 문제를 해결할 때 CPU와 메모리 모두를 적게 사용하는 것이 이상적입니다.
하지만 두 가지 모두를 줄이는 방법은 매우 어려운 문제입니다.
보통 CPU 리소스를 아끼고 싶다면 메모리 리소스를 사용(낭비)하고 메모리 리소스를 아끼고 싶다면 CPU 리소스를 사용(낭비) 하게 됩니다.
만약 프로그램이 실행되는 환경에서 CPU 리소스를 줄여야 한다면 메모리를 더 사용하는 쪽으로, 메모리 리소스를 줄여야 한다면 CPU를 더 사용하는 방향으로 프로그래밍 해야합니다. 이 부분은 개발자가 직접 판단해서 하시면 됩니다.
메모이제이션과 타뷸레이션 모두 CPU를 덜 사용하기 위해서 메모리를 더 사용(낭비) 하는 기법입니다.(메모이제이션이 더 많은 메모리 사용)

여담으로 CPU와 메모리의 성능 격차가 많이 벌어지고 있습니다.
CPU의 발전 속도가 메모리에 비해 훨씬 빠르죠.
이는 곧 CPU보다는 메모리가 부족해질 경우가 발생할 수 있다고 생각할 수 있습니다.
많은 경우에서 CPU 리소스를 아끼기 위해서 메모리를 더 사용하지만 미래에는 상황이 바뀔 수 있을 수도 있습니다.
일부 업계에서는 CPU를 더 사용하는 방식을 도입하기도 했습니다.
궁금증이 해결되셨나요? 😊
연결리스트 삽입삭제 O(1) 아닌가요?
0
5
2
큐의 마지막 데이터가 head에 위치해야 하는 이유가 궁금합니다.
0
71
2
이중연결 리스트 데이터 삭제시 질문이 있습니다.
1
64
2
자바스크립트 배열은 동적이 아닌가요?
1
87
2
자바스크립트 배열
0
77
2
코테에서 링크리스트 자료구조를 사용해야 하면, 이번 강의에서 구현한 메서드들도 모두 직접 구현하면 되나요?/
0
153
2
공부 방식 질문 드립니다.
1
117
2
메모이제이션과 타뷸레이션 관련해서 질문드립니다.
1
169
2
병합정렬에서 질문이 있습니다.
2
142
1
병합정렬 질문 있습니다.
1
137
5
데이터 삽입, 삭제 함수 오류 범위 설정
0
158
2
해시 테이블에서 질문이 잇습니다.
2
128
2
시간복잡도 계산 시 1회 연산당 연산량은 왜 고려하지 않는 건가요?
1
147
2
터미널 설정
0
114
2
2:13분 관련 질문입니다
0
91
1
8:47초경부터 9:00초까지 질문입니다.
1
135
2
tail을 삭제하는 경우에 관련해서 질문이 있습니다.
0
107
1
2:36초 head 위치가?
1
111
2
환경구축강의 중 터미널 파일 실행오류
0
162
2
4:58 이중for문 질문있습니다.
0
104
1
hanoi함수 처음 호출에 대해서 여쭤봅니다.
1
133
2
해쉬테이블 데이터 관련해서 질문있습니다.
0
149
2
자바스크립트 Map과 어떤 차이가 있나요??
0
205
2
질문이있습니다.
0
104
1





