寻找更好的数据排序方式

时间:2015-09-03 14:29:21

标签: c++ qt sorting

我有一个算法可以处理6个不同变量参数的文件。该算法为每个参数集上的文件生成真/假结果。我在一组文件中运行这个算法,在矢量中得到结果的真/假(以及一些额外的,无关的数据)。

一旦该算法运行,我就想计算每个参数集的真实结果数,以及处理的文件数。我现在这样做的方式如下:

while(!results.isEmpty()){ //results being a vector of the individual file results
  for (long i = 0; i < params.size(); i++){ //params being a vector of the parameters
    if (results.first().params... == params[i].params...){
       params[i].numFiles++;
       if (results.first().result){
         params[i].numTrue++;
       }
       results.pop_front();
       break;
    }
  }
}

这完成了这项工作,但是现在我已经优化了我的算法,这是我的代码中的最后一个阻塞点,我正在寻找加快这一点的方法。什么是快速排序这些数据的最佳方法?如果这是相关的,目前我正在使用Qt,我的矢量目前是QVector。

2 个答案:

答案 0 :(得分:1)

您的算法的复杂度为O(NxM),其中N是结果的大小,M是参数的大小。

如果你在这里比较:

if (results.first().params... == params[i].params...){

支持较少的运算符,您可以在第一个循环之前对params进行排序。而不是遍历所有元素,只需进行二分查找。然后复杂性为O(Nxlog(M))。

答案 1 :(得分:0)

如果有准备参数用于比较

  

if(results.first()。params ... == params [i] .params ...)

在每个结果中,您可以在哈希表中存储6个参数,并在每次迭代中搜索哈希表

  

而(!results.isEmpty())

给出O(N)复杂度

但实际上真正的性能取决于散列函数。有时O(N log M)可能更好;这取决于运营时间。 因此,在优化后检查实践中的性能会更好。

附加说明:无论如何,当前复杂度为O(N),因为参数(6个参数)的数量是常数。