LAP算法不适用于大数字

时间:2015-11-24 11:02:08

标签: c++ algorithm

包括

#include <fstream>
#include <algorithm>

using namespace std;

long int lenghtOfLongestAP(long int set[],long int n)
{
    if (n <= 2)  return n;

    long int L[n][n];
    long int llap = 2;

    for (long int i = 0; i < n; i++)
        L[i][n-1] = 2;

    for (long int j=n-2; j>=1; j--)
    {

        int i = j-1, k = j+1;
        while (i >= 0 && k <= n-1)
        {
           if (set[i] + set[k] < 2*set[j])
               k++;

           else if (set[i] + set[k] > 2*set[j])
           {   L[i][j] = 2, i--;   }

           else
           {
               L[i][j] = L[j][k] + 1;

               llap = max(llap, L[i][j]);

               i--; k++;
           }
        }
        while (i >= 0)
        {
            L[i][j] = 2;
            i--;
        }
    }
    return llap;
}

int main()
{
    ofstream cout("Output.txt");
    ifstream cin("cablecar-sub4-attempt3.txt");
    int ab;
    cin >> ab;
    for (long int z = 0; z < ab; z++)
    {
        long int bs;
        cin >> bs;
        long int array[bs];
        for(long int h = 0; h<bs; h++)
            cin >> array[h];
        sort(array, array + bs);
        cout << "Case #" << z+1 << ": " << lenghtOfLongestAP(array, bs) << endl;
    }
    return 0;
}

这是我的代码。它是一种LAP(最大算术级数)算法,因此它在排序数组中找到最大的进展。我有以下数据集:

pastebin.com/77meKfKW

奇怪的是,该程序在案例30之后崩溃,它不应该。可能是什么类型的问题,我该如何解决?

1 个答案:

答案 0 :(得分:0)

这可能是堆栈溢出。您正在使用267 * 267个条目在堆栈上分配数组,这些条目使用大量内存。

尝试在堆上分配内存,或者只是将数组从本地更改为全局(具有固定的最大值n)。

e.g。

变化

long int lenghtOfLongestAP(long int set[],long int n)
{
    if (n <= 2)  return n;

    long int L[n][n];

long int L[1000][1000]; // or whatever your maximum n might be
long int lenghtOfLongestAP(long int set[],long int n)
{
    if (n <= 2)  return n;