동적 프로그래밍의 이름을 바꿀 수 있다면…


43

동적 프로그래밍의 이름을 바꿀 수 있다면 무엇이라고 부릅니까?


1
동적 프로그래밍은 동적 프로그래밍이라고 말하고 싶습니다. 그것은 알고리즘과는 별개의 개념입니다. "동적 프로그래밍의 알고리즘 응용 프로그램"을 요청하면 더 이해가 될 것입니다.
오카모토 요시오

1
물론 dp는 dp이지만, 프로그래밍과 다이나믹은 오늘날 다른 의미를 가지므로, 다이나믹 프로그래밍을 가르 칠 때 다른 이름을 가지기를 바랍니다.
Jack

4
미안, 나는 충분히 명확하지 않았다. 제어 및 정책 계획 등의 사용, 확률 론적 동적 ​​프로그래밍 또는 알고리즘 설계 방법으로서의 동적 프로그래밍에 대한 일반적인 동적 프로그래밍에 관심이 있습니까? 여기의 주요 대상은 후자를 알고 있지만 귀하의 질문은 전자를 포함하는 매우 일반적입니다.
오카모토 요시오

1
Yoshio, 나는 우리가 많은 사람들을 밝힐 수 있기 때문에 대답의 차이점을 더 일반적인 개념으로 설명해야한다고 생각합니다.
Raphael

2
또 다른 완전히 통찰력없는 아이디어 : "학생들이 경험 한 경험을 바탕으로"Google에서 일자리를 얻는 것 "
Suresh Venkat

답변:


50

Richard Bellman의 자서전 은 의도적으로 산만하게하기 위해 "동적 프로그래밍"이라는 용어를 선택했다고 제안합니다.

1950 년대는 수학적 연구를하기에는 좋지 않았습니다. 우리는 워싱턴에 윌슨이라는 매우 흥미로운 신사가있었습니다. 그는 국방 장관이며 병리학적인 두려움과 '연구'라는 단어에 대한 증오심을 가지고있었습니다. 나는이 용어를 가볍게 사용하지 않습니다. 나는 그것을 정확하게 사용하고 있습니다. 그의 얼굴이 질식하고, 빨갛게 변했고, 사람들이 자신의 앞에서 '연구'라는 단어를 사용하면 폭력적이 될 것입니다. 그렇다면 '수학적'이라는 용어에 대해 그가 어떻게 느꼈는지 상상할 수 있습니다. RAND Corporation은 공군에 의해 고용되었으며 공군은 기본적으로 윌슨을 사장으로 사용했습니다. 그래서 나는 실제로 RAND Corporation 내부에서 수학을하고 있다는 사실로부터 윌슨과 공군을 보호하기 위해 무언가를해야한다고 느꼈다.

어떤 제목, 어떤 이름을 선택할 수 있습니까? 처음에는 계획, 의사 결정, 사고에 관심이있었습니다. 그러나 계획은 여러 가지 이유로 좋은 단어가 아닙니다. 따라서 '프로그래밍'이라는 단어를 사용하기로 결정했습니다. 나는 이것이 역동적이며 다 단계적이며 시간에 따라 다르다는 생각을 극복하고 싶었습니다. 나는 한 마리의 돌로 두 마리의 새를 죽일 것이라고 생각했습니다. 고전적인 물리적 의미에서 절대적으로 정확한 의미, 즉 '동적'을 갖는 단어를 보자. 또한 형용사로서 매우 흥미로운 특성을 가지고 있으며, '동적'이라는 단어를 중대하게 사용하는 것은 불가능합니다. 중대한 의미를 줄 수있는 조합에 대해 생각해보십시오. 그것은 불가능. 따라서“동적 프로그래밍”은 좋은 이름이라고 생각했습니다. 의회 의원조차도 반대 할 수없는 일이었습니다.

(자신의 AI 교과서 아웃으로 러셀과 노르 빅 포인트는, 그러나,이 이야기는 벨맨 먼저 구 "동적 프로그래밍"을 사용했다. 진리의 창조적 꾸밈해야 1952 년 , 그리고 찰스 어윈 윌슨은 1953까지 국방 장관이되지 않았다. )

어쨌든 Bellman의 독창적 인 동기 부여는 다단계 계획을 제안 하지만 적어도 알고리즘 목적을 위해 음절 수가 적은 간단한 상향식 재귀 와 같은 것을 선호합니다 .


10
물론, 제가 정말로 하고 싶은 것은 “Bellman 's Equation”의 이름을 바꾸는 것입니다.
Jeffε

2
귀하의 답변이 여기에 사용되었습니다 : biostar.stackexchange.com/questions/17954
Pierre

28

DP에는 두 가지 중요한 측면이 있습니다. (1) 하위 문제 정의 (즉, 정수, 정점, 정점의 하위 집합 등으로 색인 된 다차원 배열 일 수있는 "테이블"설정) 및 (2) 재귀 적으로 해결 하위 문제. 나는 두 가지 측면을 모두 나타내는 이름으로 "표 / 표식 재귀"를 제안합니다.


6
표 재귀에는 좋은 느낌이 듭니다.
Suresh Venkat

21

메모 화 는 상당히 일반적인 변형입니다.


8
메모가 사용되지만 dp를 특성화하지는 않습니다.
Jack

20
바로 그거죠. 메모 화는 우연히 동적 프로그래밍입니다.
Jeffε

@ 교수님 에릭슨-아주 잘 말했다. 나는 웃음을 멈출 수 없다.
Akash Kumar

7
그러나 DP의 새 이름을 선택하면 메모를 사용하는 것이 적합합니다. 예를 들어 "메모 화를 사용하여 편집 시간을 폴리 타임으로 계산할 수 있습니다".
Noam

다이내믹 프로그래밍은 특별한 메모 작성의 경우이며, 자연스럽게 적용되는 평가 순서를 따르지 않고 제어 흐름을 명시 적으로 지시합니다. 재귀 사양 대신 테이블을 채우는 것을 너무 강조하기 때문에 일반적으로 배운 방식은 부끄러운 일입니다. 마법처럼 생긴다.
Neil Toronto

8

split-and-conquer 와 함께 사용하기 위해 splice-and-combine 이라고 말하겠습니다 .

나는 보통 두 단어를 사용 스플 라이스를 하고 결합 교육 / DP를 설명하면서, 스플 라이스-앤-결합을 명시 적으로 사용하지는 않습니다. 때로는 두 패러다임을 대조하기 위해 겹치는 분할과 정복 을 사용했습니다.


6

알고리즘 디자인의 동적 프로그래밍에 대한 최근 강의 후 학생들에게이 기술에 대한 새로운 이름을 제안하도록 요청했습니다. "터프 프로그래밍"에 만족하면서 기술을 더욱 기억에 남을만한 무언가를 원했습니다. 여기서 논의한 후, 하향식과 하향식의 두 가지 이름을 제안 할 수 있습니다 :
Multiway-Divide 및 Memoized-Conquer (일명 Divide ^ M & Conquer ^ M) 및
모든 하위 문제 병합 (일명 Merge_all)


1
나는 일반적인 분할 및 정복과의 강한 연관성을 만드는 것이 (Mergesort에서와 같이) 좋은 생각이라고 생각하지 않습니다. 하위 문제는 독립적으로 해결되며 두 개의 결과 만 병합됩니다. DP에서 점검 된 하위 문제점은 독립적이지 않으며 모든 조합이 점검됩니다. (둘 다 대략적인 용어). 따라서 나는 이름이 유사성을 만드는 것이 아니라 차이점을 강조해야한다고 생각합니다.
Raphael

@Raphael, 나는 강력한 협회를 만들 위험에 대한 우려를 공유하지만 차이점에 대한 귀하의 진술에 동의하지 않습니다. DP에서는 하위 문제에 대한 솔루션을 공유하더라도 하위 문제 "독립적으로 해결" 하는 것이 중요합니다 . 나는 보통 어떤 오라클이 당신에게 올바른 분열을 말하면 분열되고 정복 될 것이지만, 그리스어를 할 줄 모르기 때문에 (나의 PhD 고문과는 달리) 가능한 모든 분열을 시도해야합니다.
Jack

2
하위 문제는 개념적으로 독립적입니다. 그러나 나는 당신이 지적한 것처럼 동일한 부분 결과를 사용하여 그들과 관련이있었습니다. 이것은 DP를 D & C와 분리시킨다. 예를 들어 전자와 달리 하위 문제를 여러 번 계산하지 않고 (또는 결과를 전달하지 않고) 후자를 병렬화 할 수 있기 때문이다. 귀하의 비유는 훌륭하지만이 경우 올바른 구분을 찾는 것이 문제의 중요한 부분이므로 이름을 보증하지 않습니다. 그러나 DP가 그 추론을 바탕으로 D & C의 일반화라고 말할 수 있다고 가정합니다.
Raphael

@Raphael, pedantic은 유감이지만, 이것은 교수법에 관한 질문이므로, 하위 문제 독립성의 개념이 명확 해지기를 원하며 "개념적으로 독립적"이라고 말하는 것이 정확하지 않습니다. 나누기를 시도 할 때 생성 한 하위 문제에 종속 관계가 없을 수 있습니다. 다른 의견은 DP 알고리즘의 단계에 중점을 둡니다. 먼저 해결해야 할 문제를 정확하게 정의하는 데 중점을 둡니다. 내가 가장 좋아하는 예 : 간단한 다각형의 최소 무게 삼각 측량 및 최소 볼록 분해 ( cs.unc.edu/~snoeyink/demos/convdecomp/MWTDemo.html )
Jack

펜던트 형인 것은 괜찮습니다. 그러나 단어 선택의 교훈적인 수입을 고려하십시오. 하위 문제는 독립적이며 학생들에게 계산을 분리 하지 않는 알고리즘을 제공 하지만 실제로는 "인터리브 된"계산에 크게 의존합니다. 나는 그것이 매우 혼란 스러울 수 있다고 생각합니다. 따라서 어떤 시점에서 개념 / 수학적 / 최적화 / ...와 계산 독립성을 분리해야합니다.
Raphael


2

나는 최근에 몇몇 동료들과 이것을 논의했고, 격렬한 토론 후에 우리는 테이블 형식의 콜 캐싱을 생각해 냈습니다 .


3
그것은 아웃소싱 된 콜센터에서하는 것 같습니다;)
Suresh Venkat

2

나는 유도 성 프로그래밍 (Inductive Programming) 이라는 이름을 제안 하고자한다. 또는 역 유도 프로그래밍도 가능 합니다. 그리고 예, 저에게 DP는 관념에 대한 오래된 좋은 의미에서 귀납법과 밀접한 관련이 있습니다. 메모, 캐시, 테이블 등은 기술의 요소 일 뿐이며, 크랙을 시도하는 방식의 핵심이 아닙니다.


DP와의 나의 주요 문제는 P이다. 그래서 나는이 아이디어의 팬이 아니다 ..
Suresh Venkat

1

아마도 tablefill 이라는 단어가 포함되어있을 것입니다 .


7
바. 동적 프로그래밍은 테이블 에 관한 것이 아닙니다 . 스마트 재귀에 관한 것입니다.
Jeffε

3
"문제에서 재귀 구조를 추출하고 재발로 기록"(모델링)과 "재발 된 재발을 상향식으로 해결"(알고리즘)이라는 두 가지 측면을 분리하는 것이 좋습니다. 나는 동적 프로그래밍 (알고리즘에서)이 둘 다를 참조한다고 느낀다. 이것은 선형 프로그래밍, 정수 프로그래밍, 반정의 프로그래밍 등에도 해당된다.
Yoshio Okamoto

1
때때로 테이블이 사용됩니다. 트리를 통한 동적 프로그래밍 (예 : 최대 독립 세트)은 일반적으로 반복을 기억하기 위해 테이블 ​​[= 배열]을 사용하지 않습니다. 그것은 나무를 사용하거나 어떤 경우에는 배열의 나무, 또는 나무의 배열, 또는 어떤 경우에는 직교 산의 산물을 사용합니다. 마찬가지로 dags에 대한 동적 프로그래밍 또는 제한된 트리 폭의 그래프에 대한 트리 분해에 대한 동적 프로그래밍의 경우.
Jeffε

1
기술의 이름 인 JeffE는 거의 모든 응용 분야를 다루지 않습니다. 예를 들어 "대각선 화"를 생각해보십시오. 고급 응용 프로그램의 경우 가시 영역 어디에나 대각선이 없습니다 (또는 적어도 독점적 인 작업 영역이 아님). 그러나 어쨌든 나는 "테이블 작성"에 너무 좋아하지는 않지만 초보자에게는 합리적인 이름이라고 생각합니다.
Raphael

3
이 주제에 대한 나의 2 센트. 동적 프로그래밍에는 알고리즘을 설계하는 데 두 가지 뚜렷한 측면이 있습니다. 먼저 dp의 역학을 이해하는 것이 더 빠릅니다. 더 빠른 알고리즘으로 이어지는 스마트 재귀와 메모. 두 번째 측면은 문제가 현명한 재귀를 인정하고 문제를 일으킬 수 있음 을 인식 하는 방법 입니다. 둘 다 가르치는 것이 중요합니다. 후자의 경우, 일반적인 경우는 제한된 상호 작용으로 명확하게 강조 할 가치가있는 분할과 정복입니다.
찬드라 체 쿠리

1

재귀 뷰 또는 재귀 수평선


게으른 수평선? 많은 결과가 필요할 때까지 계산을 지연시킵니다. DP는 재귀적일 필요는 없습니다.
Chad Brewbaker

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