以下代码是用于计算向量的相关秩的函数(对性能至关重要):
//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))快几倍,这表明代码的其他部分仍有很大的改进空间代码,有什么建议吗?
最佳答案
看来该算法具有二次行为:如果x[0]
是序列中的最大值,则tj
保持0
,并且您在内部最多进行ci
次迭代。您是要使用x[inds[0]]
和x[inds[j]]
吗?
关于c++ - 关于代码的一些优化(计算 vector 的秩)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13849845/