2016-07-13 19 views
1

動的プログラミングを使用して解決できるすべてのプログラムは再帰を使用して解決できますが、逆も可能です。可能であれば、時間の複雑さはどのように異なるでしょうか?再帰と動的プログラミング

+0

"ダイナミックプログラミングを使用してプログラムを解決する"とは、あなたが何を意味するのかを言わない限り、実際には答えられません。一般に、それは正確に定義されたものではありません。たとえば、動的プログラミングを使用するように配列をソートするプログラムでは、どういう意味でしょうか? –

+0

私は再帰を使って行える文字列の順列を印刷するかのように一般的に尋ねました。それは動的プログラミングを使用して行うことができますか? – Zephyr

答えて

2

も同じですか?

はい。一方

、あなたが実際に依頼することを意味している場合:

も真逆もまた同様ですか?

それでは答えはいいです。再帰的アルゴリズムで解決できる問題のすべては、動的プログラミングでは合理的に解決できるわけではありません。これを強調するために、並べ替えるという1つの問題だけを考え出す必要があります。再帰アルゴリズムでソートの問題を解決するのは簡単ですが、動的プログラミングによるソートの問題を解決するための合理的なアルゴリズムはないようです。残念ながら、ここでは「妥当な」ウィーゼル語を使うことに頼らざるを得ません。なぜなら、ソートの問題を何らかの方法でダイナミックにプログラミングして、非常に扱いにくく非効率的な方法で使用できるからです。

時間の複雑さに関するご質問にはお答えできません。これは手元の問題と、どのように適用可能な動的プログラミングが問題を解決するかにかかっています。

+0

再帰を使用して計算できる文字列の順列を検索したいと仮定します。動的プログラミングを使用して同じ問題を解決できるか? – Zephyr

+0

問題には、問題の解決に役立つ動的プログラミングの2つの重要な特性、すなわち重複するサブ問題と最適なサブ構造が必要です。コンビナトリアル世代(文字列の順列を見つける)の問題は、これらの2つの重要な特性を持っていますか? – wookie919

+0

重複するサブ問題はありません。つまり、動的プログラミングを使って解決できないということですか? – Zephyr

-1

ダイナミックプログラミングは、時間と複雑さのトレードオフです。いくつかの情報をテーブルに保存するので、同じことをやり直す必要がある場合は、情報を再計算する必要はありません。

問題が自然発生的にサブプログラムに分解され、頻繁に繰り返すと、動的プログラミングが良い考えです。一方、再帰的な問題がなければ、動的プログラミングを使用することに意味はありません。

+0

質問に実際には答えません。質問は、「動的プログラミングを使用することのない点」があるかどうかとは関係ありません。これは、再帰によって解決可能な問題が動的プログラミングを使用して解決できるかどうかを示す理論的な質問です。 – nhouser9

+0

さて、私はそれを言った。動的プログラミングが一般的な再帰問題のために機能するかどうかは、計算中にサブ問題を再計算する必要があるかどうかによって異なります。繰り返しサブ状態が存在しない場合は、動的プログラミングによる利得はありません – hugomg

関連する問題