Pourquoi utilisons-nous l'allocation de mémoire dynamique en général et pourquoi l'avons-nous utilisé dans cet exemple particulier? [fermé

cs.stackexchange https://cs.stackexchange.com/questions/79981

Question

Programmation dynamique C / C ++ Implémentation de LIS (la plus longue augmentation de la subséquence)

/* lis() returns the length of the longest increasing
subsequence in arr[] of size n */

int lis( int arr[], int n )
{
int *lis, i, j, max = 0;
lis = (int*) malloc ( sizeof( int ) * n );

/* Initialize LIS values for all indexes */
for (i = 0; i < n; i++ )
    lis[i] = 1;

/* Compute optimized LIS values in bottom up manner */
for (i = 1; i < n; i++ )
    for (j = 0; j < i; j++ ) 
        if ( arr[i] > arr[j] && lis[i] < lis[j] + 1)
            lis[i] = lis[j] + 1;

/* Pick maximum of all LIS values */
for (i = 0; i < n; i++ )
    if (max < lis[i])
        max = lis[i];

/* Free memory to avoid memory leak */
free(lis);
return max;
}

Il s'agit d'un code de www.geeksforgeeks.org. J'ai vu des explications que la mémoire est allouée (lorsqu'elle est terminée dynamiquement) sur Heap, qui est une réserve gratuite de mémoire (très grande), il est donc logique d'utiliser uniquement l'allocation dynamique que lorsque la mémoire requise dépasse la mémoire de pile utilisée pour stocker les variables et les données alloué localement dans les fonctions.

Est-ce que cela ferait une différence si je déclarais le tableau comme int arr [n] (comme n est donné par l'utilisateur dans l'entrée), puis dans la fonction principale, utilisez LIS (arr, n)? Si oui, pourquoi? Sinon, de quoi d'autre l'allocation dynamique bénéficie-t-elle dans ce cas et en général?

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à cs.stackexchange
scroll top