logo

Tidskomplexitet för en loop när Loop-variabeln "expanderar eller krymper" exponentiellt

För sådana fall är slingans tidskomplexitet O(log(log(n))). Följande fall analyserar olika aspekter av problemet. Fall 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... 2kloggak(logg(n)). Den sista termen måste vara mindre än eller lika med n och vi har 2kloggak(logg(n))= 2log(n)= n som helt överensstämmer med värdet av vår senaste term. Så det finns totalt loggark(log(n)) många iterationer och varje iteration tar en konstant tid att köra, därför är den totala tidskomplexiteten O(log(log(n))). Fall 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/kloggak(logg(n))så det finns totalt loggark(log(n)) iterationer och varje iteration tar tid O(1) så den totala tidskomplexiteten är O(log(log(n))). Se nedan artikel för analys av olika typer av slingor. https://www.geeksforgeeks.org/dsa/how-to-analyse-loops-for-complexity-analysis-of-algorithms/ Skapa frågesport