我有一个项目列表,每个项目有三个属性(高度,宽度和深度) 我需要比较这些项目,我写了这个伪代码算法:
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
有没有更好的算法来完成同样的工作?
如果您能为建议的算法提供一些分析,我将非常感激。
答案 0 :(得分:0)
我认为这种方法没有错误
除非您对可以将数据“分区”为“相同宽度,深度,高度的框”的其他数据结构持开放态度,否则您可以通过移动首先比较哪些条件进行微观优化。您只希望在深度不相等时继续,所以首先进行比较。
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
答案 1 :(得分:-2)
你做的O(n)扫描很难被击败,除非你有大量的元素+,否则它就足够了。
如果您尝试使用x,y,z进行更多操作,例如搜索等,那么您应该使用八叉树结构,因为它比列表更有效。