logo

מורכבות הזמן של לולאה כאשר משתנה לולאה "מתרחב או מתכווץ" באופן אקספוננציאלי

עבור מקרים כאלה מורכבות הזמן של הלולאה היא O(log(log(n))). המקרים הבאים מנתחים היבטים שונים של הבעיה. מקרה 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 2ק(2ק)ק= 2ק2(2ק2)ק= 2ק3... 2קעֵץק(יומן(n)). האיבר האחרון חייב להיות קטן או שווה ל-n ויש לנו 2קעֵץק(יומן(n))= 2log(n)= n שמתאים לחלוטין לערך המונח האחרון שלנו. אז יש ביומן כוללק(log(n)) איטרציות רבות ולכל איטרציה לוקח פרק זמן קבוע לרוץ ולכן מורכבות הזמן הכוללת היא O(log(log(n))). מקרה 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/ק1/ק)1/ק= n1/ק2נ1/ק3... נ1/קעֵץק(יומן(n))אז יש ביומן כוללק(log(n)) איטרציות וכל איטרציה לוקחת זמן O(1) כך שמורכבות הזמן הכוללת היא O(log(log(n))). עיין במאמר למטה לניתוח של סוגים שונים של לולאות. https://www.geeksforgeeks.org/dsa/how-to-analyse-loops-for-complexity-analysis-of-algorithms/ צור חידון