Backtracking
2176 ワード
DFS vs BFS
DFSとBFSはデータ構造時にグラフィックとツリーを比較して整理したことがある.
詳細はDFSとBFSを参照してください.
しかし、定義と比較図を簡単に理解してから行きましょう.
DFSの定義(深度優先ナビゲーション)
ルートノード(または他の任意のノード)から始まり,次のブランチ(ブランチ)の前にそのブランチを全面的に探索し,広範な探索を行う前に深い探索を行う.
BFSの定義(幅優先ナビゲーション)
ルートノード(または他の任意のノード)から、まず隣接ノードをブラウズする方法であり、深くブラウズする前にブラウズする(wide).
DFSとBFSの原理比較
追跡(遡及)とは?
希望がなければ,除外して親ノードに戻り,解法時間を短縮することができる.
Backtrackingの原理とその概略図
希望がなければ,除外して親ノードに戻り,解法時間を短縮することができる.
Backtrackingの原理とその概略図
Backstracking用語のクリーンアップ
希望がある:答えになる可能性がある.
枝切り:希望のないノードに行く必要がなく、次のノードを検索します(答えではありません).
BackTrackingコードの例
勤務時間の授業のコードを少し変えて、例を挙げます.
let code = ['A', 'B', 'C'];
// find all permutations
// but what if u want to find where B cant sit in the middle seat?
// backtrack
let result1 = [];
function permutation(usedArray, unusedArray) {
if (usedArray.length === 3) {
return result1.push(usedArray);
}
for (let i = 0; i < unusedArray.length; i++) {
permutation(
usedArray.concat(unusedArray[i]),
unusedArray.filter((el, idx) => i !== idx)
);
}
}
permutation([], code);
console.log(result1);
let result2 = [];
function backtrackingPermutation(usedArray, unusedArray) {
if (usedArray[1] === 'A' || usedArray[1] === 'B') {
return;
}
if (usedArray.length === 3) {
return result2.push(usedArray);
}
for (let i = 0; i < unusedArray.length; i++) {
backtrackingPermutation(
usedArray.concat(unusedArray[i]),
unusedArray.filter((el, idx) => i !== idx)
);
}
}
backtrackingPermutation([], code);
console.log(result2);
Reference
この問題について(Backtracking), 我々は、より多くの情報をここで見つけました https://velog.io/@yeonlisa/Algorithms-Backtrackingテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol