0

我正在尝试为颜色匹配上下文编写一个有效的配对匹配算法

假设我们有一个对象(代表 CIE-LAB 颜色):

public class labColour {

      double l;
      double a;
      double b;

}

现在假设我们有两个 LabColour 列表:

List<LabColour> list1;
List<LabColour> list2;

每个列表的大小为 n。最后假设我们有一个复杂的函数可以计算两种颜色之间的相似度/距离:

    public double cie94ColourDistance(LabColour labColour1, LabColour labColour2) {

         final double L1 = labColour1.getL();
         final double a1 = labColour1.getA();
         final double b1 = labColour1.getB();
         final double L2 = labColour2.getL();
         final double a2 = labColour2.getL();
         final double b2 = labColour2.getL();

         double c1 = Math.sqrt(a1 * a1 + b1 * b1);
         double deltaC = c1 - Math.sqrt(a2 * a2 + b2 * b2);
         double deltaA = a1 - a2;
         double deltaB = b1 - b2;
         double deltaH = Math.sqrt(Math.max(0.0, deltaA * deltaA + deltaB * deltaB - deltaC * deltaC));

         return Math.sqrt(Math.max(0.0, Math.pow((L1 - L2) / (kL * sl), 2) + Math.pow(deltaC / (kc * (1 + K1 * c1)), 2) + Math.pow(deltaH / (kh * (1 + K2 * c1)), 2.0))); 
      }

我想找到n两个列表中每个元素之间的最佳匹配。天真的方法是使用嵌套的 for 循环来遍历list1and list2,并使用它cie94ColourDistance来计算每个的最佳匹配。在 O(n^2) 复杂度下,这在计算上是昂贵的。

我可以更快地做到这一点 O(n^2) 吗?如果是这样,怎么做?

此外,有没有办法(例如多线程、某个库、缓存等)在 Java 中加速整个过程?

提前致谢!

4

0 回答 0