私はノードのツリーの深さの最初の検索を実装しました。各ノードは私が解決している問題の状態をカプセル化しています。また、以下のメソッドを追加して、前のノードですでにチェックした状態をカプセル化するノード。私の質問です:この方法は、アルゴリズムの時間や空間の複雑さをどうにか変えますか、それともDFSO(b^m)とO(bm)の典型的なものですか(ここではb-分岐係数とm - )。この追加により、DFSの領域と時間の複雑さが保持されますか?
//additional method which prevents us from repeating moves
public boolean checkForRepeatedMoves(Node node) {
Node nodeBeingChecked = node;
//if the current node's state is the same as the state of its parent or its parent's parent and so on.. then we are repeating a move
while (node.getParent() != null) {
if(node.getParent().getState().isEqualTo(nodeBeingChecked.getState())) {
return true;
}
node = node.getParent();
}
//if we have reached the root and no repetition is detected - return false
return false;
}
はい、複雑さが変わります - 親ツリーを歩いていると、ノードごとに余分なO(m)操作をしています。 – xs0
DFSを実行しているので、HashSetをアクティブに保つ方がよい場合があります現在の支店の状態をツリーを歩いています。そのようにすれば、余分なコストはノードごとにO(1)になることがあります。もちろん、あなたの状態がどのようになっているかによって変わります。 – xs0