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?
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.