Trudno mi zdefiniować czas działania dla następującego algorytmu w notacji O. Moje pierwsze przypuszczenie to O (n), ale różnica między iteracjami a liczbą, którą aplikuję, nie jest stała. Jak błędnie to zdefiniowałem?Rozwiąż: T (n) = T (n/2) + n/2 + 1
public int function (int n)
{
if (n == 0) {
return 0;
}
int i = 1;
int j = n ;
while (i < j)
{
i = i + 1;
j = j - 1;
}
return function (i - 1) + 1;
}
Aby być dokładnym, bit-O jest do górnych granic, więc istnieje wiele możliwych odpowiedzi. Na przykład jest prawdą, ale raczej wprowadza w błąd, mówiąc, że ten algorytm to O (n * n). O ile to możliwe, zwykle lepiej jest używać Big-Theta do określania czasu pracy. Analiza w zaakceptowanej odpowiedzi jest równie ważna dla big-theta. –