logo

Complessità temporale di un loop quando la variabile del loop “si espande o si restringe” in modo esponenziale

Per questi casi la complessità temporale del ciclo è O(log(log(n))). I casi seguenti analizzano diversi aspetti del problema. Caso 1: CPP
for (int i = 2; i <=n; i = pow(i k))  {   // some O(1) expressions or statements } 
In this case i takes values 2 2k(2k)k= 2k2(2k2)k= 2k3...2ktronco d'alberok(log(n)). L'ultimo termine deve essere minore o uguale a n e abbiamo 2ktronco d'alberok(log(n))= 2registro(n)= n che concorda completamente con il valore del nostro ultimo termine. Quindi ci sono nel registro totalek(log(n)) molte iterazioni e ciascuna iterazione richiede una quantità costante di tempo per essere eseguita, pertanto la complessità temporale totale è O(log(log(n))). Caso 2: CPP
// func() is any constant root function for (int i = n; i > 1; i = func(i))  {   // some O(1) expressions or statements } 
In this case i takes values n n1/k(N1/k)1/k=n1/k2N1/k3... N1/ktronco d'alberok(log(n))quindi ci sono nel registro totalek(log(n)) iterazioni e ciascuna iterazione richiede tempo O(1), quindi la complessità temporale totale è O(log(log(n))). Fare riferimento all'articolo di seguito per l'analisi dei diversi tipi di loop. https://www.geeksforgeeks.org/dsa/how-to-analyse-loops-for-complexity-analysis-of-algorithms/ Crea quiz