작성
·
83
·
수정됨
1
안녕하세요!
동적 프로그래밍 방식을 사용하면 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를 더 사용하는 방식을 도입하기도 했습니다.
궁금증이 해결되셨나요? 😊