la complexité de l'espace du morceau de code ci-dessous?

amitection:

Je suis tombé sur cette question alors que je faisais une préparation d'entrevue.

public class Main {
    public static void main(String[] args) {
        // n is some user input value
        int i = 0;
        while (i < n) {
            int[] a = new int[n];
            for (int j = 0; j < n; j++){
                a[j] = i * j;
            }
            i++;
        }
    }
}

Les choix proposés sont les suivants:

  1. O (n)
  2. O (n ^ 2)

D'après ce que je comprends la réponse aurait dû être O (n) à chaque itération est en cours de création et la référence précédente est perdu une nouvelle instance du tableau. Cependant, le livre mentionne la réponse à O (n ^ 2).

Ce qui pourrait être une explication possible?

Zabuza:

Explication

Votre explication est correcte. La complexité de l' espace est linéaire .

Cependant, votre conclusion (et la conclusion de l'auteur de livres) est faux. La bonne réponse est que les deux réponses sont correctes. Autrement dit, la complexité de l' espace est à la fois:

  • O(n) et
  • O(n^2)

Big-O donne un majorant, pas la limite exacte. Pensez-y comme <=par opposition à tout =. Donc , a in O(n)s'il est vrai aussi que a in O(n^2)(mathématiquement, Big-O donne un ensemble de fonctions).

La limite exacte est donnée par Theta ( =) et une borne inférieure par Omega ( >=), un est donné par stricte limite inférieure petite oméga ( >) et une borne supérieure stricte par petite o ( <). Ainsi , la complexité de l' espace est Theta(n).

Voir Wikipedia pour plus d' informations et les définitions mathématiques réelles.


Remarques

La complexité de l' espace est uniquement linéaire si l' on suppose que éboueur Javas est actif . Il est possible de le désactiver ou le remplacer par une mise en œuvre simulée qui ne fait pas la mémoire libre (voir Epsilon-GC ).

Dans ce cas, la complexité de l' espace serait en effet quadratique .

L'algorithme lui - même a besoin d' allouer une quantité de mémoire quadratique. Cependant, il ne contiendra que jamais linéaire quantité de mémoire en même temps. L' analyse de la complexité de l' espace se fait généralement par rapport à la quantité de mémoire doit être prise en même temps. Mais peut - être l'auteur a voulu analyser l'algorithme par rapport à la façon dont beaucoup reste à allouer au total, ce qui pourrait également expliquer son choix.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=187327&siteId=1
conseillé
Classement