再帰とバックトラック
再帰の基本的な性質:関数呼び出し自体
が大規模な問題を小さく保ち、それをプロセスの
バックトラックに戻します。再帰の性質を使用
する問題の開始点から始めて、
1ステップまたはさらには戻るように試み続けます。到着するまで選択を行うための複数のステッププロセスの終了
再帰
再帰的アルゴリズムは、独自の関数を呼び出すアルゴリズムです。
機能:一見複雑な問題を簡潔で理解しやすくすることができます。
古典的なケース:
ハノイの塔。ハノイの塔のPythonコード実装:
def hano(A: str, B: str, C: str, n: int) -> None:
if n > 0:
hano(A, C, B, n - 1)
print(A + "->" + C)
hano(B, A, C, n - 1)
if __name__ == '__main__':
hano('A', 'B', 'C', 5)
アルゴリズムのアイデア
- 問題を小さくする方法を知っている
- 小規模な問題から結果を得るために再利用する
- 現在の価値と手を振っている状況を組み合わせることで、最終的な結果は
一般的な理解です - 実装される再帰関数をすでに実装されているものとして扱います
- いくつかのサブ問題を直接解決する
- 思考:サブ問題の解決策と現在の状況に応じて答えを得る方法
再帰:トップダウン
動的計画法:ボトムアップ
再帰的記述構造の要約 - 現在の状況が違法であるかどうかを判断し、違法である場合はすぐに戻ります。これは健全性チェックとも呼ばれます。
- 再帰を終了するための条件が満たされているかどうかを判別します
- 問題のサイズを縮小し、再帰的に呼び出します
- 小規模な質問の回答を使用し、現在のデータを組み合わせて最終的な回答を取得します。
時間計算量分析を解決するための2つの再帰的アルゴリズム
反復法
式法
バックトラック
バックトラッキングアルゴリズムは一種のヒューリスティックアルゴリズムであり、ブルートフォース検索との最大の違い
です。バックトラッキングアルゴリズムでは、段階的にテストし、検出の各ステップの状況を評価し、迂回を避けて続行するかどうかを決定し
ます。バックトラッキングアルゴリズムの本質
- 違法なことが発生した場合は、前のシーンに戻ることができ、1つ以上のステップに戻ることができます
- 次に、他のパスと方法を試してください。
バックトラッキングアルゴリズムを使用する場合は、毎回問題を解決するために、可能なバックトラッキングアルゴリズムが複数あることを確認する必要があります。
- まず、現状が違法かどうかを判断し、異常があれば直ちに復帰します。
- 現在の状況が条件を満たしているかどうかを確認しますか?はいの場合、現在の結果を保存して戻ります
- 現在の状況では、考えられるすべての状況をトラバースして再帰します
- 再帰が完了したら、すぐに戻ります。戻る方法は、前の手順で行った試行をキャンセルすることです。