「アルゴリズム」-バックトラッキングアルゴリズム

1はじめに

\ quad \ quad バックトラッキングアルゴリズムは、実際には、DFS(深さ優先探索)と同様の列挙型検索試行プロセスに基づいています。主に、問題の解決策を見つけるための検索試行プロセスで、解決条件が満たされていないことが判明した場合、「バックトラッキング」が行われます。戻って、他のパスを試してください。バックトラッキング方式は、最適な条件に従って前方に検索して目標を達成する、一種の最適な検索方式です。しかし、特定のステップを探索すると、元の選択が適切でないか、目標が達成されていないことがわかります。そのため、1つのステップに戻ってもう一度選択します。この戻る方法と戻る方法は、バックトラッキング方法です。バックトラッキング条件を満たす特定の状態のポイントこれを「バックトラックポイント」と呼びます。多くの複雑で大規模な問題は、「普遍的な問題解決方法」で定評のあるバックトラッキング方法を使用できます。

DFSとバックトラッキングアルゴリズムの違い

\ quad \ quad DFSは、最低レベルに達するまで常に特定の方向を検索します。バックトラッキングアルゴリズムはDFSに基づいていますが、検索プロセスでは、終了条件に達した後、状態が復元され、前のレベルにバックトラックします。 、そしてもう一度検索します。したがって、バックトラッキングアルゴリズムとDFSの違いは、状態がリセットされるかどうかです。バウンディング関数を使用した深さ優先生成法は、バックトラッキング法と呼ばれます。(バックトラッキング方法=徹底的+剪定)

2.基本的な考え方

\ quad \ quad 簡単に言えば、バックトラッキング方法は、最初に深さの順序ですべての可能なアルゴリズムを使い果たすことですが、ブルートフォース枯渇方法よりもバックトラッキングアルゴリズムの優れた部分は、バックトラッキングアルゴリズムが現在の状態がいつでも問題。条件が満たされない場合は、前の状態に戻り、探索を続ける時間を節約します。

\ quad \ quad 言い換えると、バックトラッキング方法は、異なるフォークを一度に1つずつ選択し、別のフォークを選択して目的地を見つけようとすることで目的地を見つけることと理解できます。間違った道を進んだ場合は、目的地が見つかるまで、その道を分岐する別の道を探して戻ってください。それは間違った道を行く時間を節約します。

3.基本的なプロセスとソリューションのステップ

\ quad \ quad 最良の解を生成できない問題状態の生成を回避するために、バックトラッキングメソッドは、バウンディング関数を継続的に使用して、必要な解を生成することが実際には不可能なライブノードを実行(プルーニング)して、計算を削減する必要があります。問題。量。

一般的に使用される2つのプルーニング関数:

  • 制約関数:拡張ノードで制約を満たさない子の数を減算します
  • バインドされた関数:最適解が得られないサブツリーを減算します

バックトラッキング方法の問題を解決するための一般的な手順:

(1)バックトラッキング出口:特定の問題について、問題のソリューションスペースを決定します。
(2)バックトラックサブジェクト:ノードの拡張検索ルールを決定します。現在の状態のすべての子ノードをトラバースし、次の状態が満たされている問題条件の場合、問題条件が満たされている場合は、次の状態に入ります。
(3)状態の戻り:深さ優先の方法で解空間を検索し、検索プロセスでプルーニング機能を使用して(現在の状態が条件を満たさない場合は、前の状態に戻ります)、無効な検索を回避します。

バックトラッキング機能ユニバーサルテンプレート

def backtrack ( 参数 ):

	#回溯出口
	if ( 满足题意了 ):
		计数或进行其他操作
		return True   #有时可以省略
	
	#回溯主体
	for( 查找当前节点的周围的节点 )
		进行其他的操作;
		标记已经搜索过的节点
		backtrack( 下一次搜索的节点 )
	#状态返回
		取消标记;
	return False	#有时可以省略

4.適用条件

つまり、バックトラッキング方法の特性(バックトラッキングアルゴリズムをいつ使用するかを判断するため)

1.質問への回答には複数の要素があります

2.答えはいくつかの制約を満たさなければなりません

3.答えを見つける方法はすべてのステップで同じです

問題が検索から解決までの問題であり、問​​題の解決策がツリー構造(絶えず拡大するベクトル)である場合、問題はバックトラッキングアルゴリズムの使用を検討できます。

5.古典的な例

nクイーン、グラフの色付け、サブセットの検索、文字列の配置、その他の問題など。

バックトラッキングアルゴリズムの質問の種類:

  • サブセットと組み合わせの問題
  • 順列の問題
  • 検索、Nクイーンの質問、

おすすめ

転載: blog.csdn.net/weixin_45666566/article/details/113795337