Avatar billede Mcoroklo Nybegynder
22. maj 2009 - 11:43 Der er 4 kommentarer og
1 løsning

Køretidsanalyse af algoritme

Jeg sidder og skal analysere en løkke for dens køretid.

Jeg kan godt se den køre i O(sqrt(n)), men jeg er i tvivl om den formelle metode.

Algoritmen:

i=1
j=1
while i<=n do
  i = i+1
  j = j+1

Hvordan beviser man formelt at køretiden er det den er? Jeg har før set man kan gøre det med en summation af i, i hver iteration, også få et udtryk med k.

Men hvordan?
Avatar billede arne_v Ekspert
22. maj 2009 - 15:29 #1
Som den er skrevet i spoergsmaalet koerer den O(n).

Og det er ret nemt at se da loekken altid vil blive koert n gange.
Avatar billede Mcoroklo Nybegynder
25. maj 2009 - 10:54 #2
Jeg har lavet en mindre væsentlig fejl da jeg skrev den ind.

i bliver ikke plusset med 1, men med j:

i=1
j=1
while i<=n do
  i = i+j
  j = j+1

Hvilket giver den spændende krølle.
Avatar billede arne_v Ekspert
25. maj 2009 - 13:35 #3
Den er ganske rigtigt O(sqrt(n)).

Og hvordan viser man det?

Der er sikkert en matematisk måde, men her kommer lidt common sense:

Grundliggende vokser i med +1 +2 +3 +4 +5 altså med antal hidtidige gennemløb.

Tænk på i's værdi som arealet af en retvinklet trekant hvor x aksen er antal gennemløb og y aksen er sidste plus.

Så kan man se at:

i = 0.5 * antal gennemløb * sidste tilvækst = 0.5 * antal gennemløb^2

og dermed når i=n:

n = 0.5 * antal gennemløb * sidste tilvækst = 0.5 * antal gennemløb^2

=>

antal gennemløb = sqrt(2*n)

Og derfor er det en O(sqrt(n)) algoritme.
Avatar billede Mcoroklo Nybegynder
25. maj 2009 - 13:51 #4
Det er i hvert fald en måde. Jeg ved ikke om den går i en eksamenssituation, men non-the-less en metode.

Tak.

Smid et svar.
Avatar billede arne_v Ekspert
25. maj 2009 - 14:57 #5
kommer her
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester