一棵诡异的树
for (i=0; i<context->nSymbols; i++)
ContextPutValue(context, 1, i);
void ContextPutValue(Context *context, int val, int ix)
{
assert(ix>=0);
if (ix==0){
context->Tree[0]+=val;
}
else{
while(ix < context->nSymbols){
context->Tree[ix] = context->Tree[ix] + val;
ix = 2*ix - (ix & (ix-1));
}
}
context->TotalFreq+=val;
}
这是我获得的一个免费代码中的一段,其中context是一个结构体,里面有int *Tree来构建一棵树,构建树的代码就这些,很困惑其中的想法,以及
ix = 2 * ix - (ix & (ix-1));的用途,望大家不吝赐教。