logo

Časovna kompleksnost zanke, ko se spremenljivka zanke eksponentno »razširi ali skrči«

Za takšne primere je časovna kompleksnost zanke O(log(log(n))). Naslednji primeri analizirajo različne vidike problema. Primer 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... 2kdnevnikk(log(n)). Zadnji člen mora biti manjši ali enak n in imamo 2kdnevnikk(log(n))= 2log(n)= n, kar se popolnoma ujema z vrednostjo našega zadnjega člena. Torej je v skupnem dnevnikuk(log(n)) veliko ponovitev in vsaka ponovitev traja konstantno količino časa, zato je skupna časovna kompleksnost O(log(log(n))). Primer 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/kdnevnikk(log(n))tako da jih je skupaj logk(log(n)) ponovitev in vsaka ponovitev traja O(1), tako da je skupna časovna kompleksnost O(log(log(n))). Glejte spodnji članek za analizo različnih vrst zank. https://www.geeksforgeeks.org/dsa/how-to-analyse-loops-for-complexity-analysis-of-algorithms/ Ustvari kviz