簡體   English   中英

LAP 算法不適用於大數字

[英]LAP algorithm not working with large numbers

包括

#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 之后崩潰了,這是不應該的。 它可能是什么類型的問題,我該如何解決?

這可能是堆棧溢出。 您正在使用大量內存的 267*267 個條目在堆棧上分配數組。

嘗試在堆上分配內存,或者簡單地將數組從本地更改為全局(具有固定的最大值 n)。

例如

改變

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM