Datastrukturer och algoritmer - Tidskomplexitet
Jag har en fråga (egentligen två där den andra finns i ett annat inlägg) om tidskomplexitet. Uppgiften jag försöker lösa lyder:
Anta g(n) = 3n^2 + 2n +6. Visa att g(n) = O(n2).
Har fått följande förklarad till mig:
För att visa att g(n) = O(n^2), måste vi visa att det finns en konstant c och en gräns n0 så att g(n) <= c * n^2 för alla n >= n0.
Vi kan välja c = 3 och n0 = 1. Då får vi:
g(n) = 3n^2 + 2n + 6 <= 3 * n^2 ( * ) för alla n >= 1.
Detta visar att g(n) = O(n^2).
Fast på ( * ) raden tycker jag att det borde vara omvänt håll på olikhetstecknet eller tänker jag fel, hur kan man i så fall dra den slutsatsen?
Olikheten (*) är en falsk utsaga för alla n>=1. Så den ska du inte dra några slutsatser ifrån alls. Däremot förväntas du hitta ett c och ett n0, precis som du säger. Du ska hitta ett andragradspolynom som hela tiden är större än g(n) för alla n>=n0. Polynomet 3n2 duger inte. Det är hela tiden mindre än g(n) för alla n>=1.
Formella beviset av att polynom av grad alltid begränsas av ett monom av grad följer från triangelolikheten och att om och (eftersom upprepad multiplikation med ett tal med ett tal som är större än ger ett successivt större tal.
Såtter man ihop de påståendena får man
1. Triangelolikheten
Därefter
Så ett polynom av grad är alltid mindre än om är summan av absolutbeloppen hos koefficienterna (om x > 1)