13. januar 2010 - 10:28Der er
7 kommentarer og 1 løsning
Hvorfor er O(t(n)*b^t(n)) = 2^O(t(n))?
Jeg er ved at læse op til en eksamen på datalogi-studiet og beviset for at en nondeterministisk TM der kører i tiden O(t(n)) kan konverteres til en deterministisk TM der kører i tiden 2^O(t(n)) indeholder at O(t(n)*b^t(n)) = 2^O(t(n)), hvor b er en konstant. Er der nogle der kan hjælpe mig med at forstå den resonering?
Servicekontrakter er uafhængige af markedssituationen og bidrager således med den forudsigelighed, som både ledelser og investorer tørster efter.
11. juni 2024
Slettet bruger
13. januar 2010 - 11:26#1
Mener du ikke O(t(n)*b^t(n)) = O(b^t(n))?? Det er fordi b^t(n) løber meget hurtigere end t(n) og egentlig fortæller mere om performance en t(n).
I eksemplet sidst i dette indlæg kan du se, at det kun er b^t(n), der bidrager til den mærkbare vækst og t(n) fremstår som en konstant.
Med O notation, er konstanter underordnet, fordi vi kun er interesseret i performanceudviklingen som funktion af elementer og ikke den faktiske tid, en operation tager: O(1000*n) = O(n)
O(t(n)*b^t(n)) = 2^O(t(n)) udtrykket er taget direkte fra et bevis på side 260 i bogen "Introduction to the Theory of Computation".
Med andre ord - Uanset hvor hurtigt t(n) vokser (Om det er O(n^2) eller bare O(n)), gælder det at O(t(n)*b^t(n)) = 2^O(t(n)). Jeg kan bare ikke forstå hvorfor det er sådan. Du siger at 2^n = 4^(n/2). Hvordan hjælper det i udtrykket? Det er klart at O(t(n)*b^t(n)) => 2^O(t(n)) - Men hvorfor er der lige netop sat dette loft?
Synes godt om
Slettet bruger
13. januar 2010 - 13:00#4
I 2^n = 4^(n/2) er n/2 n ganget med en konstant (1/2). Da konstanter er ligegyldige, kan det reduceres til 2^n = 4^n og also x^n = y^n. Derfor kan man benytte 2^n til at beskrive performance (ligesom b^n, 12^n, osv. vil være lige gyldige).
Jeg skal ikke kunne sige, hvorfor de smider 2^ uden for funktionen..
Jeg regnede med, at jeg ville begynde på datalogistudiet til september. Jeg er ikke længere så sikker, når jeg ser på det der. *skræmt*
Synes godt om
Slettet bruger
14. januar 2010 - 09:59#8
Det skal du ikke være. Nu skal jeg ikke kunne udtale mig om datalogi (er selv lige blevet færdig som IT ingeniør), men O notation er en meget lille del af studiet, og det er egentlig ikke så svært.
Hvis du f.eks. vil indsætte et element til sidst i en liste: O(1) fordi tiden det tager ikke afhænger af, hvor mange elementer der allerede er i listen.
Hvis du vil finde noget i en liste, skal du søge hele listen igennem: O(n) fordi der er n elementer
Man kan lave lister, der har andre O værdier: HashMap: O(1) Sorteret liste: O(log2(n)) Eller som i dette eksempel (selvom det nok ikke er en liste): 2^O(t(n))
Ud fra dette kan du så vælge den bedste løsning til dit problem. Hvis listen er lille, kan du overveje at benytte en liste men 2^O(t(n)), men ved større lister, skal du måske overveje et HashMap med O(1).
Men som sagt er det en meget lille del af studiet, som du ikke skal være bange for.
/1
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.