Passer d'une complexité quadratique au linéaire
Répondre à la discussion
Affichage des résultats 1 à 2 sur 2

Passer d'une complexité quadratique au linéaire



  1. #1
    invite476719f2

    Passer d'une complexité quadratique au linéaire


    ------

    Bonsoir,

    J'ai le souvenir d'un programme agissant sur un tableau de longueur n, qui par un algorithme naïf fonctionnait quadratiquement (en parcourant le tableau plus d'une fois)
    Cependant, il était possible de le corriger en créeant un deuxième tableau de même longueur n, et en notant à chaque fois quelque chose dans ce tableau, de sorte qu'on ne fait cette fois qu'un seul parcours. Dans ce cas la complexité estlinéaire.

    Malheureusement je ne me souviens plus vraiment de la fonction du programme, mais je crois savoir que la démarche de créer un deuxième tableau pour y noter des résultats intermédiaires et réduire la complexité est courante.
    Pourriez-vous m'expliquer en quoi cela permet de réduire la complexité? (si vous aviez un exemple de programme par exemple)

    Merci beaucoup.

    -----

  2. #2
    invite7a96054d

    Re : Passer d'une complexité quadratique au linéaire

    Bonjour,
    Difficile de répondre réellement à ta question. Si je comprends bien ta demande tu ne parles pas de deux algorithmes différents, le premier aurait une complexité temporelle supérieure au second, mais le second une complexité spatiale inférieure au premier. Tu parles bien d'adapter un algorithme de manière "à économiser" des calculs déjà effectués (et coûteux en temps) en augmentant sa complexité spatiale.
    Cette technique est appelée mémoization. Un exemple simple de mémoization peut être le classique fibonacci, La version naïve de l'algorithme
    Code:
    fibo(n : entier) : entier
    debut
      si n<2 alors
        renvoyer 1
      sinon
        renvoyer fibo(n-1)+fibo(n-2)
      fin si
    fin
    a une complexité temporelle en O(𝜑n) avec 𝜑 le nombre d'or, ce qui n'est pas du tout bon ... Le problème vient en partie du fait que lors du calcul de fibo(n-2) on refait tous les calculs déjà faits lors de fibo(n-1). Si nous sauvons tous les résultats intermédiaires nous pourrions alors en réduire la complexité. Cela donne par exemple un algo comme :
    Code:
    fibo_memo(n : entier, memo : tableau d'entiers)
    debut
      si memo[n]=0 alors
        memo[n]=fibo_memo(n-1)+fibo_memo(n-2)
      fin si
    fin
    
    fibo2(n : entier) : entier
    debut
      memo : tableau de max(2,n) entiers initialisés à 0
      memo[0]=1
      memo[1]=1
      fib_memo(n,memo)
      renvoyer memo[n]
    fin
    L'algorithme qui est essentiellement le même (quoique cela est subjectif) est maintenant de complexité temporelle linéaire O(n) mais la complexité spatiale est augmentée de O(n) en contrepartie.

    L'exemple est simple, tu peux par exemple (si tu es anglophone) regarder sur geeksforgeeks l'évolution de l'algorithme pour résoudre le problème de la plus longue chaîne croissante (LIS) : approche naïve + mémoization, approche plus complexe avec mémoization. Et évidemment il y a une tonne de références grâce à google.

Discussions similaires

  1. discriminant d'une équation quadratique
    Par invite5e148d1e dans le forum Mathématiques du collège et du lycée
    Réponses: 1
    Dernier message: 21/11/2012, 18h32
  2. Matrice d'une forme quadratique q
    Par invite862ed6d7 dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 15/07/2012, 17h13
  3. minimisation d'une norme quadratique
    Par ABN84 dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 23/07/2011, 00h16
  4. Signature d'une forme quadratique
    Par invitec13ffb79 dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 08/01/2009, 15h13
  5. Caractéristique d'une forme quadratique
    Par invitec13ffb79 dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 13/12/2008, 18h27