私はスプレイツリーをコーディングしました。ノードはこのように表される。このSplay Treeの範囲の合計がより高速に実装されていますか?
struct Node{
Node *l; /// The left Node
Node *r; /// The right Node
int v; /// The Value
};
ここで、特定の範囲内のツリー内のすべての数値の合計を知る必要があります。このために、私はsummation.
void summation(Node *R, int st, int ed)
{
if(!R) return;
if(R->v < st){ /// should not call left side
summation(R->r, st, ed);
}
else if(R->v > ed){ /// should not call right side
summation(R->l, st, ed);
}
else{ /// should call both side
ret+=R->v;
summation(R->l, st, ed);
summation(R->r, st, ed);
}
return;
}
ret
という名前の次の関数を実装しsummation
関数を呼び出す前に0
に初期化されるグローバルint
変数です。 2つのパラメータst
は、範囲(両端を含む)を定義します。
summation
関数は、O(n)の複雑さで機能します。誰もこれのための任意の高速実装を提案することはできますか?
'void summation(Node * R、...)'ノードは型名ではありません。 C++を使用していますか? – joop
ノードは、先ほど質問した構造です。 – jbsu32
手がかりがないので、C++を使用している必要があります。 (Cでは、 'struct Node {...};'は** typedef struct Node {を意味しません**}) ') – joop