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?
Sådan understøtter du en datadreven kultur, som skaber værdi i din virksomhed.
7. maj 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.