解決策がどちらのケースでも同じ時間複雑さを持つが、反復のための空間複雑性が優れている場合、反復を繰り返し選択する理由は何ですか?繰り返しの繰り返しを選択する必要がありますか?
答えて
一部のアルゴリズムでは反復を理解することがより困難です。自然に再帰的に表現できるアルゴリズムは、繰り返し表現すると分かりにくいかもしれません。再帰アルゴリズムを反復アルゴリズムに変換することも困難であり、アルゴリズムが同等であることを検証することも困難な場合があります。
再帰では、各関数呼び出しで追加の自動オブジェクトを割り当てることができます。反復的な代替策は、メモリブロックを繰り返し動的に割り当てるかまたはサイズ変更することである。多くのプラットフォームでは、自動割り当てはスピードボーナスが再帰呼び出しの速度ペナルティとストレージコストを上回るという点ではるかに高速です。 (ただし、上記のように大量の自動データの割り当てはサポートされていないため、トレードオフです)
再帰は、スタックを使って再帰をシミュレートする必要がある場合に非常に有効です。再帰はコンパイラが既にスタックを管理していることを確認し、必要なものを正確に達成します。独自の管理を開始するときには、回避しようとしていた関数呼び出しオーバーヘッドを再導入する可能性が高いだけでなく、バグのない形ですでに存在しているホイール(バグのための十分なスペースを持つ)を再発明しています。
ここでは、特別な考慮が必要な場合の特定の例を示します。ツリー検索アルゴリズムは、(ツリーの各サブツリーがツリーであるため)再帰的に、または反復的に(スタックを使用して)定義できます。しかし、再帰的検索は、特定のプロパティを持つ最初のリーフを検索したり、すべてのリーフを検索したりするのには完全に機能しますが、リーフを返すオブジェクトや関数の状態、繰り返されるデザインでは、検索スタックはオブジェクトまたは関数の静的メンバーとして格納できますが、再帰的なデザインでは、関数が返ってきたときにコールスタックが失われ、再作成が困難または高価になります。
- 1. 繰返し決済モジュールに繰り返しプロファイル(ベータ版)を使用する必要がありますか?
- 2. ステートメントを繰り返す必要があります
- 3. 繰り返しの選択の防止
- 4. 選択だけ繰り返しノード名
- 5. マージソートの繰り返し - 必要説明
- 6. スクリプトを何度も繰り返して繰り返します
- 7. Javaでコードセレンを繰り返す必要はありません
- 8. scssネスティング、必要な繰り返し
- 9. リストのリストに繰り返し要素がありますpython
- 10. 繰り返し
- 11. 繰り返し
- 12. 繰り返し要素
- 13. forループの繰り返しを繰り返す方法C#?
- 14. Tkinter - キーワードの繰り返しを繰り返す
- 15. ログメッセージの繰り返しを繰り返す
- 16. 同じコントロールを繰り返すコントロール/スタイルにする必要があります
- 17. リストへの繰り返しの繰り返しpython 3
- 18. CheckboxSelectMultipleの選択肢を繰り返します。
- 19. jspdfヘッダーは複数のページを繰り返す必要があります
- 20. C++初心者 - 繰り返しループ最初の繰り返しを繰り返す
- 21. エリクシル繰り返し
- 22. 繰り返しangularjs
- 23. 繰り返しタグ
- 24. 繰り返し行
- 25. 繰り返しAngularjs
- 26. は繰り返し
- 27. 繰り返しR
- 28. 繰り返し【CLIPS]
- 29. シンプルなエスプレッソテスト「繰り返しx秒間繰り返し」エラー
- 30. PHPが4回繰り返すと4回繰り返す
テール再帰について学ぶ必要があります。すべての再帰的アルゴリズムが空間の複雑さを悪化させるわけではありません。 –
明らかに再帰。あなたは、単純に小さな再帰的定義を持つことができるときに、なぜあなたはあまりにも多くのヒューリスティックに入りますか? –