关于代码的一些优化(向量的计算等级)?

时间:2012-12-12 22:32:41

标签: c++ c sorting optimization

以下代码是计算向量的绑定等级的函数(性能至关重要):

//The function here is to compute tied-ranks: answers.com/topic/tied-rank
mergeSort(x,inds,ci);
//mergeSort(): to sort vector x of length ci, also returns keys (inds) of x.

int tj=0;
double xi=x[0];

for (int j = 1; j < ci; ++j)
{
    if (x[j] > xi)
    {
        double rankvalue = 0.5 * (j - 1 + tj);

        for (int k = tj; k < j; ++k)
        {
            ranks[inds[k]] = rankvalue;
        };

        tj = j;
        xi = x[j];
    };      
};

double rankvalue = 0.5 * (ci - 1 + tj);

for (int k = tj; k < ci; ++k)
{
    ranks[inds[k]] = rankvalue;
};

问题是,假设的性能瓶颈mergeSort(),即O(NlogN)比其他部分代码(O(N))快几倍,这表明存在巨大的改进空间。代码的其他部分,任何建议?

1 个答案:

答案 0 :(得分:0)

该算法似乎具有二次行为:如果x[0]是序列tj中最大的值,则0保持ci,并且内部会进行x[inds[0]]次迭代。您的意思是使用x[inds[j]]和{{1}}吗?