web-dev-qa-db-fra.com

Sont des boucles imbriquées toujours O (n ^ k)?

Si j'ai une boucle dans une autre boucle, mais je sais que la boucle intérieure ne sera exécutée qu'une seule fois, cet algorithme sera-t-il toujours O (n ^ 2)?

For i = 1 to n do

     For j = 1 to i do

          If (i==j) do

              For k = 1 to n

                  {Do stuff}

La boucle très interne fonctionnera au plus 1 fois, car i _ ne sera égal que j une fois par itération de la deuxième boucle. Est-ce toujours N ^ 3?

9
john

Pense-y de cette façon. Indépendamment de N, la fonction la plus interne n'exécutera jamais une fois par exécution de la deuxième boucle. C'est à dire, le nombre de fois qu'il exécute dépend de n linéairement. Cela signifie que vous pouvez tout traiter à l'intérieur de la première boucle en tant que fonctionnement linéaire (O (N)) (en supposant {do Stuff} est également une durée constante). Si vous considérez la plus grande boucle, vous voyez que vous faites quelque chose qui prend O (n), n fois. Cela signifie que le temps d'exécution global est O (n ^ 2)

Si vous double n, il y aura un total de n ^ 2 itérations supplémentaires. Ainsi, le temps d'exécution global est N ^ 2.

7
Oleksi