web-dev-qa-db-fra.com

Temps linéaire vs. Temps quadratique

Souvent, certaines des réponses mentionnent qu'une solution donnée est linéaire, ou qu'une autre est quadratique.

Comment faire la différence/identifier ce qui est quoi?

Quelqu'un peut-il expliquer cela, de la manière la plus simple possible, pour ceux comme moi qui ne savent toujours pas?

27
Anthony Perot

Une méthode est linéaire lorsque le temps qu'elle prend augmente linéairement avec le nombre d'éléments impliqués. Par exemple, une boucle for qui imprime les éléments d'un tableau est à peu près linéaire:

for x in range(10):
    print x

car si nous imprimons range (100) au lieu de range (10), le temps qu'il faudra pour l'exécuter est 10 fois plus long. Vous verrez très souvent cela écrit comme O (N), ce qui signifie que le temps ou l'effort de calcul pour exécuter l'algorithme est proportionnel à N.

Maintenant, disons que nous voulons imprimer les éléments de deux pour les boucles:

for x in range(10):
    for y in range(10):
        print x, y

Pour chaque x, je fais 10 fois en boucle sur y. Pour cette raison, le tout passe par 10x10 = 100 impressions (vous pouvez les voir simplement en exécutant le code). Si au lieu d'utiliser 10, j'utilise 100, maintenant la méthode fera 100x100 = 10000. En d'autres termes, la méthode va comme O (N * N) ou O (N²), car chaque fois que vous augmentez le nombre d'éléments, l'effort ou le temps de calcul augmentera comme le carré du nombre de points.

51
Jblasco

Ils doivent faire référence à la complexité d'exécution également connue sous le nom de notation Big O. Il s'agit d'un sujet extrêmement vaste à aborder. Je commencerais par l'article sur wikipedia: https://en.wikipedia.org/wiki/Big_O_notation

Lorsque je faisais des recherches sur ce sujet, l'une des choses que j'ai apprises à faire est de représenter graphiquement le temps d'exécution de mon algorithme avec des ensembles de données de différentes tailles. Lorsque vous représentez graphiquement les résultats, vous remarquerez que la ligne ou la courbe peut être classée en plusieurs ordres de croissance.

Comprendre comment classer la complexité d'exécution d'un algorithme vous donnera un cadre pour comprendre comment votre algorithme évoluera en termes de temps ou de mémoire. Il vous donnera le pouvoir de comparer et de classer les algorithmes de manière lâche les uns avec les autres.

Je ne suis pas un expert mais cela m'a aidé à démarrer dans le terrier du lapin.

Voici quelques ordres de croissance typiques:

  • O (1) - temps constant
  • O (log n) - logarithmique
  • O (n) - temps linéaire
  • O (n ^ 2) - quadratique
  • O (2 ^ n) - exponentielle
  • O (n!) - factoriel

Si l'article de wikipedia est difficile à avaler, je recommande fortement de regarder quelques conférences sur le sujet sur l'Université iTunes et d'examiner les sujets de l'analyse d'algorithmes, de la notation big-O, des structures de données et même du comptage des opérations.

Bonne chance!

31
Ralph Caraveo

Vous ne spécifiez pas mais comme vous mentionnez une solution il est possible que vous posiez des questions sur la convergence quadratique et linéaire. À cette fin, si vous avez un algorithme itératif et génère une séquence d'approximations à une valeur convergente, vous avez une convergence quadratique lorsque vous pouvez montrer que

 x(n) <= c * x(n-1)^2

pour une constante positive c. C'est-à-dire que l'erreur dans la solution à l'itération n+1 est inférieur au carré de l'erreur à l'itération n. Voir ceci pour une introduction plus complète pour des définitions plus générales du taux de convergence http://en.wikipedia.org/wiki/Rate_of_convergence

1
mathematician1975

Vous discutez généralement d'un algorithme en termes de taille d'entrée n (si l'entrée est un tableau ou une liste). Une solution linéaire à un problème serait un algorithme dont les temps d'exécution évoluent linéairement avec n, donc x*n + y, où x et y sont des nombres réels. n apparaît avec l'exposant le plus élevé de 1: n = n^1.

Avec une solution quadratique, n apparaît dans un terme avec 2 comme exposant le plus élevé, par ex. x*n^2 + y*n + z.

Pour n arbitraire, la solution linéaire croît en temps d'exécution beaucoup plus lentement que la solution quadratique.

Pour plus d'informations, recherchez Notation Big O .

1
Femaref