私は問題のいくつかの二分木セットのためのいくつかのコードを書きました...コードは次のとおりで、答えがイエスの場合は左、答えがノーの場合は右にツリーを下っていき、外部ノードに到達すると外部ノードを返します。
Javaで書かれた、
public static int price(BinaryTree<Integer> t, boolean[] p) {
Position<Integer> root = t.root(); //1
while (t.isInternal(root)) { //2
int element = root.element(); // 3
if (!p[element]) { //4
root = t.getRight(root);//5
}
if (p[element]) { //6
root = t.getLeft(root); //7
}
}
int price = root.element(); //8
return price; //9
}
大きな OI を計算するとき、上記のようにコメント内のコードのステップに番号を付けるのが最善だと思いました...ここの例に従いました
したがって、上記の 1 ~ 9 は次のようなものと同等である必要があります。ここで、C
は定数であり???
、私のループです (ここで、N は特定のデータ構造の入力の数です)。
C + ??? + C + ??? + C + ??? + C + C + C
私のwhile
ループは私が思うC*N
か、(O(N))
むしろC*N
今のところです)そして私の2つのif
ステートメントは(O(1)
インデックス作成の時間の複雑さについて...そしてO(N)
スペースの複雑さについては、今のところ時間の複雑さに固執します)
だから今私は持っているべきです(C
要素を削除すると、それらは定数であり、実際には重要ではありません)
C*N + C + C
時間の複雑さ
と
C*N + C*N + C*N
スペースの複雑さ
私が持っている意味
C*N
またはO (N)
時間の複雑さと空間の複雑さ
O(3N)
O(N)
...と見なすことができるもの
だから私の質問は、私はこれを正しくやったのですか、そうでなければどこで間違ったのですか?
ありがとうございました
編集:
ツリーは、答えが真 (はい) の場合は左に移動し、いいえの場合は右に移動します。内部ノードには、ツリー内の m 個の内部ノードに対して 0 から m-1 までの番号が付けられます。したがって、ルート、内部ノード 0 で no が指定され、したがって右に移動する場合、この内部ノードはノード 3 である可能性があり、p[1] が答えであるため、ブール値の答えは p[1] ではなく p[3] にあります。ノード 1、つまり質問 1 の場合。混乱を招くお詫び