0

我正在研究这段代码以找到动态时间扭曲距离,但我无法理解某些部分。

public static void d(int[] x1, int[] x2) {
    int n1 = x1.length;
    int n2 = x2.length;
    double[][] table = new double[2][n2 + 1];
    table[0][0] = 0;

    for (int i = 1; i <= n2; i++) {
        table[0][i] = Double.POSITIVE_INFINITY;
    }
    for (int i = 1; i <= n1; i++) {
        table[1][0] = Double.POSITIVE_INFINITY;
        for (int j = 1; j <= n2; j++) {
            double cost = Math.abs(x1[i-1] - x2[j-1]);
            double min = table[0][j - 1];
            if (min > table[0][j]) {
                min = table[0][j];
            }
            if (min > table[1][j - 1]) {
                min = table[1][j - 1];
            }
            table[1][j] = cost + min;
        }
        double[] swap = table[0];
        table[0] = table[1];
        table[1] = swap;
    }
    System.out.println(table[0][n2]);
}

首先,为什么这条线会创建一个“垂直”数组[2][n2+1]

double[][] table = new double[2][n2 + 1];

其次,在最后一行我们为什么要打印table[0][n2]?最终值不应该是[n1][n2]

最后,为什么我们在这里交换?

double[] swap = table[0];
table[0] = table[1];
table[1] = swap;
4

0 回答 0