Recursion 性能问题:段树、更新功能
我用这样的函数更新段树。分析表明,这是瓶颈:Recursion 性能问题:段树、更新功能,recursion,profiling,segment-tree,Recursion,Profiling,Segment Tree,我用这样的函数更新段树。分析表明,这是瓶颈: void update (int tree[], int root, int left, int right, int pos, double val) { if (left == right) { data[tree[root]] = val; } else { int middle = (left + right) / 2; if (pos <= mid
void update (int tree[], int root, int left, int right, int pos, double val)
{
if (left == right)
{
data[tree[root]] = val;
}
else
{
int middle = (left + right) / 2;
if (pos <= middle)
update(tree, root*2, left, middle, pos, val);
else
update(tree, root*2+1, middle+1, right, pos, val);
tree[root] = indexOfMax(tree, tree[root*2], tree[root*2+1]); // simple comparations
}
}
// indexOfMax is just a simple comparation
int indexOfMax(int tree[], int a, int b)
{
//cout << data[tree[a]] << " > " << data[tree[b]] << " ? " << tree[a] << " : " << tree[b] << endl;
return data[a] > data[b] ? a : b;
}
void更新(int-tree[],int-root,int-left,int-right,int-pos,double-val)
{
如果(左==右)
{
数据[树[根]]=val;
}
其他的
{
中间整数=(左+右)/2;
如果first look函数中的(pos)正常,您有什么性能问题?您的算法是否比预期的慢?请提供indexOfMax()的代码。进行大约10次更新(26秒)。在此期间,您将看到问题。