Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 比较三维项目列表的最佳算法是什么?_Algorithm_Sorting - Fatal编程技术网

Algorithm 比较三维项目列表的最佳算法是什么?

Algorithm 比较三维项目列表的最佳算法是什么?,algorithm,sorting,Algorithm,Sorting,我有一个项目列表,每个项目有三个属性(高度、宽度和深度)。 我需要比较这些项目,我编写了这个伪代码算法: For i =0 to List[].Count For m=i+1 to List[].Count If List(i). Height =List(m). Height then If List(i).width=List(m).width & List[i].depth !=

我有一个项目列表,每个项目有三个属性(高度、宽度和深度)。
我需要比较这些项目,我编写了这个伪代码算法:

For i =0 to List[].Count  
    For m=i+1 to List[].Count
            If List(i). Height =List(m). Height then
                 If List(i).width=List(m).width &
                 List[i].depth != List[m].depth then
                     Result_List[].Add(List[i])

                  End if
            End if
   End for
End for
有没有更好的算法来做同样的工作?
如果您能为建议的算法提供一些分析,我将不胜感激。

除非您有大量的元素+,否则您的O(n)扫描很难击败,而且足够好


如果你想用x、y、z等进行更多的搜索,那么你应该使用八叉树结构,因为它比列表更有效。

我看不出这种方法有什么错

除非您对其他数据结构持开放态度,这些数据结构会将您的数据“划分”为“相同宽度、深度和高度的框”,否则您可以通过移动先比较哪些条件来进行微观优化。你只想在深度不相等时继续,所以先比较一下

results = List[]

for i -> 0 .. len(elements)
  for j -> i+1 .. len(elements)
    if elements[i].depth != elements[j].depth
      if elements[i].width = elements[j].width & elements[i].height = elements[j].height
        results.add(elements[i])

return results

这是怎么回事?如果您试图移除所有深度不同但宽度和高度相同的元素,那么当然,这很好。“比较”的目的是什么?“Ant是的,选择具有相同高度和宽度但深度不同的项。它是<代码> O(n*(n - 1))< /> > =代码> o(n ^ 2)< /> >。如果n是10,会发生什么?100? 1000? 10000? 几年前,我从最初的开发人员那里接管了一个应用程序的维护工作,开发人员转到了gr$$ner pastures,不久之后,用户开始抱怨某个特定操作花费了“很长时间”。经过一番挖掘,我发现了一个很好的小嵌套循环(带有两个嵌入式SQL查询,不少于!),它通常有10-20个元素要搜索,但偶尔有1000个元素要搜索。经过短暂的重写,用户再次感到高兴。教训:嵌套循环是BA-A-A-A-AD!:-)我同意嵌套循环是不好的,理想情况下,假设这些数据可以被放入一个包含3列的列数据库中。用
按高度、宽度进行分组的简单查询可以得到该值,然后
唯一深度
。我猜这会比在元素上加倍迭代产生类似的性能影响。有没有其他方法没有嵌套循环?