基于堆的排列对于较大的数字非常慢

问题描述 投票:0回答:0

我们正在使用堆算法来生成数组 a 的排列。 .生成的排列被传递给 printArr 函数, 它根据当前排列计算两个数组 X 和 Y 之间的相关系数。这按预期工作,但是对于更大的数字,例如超过20。 堆的排列呈指数级缓慢。知道我们如何才能显着改进基于堆的排列。

void printArr(int a[], int n, double X[], double Y[], int *diff, double corrcoeffO)
{
    for (int i = 0; i < n; i++)
    {
        // cout << a[i] << " ";
    }

    // printf("\n");

    double corrcoeffHP = correlationCoefficient(X, Y, a, n);

    if (abs(corrcoeffHP) >= abs(corrcoeffO))
    {
        ++(*diffCount);
    }
}

void heapPermutation(int a[], int size, int n, double X[], double Y[], int *diffCount, double corrcoeff)
{
        if (size == 1)
    { 
        printArr(a, n, X, Y, diffCount, corrcoeff);
        return;
    }

    for (int i = 0; i < size; i++)
    {
        heapPermutation(a, size - 1, n, X, Y, diffCount, corrcoeff);

        if (size % 2 == 1)
        {
            swap(a[0], a[size - 1]);
        }
        else
        {
            swap(a[i], a[size - 1]);
        }
    }
}
algorithm recursion permutation pearson-correlation heaps-algorithm
© www.soinside.com 2019 - 2024. All rights reserved.