Avatar billede simonvalter Praktikant
06. december 2004 - 22:35 Der er 5 kommentarer og
2 løsninger

Big-O, forklaring ønskes på bevis

Jeg har svært ved at forstå hvad konstanterne "witnesses" C og k gør i denne sammenhæng

"let f and g be functions from the set of integers or the set of real numbers to thge set of real numbers. We say that f(x) is O(g(x)) if there are constants C and k such that
|f(x)| <= C|g(x)| whenever x > k.(this is read as "f(x) is big-oh of g(x)."


et eksempel kunne være at bevise at
----------------------------------------------------
x^4 + 9x^3 + 4x + 7 <= O(x^4)

k = 1;

since x^4 + 9x^3 + 4x + 7 <= x^4 + 9x^4 + 4x^4 + 7x^4 = 21x^4 (for x >= 1)

then x^4 + 9x^3 + 4x + 7 <= O(x^4) with c = 21 and k = 1

------------------------------------------------------------

Jeg mener nu nok jeg kan finde big-O for en funktion, algoritme osv.. men jeg kan virklig ikke se hvor k og c spiller en rolle.. det samme eksempel med k sat som noget andet ville måske hjælpe på min forståelse men jeg kan ikke rigtigt finde nogen konkrete eksempler på nettet så det ville være rart hvis der er nogen her der kan banke det ind i hovedet på mig :)
Avatar billede simonvalter Praktikant
06. december 2004 - 22:41 #1
smutter i seng nu så hvis der er nogen der kan hjælpe er jeg først tilbage engang i morgen eftermiddag.
Avatar billede arne_v Ekspert
06. december 2004 - 22:42 #2
Som jeg læser det så:

Der eksisterer:
  - et tal k
  - et tal C
hvor det gælder at hvis
    x > k
så vil
  |f(x)| <= C|g(x)|

D.v.s. at k er et tal hvor den mest betydende del af f(x) begynder at slå igennem 
og C er bare den proportionalitets faktor som man ikke bruger i big O
Avatar billede arne_v Ekspert
06. december 2004 - 22:45 #3
f(x) = x^2 + 10*x

når x er større end 10 så er x^2 større end 10*x så vi sætter k til 10

og hvis vi sætter C til 2 så vil der for g(x)=x^2 gælde at

f(x) <= 2 * g(x) for alle x > 10
Avatar billede jakoba Nybegynder
06. december 2004 - 23:06 #4
tænk på logaritmefunktionerne. for enhver logaritmefunktion er big-oh til enhver anden logarimefunktion
    logN(x) =  C *ln(x)
det er samme C-værdi for enhver x så vi behøver ikke angive nogen k-værdi. På den anden side vil C have forskellige værdier altefter hvilken base (N-værdi) vi bruger i logN()

big-oh    proportional størrelsesorden indenfor et givet interval
C          angiver proportionen for de aktuelle 2 funktioner
k          angiver intervallet hvor de 2 funktioner er proportionale

i logaritme eksemplet ovenfor er proportionen perfekt. det behøver den ikke at være, og der vi bruger det er som ofter i situationer hvor vi ønsker at bruge en simpel funktion (eller blot et sæt værdier) tilnærmer sig en 'ideal' funktion (som desværre ville være et helvede at regne med:-)).

fx:
g() er 3 punkter (x,y): (1,4) (2,2) (4,1)  forbundet
f() er hyperbelen  y = 4/x

så    f(x) <= 1 * g(x)  i intervallet 1..4  //shift nulline og brug absværdier for at gøre intervallet til et enkelt tal (spejlet over nul)

den ene funktion ligner den anden lidt i det område, så nu kan vi begynde at tegne hende der toombraiders højre arm med løftet sværd (det ligner også en hyperbel lidt)

mvh JakobA
Avatar billede simonvalter Praktikant
07. december 2004 - 16:10 #5
ok tak til jer begge det hjalp på det. I smider bare et svar
Avatar billede arne_v Ekspert
07. december 2004 - 16:11 #6
okey dokey
Avatar billede jakoba Nybegynder
07. december 2004 - 16:26 #7
ok
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