我有大约1000个元素的列表。每个元素(我从文件中读取的对象,因此我可以在开始时高效地安排它们)包含4个变量。因此,现在我正在执行以下操作,这在整体方案中效率很低:

void func(double value1, double value2, double value3)
{

       fooArr[1000];

       for(int i=0;i<1000; ++i)
       {
                   //they are all numeric! ranges are < 1000
                  if(fooArr[i].a== value1
                       && fooArr[i].b >= value2;
                       && fooArr[i].c <= value2; //yes again value2
                       && fooArr[i].d <= value3;
                   )
                   {
                            /* yay found now do something!*/
                    }
       }
}

空间不是太重要!

已根据请求进行了修改

最佳答案

如果空间不太重要,最简单的方法是基于“a”创建哈希,具体取决于您在“a”上遇到的冲突数量,使哈希表中的每个节点都指向一棵二叉树可能很有意义。基于“b”如果b有很多冲突,请对c执行相同的操作。

哈希的第一个索引(取决于有多少冲突)将为您节省大量时间,而只需很少的编码或数据结构即可工作。

10-08 08:32