동적 프로그래밍에 대한 "동적"이란 무엇입니까?


9

내 선배 중 한 사람이 면접을했는데 왜 이것이 역동적인지 물었습니다. 그는 대답 할 수 없었고 인터뷰를 포기한 후에는 그것에 대해 역동적 인 것이 없다고 말했습니다. 그것은 믿기 어렵습니다.

하위 문제가 런타임 중에 해결되어 최종 목표를 달성하는 데 사용된다는 사실을 의미합니까? 런타임 중에 발생하는 동적 메모리 할당처럼?

[대답]

본인은이 있어야 죄송합니다, 질문을하기 전에 위키 문서를.


2
짧은 대답은 이름 일뿐입니다. 문자적인 의미를 가질 필요는 없습니다.
유발 Filmus

4
논란의 여지가 있지만 DP (테이블 채우기)의 일반적인 구현은 알고리즘이 얻을 수있는만큼 정적 인 것입니다.
Raphael

답변:


1

나는 항상 동적 프로그래밍을 사용하는 알고리즘 이 욕심 많은 알고리즘으로 문제를 해결할 수있을 때까지 문제 공간을 " 동적 " 으로 편집하는 것처럼 보였다는 것을 항상 직관했다 .

예를 들어, Checkerboard 문제의 경우 동적 프로그래밍 알고리즘은 전체 보드를 통과 할 때 전체 보드를 편집 한 다음 마지막으로 탐욕스러운 알고리즘을 사용할 수 있습니다 (유사하게 Dijkstra의 최단 경로 알고리즘 등).

그래도 이것이 모든 동적 프로그래밍 문제로 일반화되는지 확실하지 않습니다.


9

실제로 "동적 프로그래밍"이라는 이름에는 특별한 것이 없습니다. 이 기술 자체는 똑똑하게 풀리는 재귀에 관한 것입니다. 참조 이 질문에 Belman 의도적으로 산만로 그 이름을 선택하는 것이보고되어있는 @Jeffe 응답에서와보기를.


3
이 이론적으로 질문에 대답 할 수 있습니다 동안, 바람직 할 것이다 여기에 대한 대답의 본질적인 부분을 포함하고 참조 할 수 있도록 링크를 제공합니다.
John Dvorak

위키 백과의 누군가가 동의하지 않는 것 같습니다. 프로그래밍은 Wikibooks
kintoki

@akki : 테이블이 전혀 필요하지 않은 동적 프로그래밍의 예가 있습니다.
Massimo Cafaro

1
@akki : 예를 들어, 상향식으로 피보나치 수를 계산하려면 상수 만 필요합니다 O(1)시리즈의 다음 숫자를 계산하는 데 필요한 피보나치 수를 저장하기위한 공간; 두 문자열 길이의 가장 긴 공통 서브 시퀀스 계산mn 사용하여 수행 할 수 있습니다 O(min(m,n)) 전체 대신 공간 mn테이블 등.
Massimo Cafaro

2
@akki : DP가 재귀를 현명하게 풀어내는 것에 대해 말할 때 정확히 참조하십시오! 그러나 이름 자체는 무의미했으며 무의미합니다.
Massimo Cafaro

6

여기 흥미로운 이야기가 있습니다. Bellman은이 패러다임을 개척했습니다. 그러나 이것은 실제로 수학 연구였습니다. 당시 당시 국방 장관은 리서치수학 이라는 단어의 편집증이었다 . Bellman은 secretart가 그의 작품에 분노하고 결국 그를 곤경에 빠뜨릴 까봐 두려웠다. 그래서 약간 흐리게하기 위해 그는 Dynamic Programming 이라고 불렀지 만 그것에 대해 '동적'은 없습니다.


1
이것에 대한 소스? 정말 재미있는 이야기 인 것 같습니다.
jmite

참고로, 누가 Dynamic Programming 을 처음 고안했는지는 분명하지 않습니다 . Bellman은 최적의 동적 프로그래밍 구현이 소위 Bellman-Ford 방정식을 준수 함을 증명하는 것으로 인정 받아야합니다 . 불행히도 많은 사람들이 Bellman이 원래 아이디어의 주요 연구원이되게한다고 쉽게 믿는 것 같습니다.
Carlos Linares López

@jmite 나는 이것을 (어쩌면 일부 블로그에서) 읽었습니다 .. 나는 소스를 제공하려고 노력할 것입니다 ...
Subhayan

@jmite Jeff의 강의 노트 5: 동적 프로그래밍 및 위키 : 동적 프로그래밍 에서 스토리를 찾을 수 있습니다 .
hengxin

3

Richard Bellman은 Bellman의 단어에서 동적 프로그래밍이라고 여기에 이미지 설명을 입력하십시오

나는 RAND에서 1950 년 가을 학기를 보냈다. 첫 번째 과제는 다단계 의사 결정 프로세스의 이름을 찾는 것이 었습니다.

흥미로운 질문은 동적 프로그래밍이라는 이름은 어디에서 왔습니까? 1950 년대는 수학적 연구를하기에는 좋지 않았습니다. 우리는 워싱턴에 윌슨이라는 매우 흥미로운 신사가있었습니다. 그는 국방 장관이었고 실제로 병리학적인 두려움과 연구라는 단어에 대한 증오를 가지고있었습니다. 나는이 용어를 가볍게 사용하지 않습니다. 나는 그것을 정확하게 사용하고 있습니다. 그의 얼굴이 질식하고, 빨갛게 변했으며, 사람들이 자신의 존재로 연구라는 용어를 사용하면 폭력적이 될 것입니다. 그렇다면 수학이라는 용어에 대해 어떻게 느꼈는지 상상할 수 있습니다. RAND Corporation은 공군에 의해 고용되었으며 공군은 기본적으로 윌슨을 사장으로 사용했습니다. 그래서 나는 실제로 RAND Corporation 내에서 수학을하고 있다는 사실로부터 윌슨과 공군을 보호하기 위해 무언가를해야한다고 느꼈다. 제목, 이름, 선택할 수 있습니까? 처음에는 계획, 의사 결정, 사고에 관심이있었습니다. 그러나 계획은 여러 가지 이유로 좋은 단어가 아닙니다. 그러므로 "프로그래밍"이라는 단어를 사용하기로 결정했습니다. 나는 이것이 역동적이며 다 단계적이며 시간에 따라 다르다는 생각을 극복하고 싶었다. 나는 하나의 돌로 두 마리의 새를 죽이겠다고 생각했습니다. 고전적인 물리적 의미에서 절대적으로 정확한 의미, 즉 역동적 인 단어를 생각해 봅시다. 또한 형용사로서 매우 흥미로운 특성을 가지고 있으며 역동적 인 단어를 사소한 의미로 사용하는 것은 불가능합니다. 중대한 의미를 줄 수있는 조합에 대해 생각해보십시오. 그것은 불가능. 따라서 동적 프로그래밍이 좋은 이름이라고 생각했습니다. 의회 의원조차도 반대 할 수없는 일이었습니다.

출처 : 허리케인의 눈, Richard Bellman (자서전)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.