Konkrete funktioner
Konkrete funktioner Konkrete funktioner
Konkrete funktioner Potenser Som udgangspunkt er brugen af potenser blot en forkortelse for at gange et tal med sig selv et antal gange. Hvis a ∈Rskriver vi a 2 a 3 a 4 for a · a for a · a · a for a · a · a · a . Et udtryk p˚a formena n kaldes en potens med grundtal a og eksponent n. Vi vil kun betragte potenser hvor grundtallet er positivt, alts˚a a>0. Eksempel 1 I datalogi dukker potenser p˚a formen2 n ustandselig op. De opst˚ar, fordi computere (og dataloger) ofte st˚ar med to valgmuligheder, s˚a som “sand eller falsk” og “0 eller 1”. Hvis man skal træffe n s˚adanne valg i træk, bliver det samlede antal valgmuligheder netop 2 n . En computers arbejdslager best˚ar af en lang række bits som kan have en af de to værdier 0 og 1 (bit er en forkortelse for BInary digiT). Ved at bruge flere bits kan man repræsentere mange forskellige værdier: Bits Forskellige værdier 1 2 1 =2 2 2 2 =4 3 2 3 =8 4 2 4 =16 5 2 5 =32 6 2 6 =64 7 2 7 = 128 8 2 8 = 256 16 2 16 = 65.536 32 2 32 = 4.294.967.296 64 2 64 = 18.446.744.073.709.551.614 Det er almindeligt at bruge 8, 16, 32 eller 64 bits til at repræsentere et heltal. Af historiske ˚arsager bruger Java navnene byte, short, int og long om disse repræsentationer. Jo større tal man har brug for, jo flere bits m˚a man afsætte. Et lønningssystem kan formentlig nøjes med en int, mens finansloven har brug for en long. 1 (1)
- Page 2 and 3: Vi har defineret potensen a n som
- Page 4 and 5: Potensfunktioner Der er to oplagte
- Page 6 and 7: y 10 9 8 7 6 5 4 3 2 1 0 0 1 2 3 4
- Page 8 and 9: Anvendelse i datalogi I datalogi an
<strong>Konkrete</strong> <strong>funktioner</strong><br />
Potenser<br />
Som udgangspunkt er brugen af potenser blot en forkortelse for at gange et<br />
tal med sig selv et antal gange. Hvis a ∈Rskriver vi<br />
a 2<br />
a 3<br />
a 4<br />
for a · a<br />
for a · a · a<br />
for a · a · a · a<br />
.<br />
Et udtryk p˚a formena n kaldes en potens med grundtal a og eksponent n. Vi<br />
vil kun betragte potenser hvor grundtallet er positivt, alts˚a a>0.<br />
Eksempel 1 I datalogi dukker potenser p˚a formen2 n ustandselig op. De<br />
opst˚ar, fordi computere (og dataloger) ofte st˚ar med to valgmuligheder, s˚a<br />
som “sand eller falsk” og “0 eller 1”. Hvis man skal træffe n s˚adanne valg i<br />
træk, bliver det samlede antal valgmuligheder netop 2 n .<br />
En computers arbejdslager best˚ar af en lang række bits som kan have en<br />
af de to værdier 0 og 1 (bit er en forkortelse for BInary digiT). Ved at bruge<br />
flere bits kan man repræsentere mange forskellige værdier:<br />
Bits Forskellige værdier<br />
1 2 1 =2<br />
2 2 2 =4<br />
3 2 3 =8<br />
4 2 4 =16<br />
5 2 5 =32<br />
6 2 6 =64<br />
7 2 7 = 128<br />
8 2 8 = 256<br />
16 2 16 = 65.536<br />
32 2 32 = 4.294.967.296<br />
64 2 64 = 18.446.744.073.709.551.614<br />
Det er almindeligt at bruge 8, 16, 32 eller 64 bits til at repræsentere et heltal.<br />
Af historiske ˚arsager bruger Java navnene byte, short, int og long om disse<br />
repræsentationer. Jo større tal man har brug for, jo flere bits m˚a man afsætte.<br />
Et lønningssystem kan formentlig nøjes med en int, mens finansloven har<br />
brug for en long.<br />
1<br />
(1)
Vi har defineret potensen a n som “det tal man f˚ar ved at gange a med<br />
sig selv n gange”. Det er derfor oplagt at vi har regnereglerne<br />
a m+n = a m · a n<br />
a m·n =(a m ) n<br />
Vi f˚ar brug for at udvide definitionen af potenser til at dække eksponenter<br />
der ikke er positive heltal. Fidusen er at gøre det s˚aledes at de to regneregler<br />
ovenfor stadig gælder (jf. udvidelsen af mængder til multimængder).<br />
Lad os betragte potenser p˚a formena 0 først. Ifølge (2) skal der for alle<br />
n ∈N gælde<br />
a n = a 0+n = a 0 · a n . (4)<br />
Men s˚a era 0 nødt til at være 1. Og det er s˚a vores definition.<br />
Tilsvarende bliver vi tvunget til at definere potenser med negative eksponenter<br />
p˚a enbestemtm˚ade. Ifølge (2) har vi<br />
(2)<br />
(3)<br />
1=a 0 = a n−n = a −n+n = a −n · a n . (5)<br />
S˚a a −n er nødt til at være 1<br />
a n . Og det er s˚a vores definition. Potenser p˚a<br />
formen a m−n er ifølge (2) nu givet ved<br />
a m−n = a −n+m = a −n · a m = 1<br />
an · am = am<br />
. (6)<br />
an Indtil nu har vores eksponenter alle været heltal. Lad n være forskellig<br />
fra 0. Ved brug af (3) f˚ar vi<br />
a = a 1 = a n<br />
n = a 1<br />
n ·n =(a 1<br />
n ) n . (7)<br />
Alts˚a m˚a vi definere a 1<br />
n som det tal, der ganget med sig selv n gange giver<br />
a. Dette tal kaldes den n’te rod af a og skrives n√ a. I tilfældes n =2skrives<br />
blot √ a og dette tal kaldes kvadratroden af a. Tilsvarende kaldes 3√ a for<br />
kubikroden af a. Vi har alts˚a pr. definition at ( n√ a) n = a. Potenserp˚aformen<br />
a m<br />
n er ifølge (3) nu givet ved<br />
a m<br />
1<br />
m·<br />
n = a n =(a m ) 1<br />
n = n√ am . (8)<br />
Vi har hermed defineret potenser a q for alle rationale tal q, dvs.foralle<br />
brøker. En udvidelse til alle relle tal, alts˚a potenserp˚aformena r hvor r ∈R,<br />
er ogs˚a mulig. Lad os betragte a π .Vivedatπ kan skrives som en uendelig<br />
decimalbrøk<br />
π =3,1415926... (9)<br />
2
Vi kan derfor tilnærme π med brøkerne<br />
3<br />
1<br />
, 31<br />
10<br />
, 314<br />
100<br />
, 3.141<br />
1.000<br />
, 31.415<br />
10.000<br />
– og vi definerer a π som grænseværdien af følgen<br />
314.159<br />
, ,... (10)<br />
100.000<br />
a 3<br />
1 ,a 31<br />
10 ,a 314<br />
100 ,a 3.141<br />
1.000 ,a 31.415<br />
10.000 ,a 314.159<br />
100.000 ,... (11)<br />
Detaljerne i denne definition falder uden for dette kursus, men kan findes i<br />
enhver bog om kalkulus. Vi slutter med en opsummering:<br />
Definition af potenser<br />
Lad a ∈Rvære positiv. Vi definerer:<br />
a 0 =1<br />
a n = a · a ···a<br />
<br />
n faktorer<br />
a −n = 1<br />
a n<br />
for n ∈N og n>0<br />
for n ∈N og n>0<br />
a m<br />
n = n√ a m for m, n ∈N og n>0<br />
a r = grænseværdien af a q<br />
n˚ar q g˚ar mod r<br />
gennem rationale tal<br />
for r ∈R<br />
Denne definition kan bruges til at bevise regneregler for potenser.<br />
Regneregler for potenser<br />
Lad a, b ∈Rvære positive og r, s ∈R.S˚agælder:<br />
a 0 =1 a −r = 1<br />
a r<br />
a r+s = a r · a s<br />
(a · b) r = a r · b r<br />
a r−s = ar<br />
a s<br />
a r·s =(a r ) s<br />
( a<br />
b )r = ar<br />
br Opgave 1 Lad m, n ∈N. Vis ud fra definitionen at am−n = am<br />
.<br />
an 3
Potens<strong>funktioner</strong><br />
Der er to oplagte m˚ader hvorp˚a man kan lave sig <strong>funktioner</strong> ud af potenser,<br />
idet man enten holder grundtallet eller eksponenten fast og lader den anden<br />
variere. Ved at fastholde eksponenten f˚ar vi potens<strong>funktioner</strong> som alle har<br />
formen<br />
x r hvor r er et fast, reelt tal. (12)<br />
Da vi her kun betragter positive grundtal er alle vores potens<strong>funktioner</strong> <strong>funktioner</strong><br />
p˚a R + , mængden af alle positive, reelle tal. Dvs. x r : R + →R + .<br />
Figur 1 viser grafen for nogle potens<strong>funktioner</strong>.<br />
Opgave 2 Lad xr være en potensfunktion med r = 0.Visatxrer en bijektion<br />
og har invers x 1<br />
r . Hvorfor er potensfunktionen x0 ikke en bijektion?<br />
Hvorfor har den ingen invers funktion?<br />
Bemærk at da x r og x 1<br />
r = r√ x med r = 0 er inverse <strong>funktioner</strong> har vi to<br />
identiteter som kan bruges til at simplificere udtryk:<br />
r√ x r = x og ( r √ x) r = x for alle x ∈R + og r ∈Rmed r = 0. (13)<br />
Opgave 3 Simplificér udtrykket x9<br />
7√ x 56 .<br />
Eksponential<strong>funktioner</strong> og logaritmer<br />
Ved at fastholde grundtallet i stedet for eksponenten f˚ar vi eksponential<strong>funktioner</strong><br />
som alle har formen<br />
a x hvor a er et fast, reelt tal, større end 0. (14)<br />
Da a r > 0 for alle r ∈Rhar vi a x : R→R + og enhver s˚adan eksponentialfunktion<br />
med a = 1 er en bijektion.<br />
Opgave 4 Hvorfor er 1 x : R→R + ikke en bijektion? Hvorfor har den ingen<br />
invers funktion?<br />
De inverse <strong>funktioner</strong> til eksponential<strong>funktioner</strong>ne kaldes logaritmer. Videfinerer<br />
simpelthen for a = 1:<br />
– eller med andre ord:<br />
log a x =dettaly ∈Rsom opfylder a y = x (15)<br />
log a x = y ⇐⇒ a y = x. (16)<br />
4
Funktionen loga : R + →Rkaldes logaritmen med grundtal a. Viharigento<br />
identiteter som kan bruges til at simplificere udtryk:<br />
loga(a x )=x for alle x ∈Rog<br />
a loga x = x for alle x ∈R + (17)<br />
.<br />
Vi kan desuden vise følgende regneregler for logaritmer:<br />
Regneregler for logaritmer<br />
Lad a, b ∈Rvære positive og forskellige fra 1 og lad r, s ∈R.S˚agælder:<br />
log a 1=0 log a( 1<br />
r )=− log a r log a( r<br />
s )=log a r − log a s<br />
log a(r · s) =log a r +log a s log a(r s )=s · log a r<br />
log a x = log b x<br />
log b a<br />
Opgave 5 Simplificér følgende udtryk:<br />
log5 125 2 log4 8<br />
log 6 9+log 6 4 (log 4 16) · (log 4 2)<br />
(log a b) · (log b a) log 2(2 n ) 2 log 2 n<br />
4 log 2 n<br />
Opgave 6 Bevis regnereglerne ovenfor ved at bruge regnereglerne for potenser<br />
og (16).<br />
Figur 2 viser grafen for nogle eksponential<strong>funktioner</strong> og logaritmer<br />
Fakultet<br />
Fakultet er en funktion n! :N→N. Den er defineret p˚a denaturligetalsom<br />
følger:<br />
0! = 1 og n! =1· 2 ···n for n ∈N med n>0. (18)<br />
Fakultet optræder ofte i kombinatorik, idet n! er antallet af mulige rækkefølger<br />
af n forskellige objekter. F.eks. findes der 52! forskellige m˚ader at<br />
ordne de 52 spillekort p˚a. Det første kort kan vælges p˚a 52 forskellige m˚ader.<br />
Det næste p˚a 51 forskellige m˚ader, derefter er der 50 muligheder osv. Ved det<br />
næstsidste kort har man 2 muligheder, mens det sidste kort kun kan vælges<br />
p˚a1m˚ade. Dette giver i alt 52 · 51 · 50 ···2 · 1 = 52! muligheder.<br />
Fakultet vokser temmelig hurtigt. F.eks. er 52! omtrent 8,1 · 1067 .Med<br />
andre ord m˚a det betragtes som meget usandsynligt at komme til at blande<br />
et sæt spillekort p˚a samme m˚ade to gange i ens liv (hvis ellers man blander<br />
ordentligt).<br />
5
y<br />
10<br />
9<br />
8<br />
7<br />
6<br />
5<br />
4<br />
3<br />
2<br />
1<br />
0<br />
0 1 2 3 4 5<br />
x<br />
6 7 8 9 10<br />
Figur 1: Nogle potens<strong>funktioner</strong>. I rækkefølge fra hurtigst til langsomst voksende:<br />
x3 ,x2 ,x1 = x, x 1<br />
2 = √ x, x 1<br />
3 = 3√ x. Den aftagende funktion (med<br />
punkteret linie) er x−1 = 1<br />
x .<br />
6
y<br />
10<br />
9<br />
8<br />
7<br />
6<br />
5<br />
4<br />
3<br />
2<br />
1<br />
0<br />
-1<br />
-2<br />
-3<br />
-3 -2 -1 0 1 2 3 4 5 6 7 8 9 10<br />
x<br />
Figur 2: Nogle eksponential<strong>funktioner</strong> og logaritmer. I rækkefølge fra hurtigst<br />
til langsomst voksende: 3x , 2x , log2 x, log3 x. De aftagende <strong>funktioner</strong> (med<br />
punkteret linie) er 1 x 1 = 2 2x og log 1 x.<br />
2<br />
7
Anvendelse i datalogi<br />
I datalogi anvendes logaritmer, potens<strong>funktioner</strong>, eksponential<strong>funktioner</strong> og<br />
fakultet især til analyse af algoritmers ressourceforbrug som funktion af inputtets<br />
størrelse. Ressourcer kan være tid, plads i arbejdslageret, b˚andbredde<br />
p˚a nettet eller antallet af gange algoritmen bruger harddisken.<br />
Generelt betragtes kun voksende <strong>funktioner</strong> – programmer arbejder sjældent<br />
hurtigere jo mere input de f˚ar! Da inputtets størrelse m˚ales i antallet af<br />
tegn der skal bruges til at skrive inputtet ned, er et programs ressourceforbrug<br />
formelt en voksende funktion fra N til R + . Her gælder<br />
Enhver logaritme vokser langsommere end enhver potensfunktion<br />
som vokser langsommere end enhver eksponentialfunktion. Fakultet<br />
vokser hurtigere end alle de øvrige <strong>funktioner</strong>.<br />
Formelt gælder for ethvert positivt r ∈R + og ethvert reelt tal a>1:<br />
∃n0 ∈N.∀n ∈N.n>n0 =⇒ log a n ≤ n r<br />
∃n0 ∈N.∀n ∈N.n>n0 =⇒ n r ≤ a n<br />
(19)<br />
(20)<br />
∃n0 ∈N.∀n ∈N.n>n0 =⇒ a n ≤ n! . (21)<br />
Dvs. hvis blot inputstørrelsen n er stor nok, dvs. større end n0, s˚aerlogan mindre end nr . Tilsvarende er nr mindre end an som er mindre end n! for<br />
stort nok n.<br />
Bemærk at dette gælder uanset a og r. F.eks. er en algoritme, hvis<br />
udførelsestid er givet ved n10.000 hurtigere “p˚a distancen” end en tilsvarende<br />
algoritme, hvis udførelsestid er givet ved 1,0001n . Her skal inputstørrelsen n<br />
dog være ret stor for at den første er at foretrække frem for den sidste.<br />
Eksempel 2 Vi vil undersøge for hvor stort input en algoritme med udførelsestid<br />
n3 er hurtigere end en algoritme, hvis udførelsestid er 1,5n :<br />
n n31,5n n n3 1,5n 1 1 1,513 2.197 194,6<br />
2 8 2,314 2.744 291,9<br />
3 27 3,415 3.375 437,9<br />
4 64 5,116 4.096 656,8<br />
5 125 7,6 17 4.913 985,3<br />
6 216 11,4 18 5.832 1.477,9<br />
7 343 17,1 19 6.859 2.216,8<br />
8 512 25,6 20 8.000 3.325,3<br />
9 729 38,4 21 9.261 4.987,9<br />
10 1.000 57,7 22 10.648 7.481,8<br />
11 1.331 86,5 23 12.167 11.222,7<br />
12 1.728 129,7 24 13.824 16.384,1<br />
8
Det sker s˚aledes for n>23. Betragt en moderne 3GHz pc som alts˚a kan<br />
foretage 3 milliarder simple beregninger pr. sekund. Hvis n 3 og 1,5 n angiver<br />
antallet af s˚adanne simple beregninger vil et input af størrelsen 500 tage den<br />
kubiske algoritme ca. 4 hundrededele af et sekund, mens den eksponentielle<br />
algoritme skal bruge mindst 3,7·10 78 sekunder – et astronomisk tal, i omegnen<br />
af antallet af elementar-partikler i det synlige univers!<br />
Eksempel 3 Logaritmiske udførelsestider opst˚ar typisk i situationer, hvor<br />
en algoritme i hvert trin kan se bort fra halvdelen af input. Da et naturligt<br />
tal n ∈N kun kan halveres ca. log 2 n gange før vi n˚ar ned p˚a 0 eller 1, vil<br />
s˚adanne algoritmer have udførelsestid ca. log 2 n.<br />
Et klassisk eksempel er “binær søgning” hvor et bestemt element søges<br />
i en sorteret liste – elementet kan være et bestemt navn og listen kan være<br />
en telefonbog. Hvis vi starter med at kigge midt i listen, vil vi (1) finde det<br />
søgte element, (2) finde et element der er for stort, eller (3) finde et element<br />
der er for lille. I de to sidste tilfælde kan vi se bort fra hhv. den øvre og den<br />
nedre del af listen, hvorefter vi kan fortsætte søgningen p˚a samme m˚ade med<br />
det midterste element i den resterende liste.<br />
Da logaritmer med grundtal 2 optræder s˚a ofte i datalogi, forkorter man<br />
tit log 2 n til log n. I andre sammenhænge (matematik, fysik, teknik, p˚a de<br />
fleste lommeregnere) betyder log n derimod log 10 n, s˚apasp˚a!<br />
Eksempel 4 Eksponentielle udførelsestider optræder typisk i situationer,<br />
hvor en algoritme er nødt til at undersøge alle valgmuligheder. Et klassisk<br />
eksempel er en algoritme, der skal afgøre om et givent udsagnslogisk udtryk<br />
er en tautologi. Her kender vi essentielt set ikke nogen bedre algoritme end<br />
at opstille sandhedstabellen for udsagnet (se Martin, afsnit 1.2.1). Hvis udtrykket<br />
har n booleske variabler, har tabellen 2 n rækker, en for hvert muligt<br />
valg af sandhedsværdi til hver variabel.<br />
Eksempel 5 Udførelsestider p˚a formen n! optræder typisk i situationer,<br />
hvor en algoritme er nødt til at undersøge alle mulige rækkefølger af n elementer.<br />
Et klassisk eksempel er en algoritme, der skal afgøre om en givent<br />
vejkort med n byer har en “Hamiltonvej”, dvs. en vej, der besøger samtlige<br />
n byer netop én gang. Igen kender vi ingen bedre algoritme end essentielt set<br />
at prøve alle mulige rækkefølger af byer fra en ende af. Og der er n! s˚adanne<br />
rækkefølger.<br />
9