Finał My Computer Science II jest jutro i potrzebuję pomocy w zrozumieniu, jak znaleźć Big-Oh dla segmentów kodu. Przeszukałem Internet i nie znalazłem żadnych przykładów tego, jak potrzebuję go zrozumieć.Potrzebuję pomocy w zrozumieniu, jak znaleźć Big-Oh segmentu kodu
Oto problem z naszej próbki końcowe:
for(int pass = 1; i <= n; pass++)
{
for(int index = 0; index < n; index++)
for(int count = 1; count < n; count++)
{
//O(1) things here.
}
}
}
mamy się znaleźć zamówienia (Big-OH) algorytmu.
myślę że byłoby O (n^3) i tutaj jest jak doszedłem do tego wniosku
for(int pass = 1; i <= n; pass++) // Evaluates n times
{
for(int index = 0; index < n; index++) // Evaluates n * (n+1) times
for(int count = 1; count < n; count++) // Evaluates n * n * (n) times
{
//O(1) things here.
}
}
}
// T(n) = (n) + (n^2 + n) + n^3
// T(n) = n^3 + n^2 + 2n
// T(n) <= c*f(x)
// n^3 + n^2 + 2n <= c * (n^3)
// O(n) = n^3
ja po prostu nie wiem, czy robię to prawidłowo. Czy ktoś może wyjaśnić, jak oceniać taki kod i/lub potwierdzać moją odpowiedź?
Twoja odpowiedź jest poprawna, ale liczba iteracji, które liczą się dla każdej pętli, nie jest, pierwsza i druga zarówno iteracyjne 'n' razy, jak i ird iteruje 'n - 1' razy. Oczywiście to nie ma wpływu na wynik. –
Rzeczy są bardzo złe, jeśli musisz użyć algorytmu O (n^3), aby rozwiązać problem z prawdziwym światem. – john
@john: Również zależy od wielu sytuacji i liczby 'n' :-) – deepmax