Avatar billede Alufiber Nybegynder
01. juni 2015 - 02:23 Der er 7 kommentarer og
1 løsning

Algoritmer O-notation

Hej.

Jeg sidder pt. og læser om algoritmer, herunder O-notation.

Så vidt jeg har forstået, så kan O-notation anvendes til at beskrive udførselstiden for algoritmer.

Eksempelvis at O(N) beskriver en algoritme med en udførselstid der vokser lineært med størrelsen af det input man giver algoritmen.

Og at O(N^2) beskriver en algoritme med en udførselstid der er proportional med kvadratet på størrelsen af det input man giver.

Under min læsning er jeg stødt på nogle eksempler, hvor der eksempelvis står følgende:

n = O(n^2)
1 / n = O(1)
5n^7 = O(2^n)
13 log n = O(square root(n))
n(log n)^2 = O(n^2)
3n^2 + 7n = O(2n^2 + n)

Og selvom disse umiddelbart ser simple ud, så kan jeg simpelthen ikke forstå dem, selvom jeg har prøvet at læse rundt omkring.

Hvad er n i overstående? Er det input? Er der en venlig person som vil prøve at beskrive hvorfor de overstående ligninger er som de er og hvorfor de skulle gælde?

Generel information om algoritmer, O-notation og lignende beskrevet på en yderst letforståelig måde ville jeg virkelig være taknemmelig for!

Tak på forhånd
Avatar billede arne_v Ekspert
01. juni 2015 - 02:50 #1
n = O(n^2)
1 / n = O(1)
5n^7 = O(2^n)
13 log n = O(square root(n))
n(log n)^2 = O(n^2)
3n^2 + 7n = O(2n^2 + n)

giver heller ikke mening for mig.

Hvor har du funder dem henne?
Avatar billede Alufiber Nybegynder
01. juni 2015 - 08:56 #2
Avatar billede erikjacobsen Ekspert
01. juni 2015 - 10:05 #3
Ja, det er lidt sjusket notation, som det står skrevet. Men det er jo det man gør, desværre

Betegnelse O(n^2) er mængden af funktioner, der højst er kvadratiske. Dvs at n^2 ligger der, men det gør n også. Når man så skriver

    n = O(n^2)

Betyder det at n ligger i mængden af højst kvadratiske funktioner.
Avatar billede Alufiber Nybegynder
01. juni 2015 - 15:08 #4
Ah, okay.

Er det muligt, at du kan udlede nogle af de andre også?

Skal f.eks. 1 / n = O(1) forstås som om, at 1 / n ligger i mængden af 1 (algoritmer med konstant udførselstid) eller hvordan?
Avatar billede erikjacobsen Ekspert
01. juni 2015 - 15:43 #5
Ja, 1/n er altid mindre end 1 (n bare en smule stor), så i den yderste teoretiske forstand er den i algoritmer med konstant tid.

Der er bare det ved det, at jeg ikke lige har set sådan en algoritme ;) 

(jeg har ikke lige tid til de andre)
Avatar billede arne_v Ekspert
02. juni 2015 - 04:26 #6
Jeg mener at den brug er en misvisende brug af terminologien.

Strengt taget betyder O(n^2) kun at at der eksisterer et k hvor:

f(n) <= k * n^2 for tilpas store n

og f(n)=n opfylder den betingelse.

Men i praktisk sammehaeng giver det kun mening at bruge den mindste big O.

f(n)=n boer derfor kun kaldes O(n).
Avatar billede Alufiber Nybegynder
27. juni 2015 - 14:14 #7
Kan umiddelbart læse mig til, at erikjacobsen ikke samler på point.

Vil du smide et svar arne_v? Så kan tråden blive lukket
Avatar billede arne_v Ekspert
27. juni 2015 - 16:01 #8
svar
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