動的プログラミングの名前を変更できる場合…


43

動的プログラミングの名前を変更できるとしたら、それを何と呼びますか?


1
動的計画法は動的計画法だと思います。これはアルゴリズムとは別の概念です。「動的プログラミングのアルゴリズム的応用」を尋ねるなら、それは私にとってもっと理にかなっているでしょう。
岡本良夫

1
もちろん、dpはdpですが、プログラミングと動的の両方が今日は何か異なることを意味しているため、動的プログラミングを教えるときは、別の名前にしたいと思います。
ジャック

4
申し訳ありませんが、私は十分に明確ではありませんでした。制御およびポリシー計画などでの使用を含む一般的なダイナミックプログラミングに興味がありますか?さらに、確率的ダイナミックプログラミングに興味がありますか?それとも、アルゴリズム設計の方法としてのダイナミックプログラミングに興味がありますか?ここの主な聴衆は後者のみを知っていますが、あなたの質問は前者を含む非常に一般的です。
岡本芳雄

1
ヨシオ、私たちの多くを啓発することができるように、答えの違いよりも一般的な概念を説明する必要があると思います。
ラファエル

2
もう1つの完全な頬のないアイデア:「Googleで仕事を得るもの」-私の学生の経験に基づいて:)
Suresh Venkat

回答:


50

リチャード・ベルマンの自伝は、彼が「動的プログラミング」という用語を意図的に気を散らすものに選んだことを示唆しています。

1950年代は数学的研究にとって良い年ではありませんでした。ワシントンには、ウィルソンという非常に興味深い紳士がいました。彼は国防長官であり、実際には病理学上の恐怖と「研究」という言葉への憎悪がありました。用語を軽く使用していません。私はそれを正確に使用しています。彼の顔が充満し、赤くなり、人々が彼の前で「研究」という用語を使用すると、彼は暴力的になります。それから、彼が「数学」という用語についてどのように感じたか想像できます。RAND Corporationは空軍に雇われており、空軍は本質的にウィルソンをボスとして雇っていました。したがって、ウィルソンと空軍を、RAND Corporation内で数学を実際にやっているという事実から守るために、何かしなければならないと感じました。

どのようなタイトル、名前、選択できますか?そもそも、計画、意思決定、思考に興味がありました。しかし、計画は、さまざまな理由から良い言葉ではありません。そのため、「プログラミング」という言葉を使用することにしました。これは動的であり、多段階であり、時変であるという考えを理解したかったのです。1石で2羽の鳥を殺そうと思いました。古典的な物理的な意味で、絶対に正確な意味を持つ言葉、すなわち「動的」を取り上げましょう。また、形容詞として非常に興味深い特性があり、それは軽dynamic的な意味で「動的」という言葉を使用することは不可能です。軽pe的な意味を与える可能性のある組み合わせを考えてみてください。それは不可能だ。したがって、「動的プログラミング」は良い名前だと思いました。それは下院議員でさえも反対できないものでした。

(そのAIの教科書でoutとしてラッセルとNorvig点は、しかし、この話は真実の創造的な装飾でなければなりません。ベルマンは、最初のフレーズ「動的計画」を使用し、1952年に、そしてチャールズアーウィンウィルソンは 1953年まで国防長官になっていませんでした。 )

とにかく、ベルマンの元々の動機は多段階の計画を示唆していますが、少なくともアルゴリズムの目的では、音節が少ないだけの質素なボトムアップ再帰のようものが好きです。


10
もちろん、私が本当にやりたいの、「ベルマンの方程式」と改名するか、コンピューター科学者が「あらゆる再発」と呼んでいることです。
ジェフス

2
あなたの答えはここで使用されました:biostar.stackexchange.com/questions/17954
ピエール

28

DPには2つの重要な側面があります。(1)サブ問題を定義する(つまり、整数、頂点、頂点のサブセットなどでインデックス付けされた多次元配列である可能性のある「テーブル」を設定する)副問題。両方の側面を指す名前として、「表形式/表形式の再帰」を提案します。


6
表形式の再帰にはいい感じがします。
スレシュヴェンカト

21

メモ化はかなり一般的なバリアントです。


8
メモ化が使用されますが、dpは特徴付けられません。
ジャック

20
まさに。メモ化は、偶然の動的プログラミングです。
ジェフ

@エリクソン教授-非常によく言った。笑いが止まらない。
Akashさんクマー

7
それでも、DPの新しい名前を選択できるようになった場合、メモ化を使用することは適切です。例えば、「編集距離は、メモ化を使用してポリタイムで計算できます」。
ノアム

動的プログラミングはメモ化の特殊なケースであり、自然な適用可能な評価順序に従うのではなく、明示的に制御フローを指示します。再帰的な仕様ではなく、テーブルへの記入を非常に重視しているため、通常の方法で教えられるのは残念です。それは魔法のようです。
ニールトロント14

8

分割統治に行くには、スプライスアンドコンバインと言います。

私は通常、DPを教えたり説明したりするときに、スプライス結合の両方の単語を使用します。ただし、明示的にsplice-and-combineを使用しません。2つのパラダイムを対比するために、重複分割統治を使用することがありました。


6

アルゴリズム設計における動的プログラミングに関する最近の講義の後、学生にこの手法の新しい名前を提案するように依頼しました。私は「タフなプログラミング」に楽しまれていましたが、このテクニックをより思い出深いものにしたかったのです。ここでの議論の後、トップダウン用とボトムアップ用の2つの名前を提案することができます:
Multiway-Divide and Memoized-Conquer(別名Divide ^ M&Conquer ^ M)、および
すべてのサブ問題をマージ(別名Merge_all)


1
私は、通常の分断と征服(Mergesortのように)との強い結びつきを作ることは良い考えだとは思いません。そこでは、サブ問題は個別に解決され、2つの結果のみがマージされます。DPでは、チェックされたサブ問題は独立しておらず、すべての組み合わせがチェックされます。(両方とも大雑把に)。したがって、名前は類似性を生み出すのではなく、違いを強調するべきだと思います。
ラファエル

@Raphael、私は強い連想を作り出すことの危険性についての懸念を共有していますが、違いの声明には同意しません。DPでは、サブサブ問題の解決策が共有されていても、サブ問題「独立して解決」されることが重要です。私は通常、いくつかの神託があなたに正しい分裂をあなたに言ったら、それは分裂して征服するでしょうが、ギリシャ語を話さないので(私の博士課程アドバイザーとは異なり)、可能なすべての分裂を試さなければなりません。
ジャック

2
はい、サブ問題は概念的に独立しています。しかし、あなたが指摘しているように、私は同じ部分的な結果を使用してそれらに関連していました。これにより、DPとD&Cが分離されます。たとえば、前者とは異なり、副問題を複数回計算する(または結果を伝える)ことなく後者を並列化することが可能です。あなたのアナロジーはいいですが、正しい部門を見つけることは問題の重要な部分であるため、この場合の名前を保証しません。ただし、DPはその推論に基づいたD&Cの一般化であると言えます。
ラファエル

@Raphael、つまらないので申し訳ありませんが、これは教育に関する質問なので、サブ問題の独立性の概念を明確にしたいと思います。「概念的に独立している」というだけでは正確ではありません。除算を試みると、生成するサブ問題に依存関係がない場合があります。他のコメントは、DPアルゴリズムの手順に焦点を当てています。私はまず、解決すべき問題を正確に定義することに集中することを好みます。私のお気に入りの例:分重量三角測量とシンプルなポリゴン(の分凸分解cs.unc.edu/~snoeyink/demos/convdecomp/MWTDemo.html
ジャック・

懸命であることが大丈夫です。しかし、単語の選択の教訓的なインポートを検討してください。サブ問題は独立していることを生徒に伝え、計算を分離せ、実際には「インターリーブ」計算に大きく依存するアルゴリズムを与えます。それは非常に混乱しやすいと思います。そのため、ある時点で概念/数学/最適化/ ...と計算の独立性を実際に分離する必要があります。
ラファエル


2

私は最近、これを何人かの同僚と議論しましたが、白熱した議論の後、表形式のコールキャッシングを思いつきました。


3
それはあなたがアウトソーシングされたコールセンターで何かするように聞こえます;)
Suresh Venkat

2

私たちの時代からオイラーの古き良き時代までの一種の橋のようなものとして、帰納的プログラミングという名前をお勧めします、ケプラーら または、逆帰納的プログラミングでさえ可能です。そして、はい、私にとって、DPは古い概念の概念で、誘導に強く関連しています。メモ化、キャッシュ、テーブルなどは単なるテクニックの要素であり、物事を解読するアプローチの中核ではありません。


DPでの私の主な問題はPです。したがって、私はこのアイデアのファンではありません。
SureshVenkat

1

おそらくtablefillという単語が含まれているもので、これが起こるためです。


7
ああ。動的プログラミングはテーブルに関するものではありません。それはスマートな再帰についてです。
ジェフ

3
「問題から再帰構造を抽出し、再帰として書き留める」(モデリング)と「取得した再帰をボトムアップで解決する」(アルゴリズム)の2つの側面を分離する方が良いと思います。私は両方を指す(アルゴリズムにおける)動的プログラミングを感じ、これは、線形プログラミング、整数計画、半正定値計画、等の場合である
義雄岡本

1
テーブルが時々使用されます。ツリー上の動的プログラミング(例:最大独立セット)は、通常、テーブル[= array]を使用して繰り返しをメモしません。ツリー、場合によっては配列のツリー、ツリーの配列、または場合によってはツリーのデカルト積を使用します。同様に、ダグ上の動的プログラミングまたは有界ツリー幅のグラフのツリー分解上の動的プログラミングの場合。
ジェフ

1
技術の名前であるJeffEは、すべてのアプリケーションをカバーすることはほとんどありません。たとえば、「対角化」を考えます。高度なアプリケーションでは、視界のどこにも対角線がありません(または少なくとも排他的なアクション領域はありません)。しかし、とにかく「テーブルの塗りつぶし」はあまり好きではありませんが、初心者にとっては合理的な名前かもしれません。
ラファエル

3
このトピックに関する私の2セント。動的プログラミングには、アルゴリズムを設計するための2つの異なる側面があります。まず、dpの仕組みを理解することです。スマート再帰とメモ化により、アルゴリズムが高速になります。2番目の側面は、問題がスマートな再帰を認め、それを思い付く可能性があることを認識する方法です。両方とも教えることが重要です。後者の場合、一般的なケースは、限られた相互作用での分割と征服であり、私の見解では明示的に強調する価値があります。
チャンドラチェクリ14


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.