【发布时间】:2014-11-04 02:39:58
【问题描述】:
我在 ArrayList 中有双精度数的 ArrayList。所以它是这样的
ArrayList<ArrayList<Double>> x = new ArrayList<ArrayList<Double>>();
我的x 中有 19 个 ArrayList。我有一个名为distance(ArrayList x, ArrayList y) 的方法,它计算ArrayLists x 和y 之间的距离 并返回double。我想计算每个向量与所有其他向量之间的距离。
我的方法是这样做
for(int i=0 ; i<(x.size()-1) ; i++)
{
for(int j=(i+1) ; j<x.size() ; j++)
{
System.out.println(distance( x.get(i) , x.get(j) ));
}
}
但是,它看起来效率不高。效率为 O(N^2)。 效率对我来说非常重要。我需要帮助找出执行此操作的最有效方法。
【问题讨论】:
-
您无法避免 O(N^2),因为您正在生成 N^2 个输出值。
-
在 Java 8 中可以使用并行流处理。
-
@PM77-1:除非你的核心数量是 N 的函数,否则这对你没有帮助(复杂性方面)。
-
虽然您无法避免 O(n^2) 取决于您对列表所做的操作,但您可以存储该距离列表并使用运行速度更快的方法对其进行更新。但这取决于您的应用程序
-
@Matin:从算法复杂性的角度来看,没有。从务实的角度来看,也许是的。但首先它在很大程度上取决于
distance的数学特性。 (具体来说,dist(x,y)和dist(y,z)是否告诉您有关dist(x,z)的任何信息?)
标签: java performance arraylist