3.7.1. Példa
Vizsgáljuk meg, hogy a következő függvényekre teljesül-e, hogy f x O(x).
a ) f x = 10 ; b ) f x = 3 xC7 ; c ) f x = x2CxC1 ; d ) f x = 5 ln x ; e ) f x = floor x ; f ) f x = ceil x
2 ( floor x : az x-nél nem nagyobb egészek legnagyobbika; ceil(x): az x-nél nem kisebb egészek legkisebbike.)
Ábrázoljuk a floor és a ceil függvényeket!
restart:
pontok:=seq([i,i],i=-4..3):
pont:=plot([pontok],color=blue,style=point,symbol=circle):
gorbe:=plot(floor(x),x=-4..4,color=blue,thickness=2,discont=
>
>
>
>
>
>
>
>
>
>
>
>
true):
plots[display]({pont,gorbe},title=`x-egész része,floor(x)`);
x
K4 K3 K2 K1 0 1 2 3 4
K4 K3 K2 K1 1 2 3 4
x-egész része,floor(x)
pontok:=seq([i,i],i=-3..4):
pont:=plot([pontok],color=blue,style=point,symbol=circle):
gorbe:=plot(ceil(x),x=-4..4,color=blue,thickness=2,discont=
true):
plots[display]({pont,gorbe},title=`ceil(x)`);
>
>
x
K4 K3 K2 K1 0 1 2 3 4
K4 K3 K2 K1 1 2 3 4 ceil(x)
Megoldás
a ) Igen, mert 10 % x, minden 10!x esetén.
b ) Igen, mert 3 xC7 % 4 x = 4 x minden 7!x esetén.
c ) Nem, ugyanis nem létezik olyan C állandó, amely mellett x2CxC1 %C x teljesülne minden elég nagy x esetén.
d ) Igen. Ez következik abból, hogy ln x !x teljesül minden pozitív x értékre.
e ) Igen, Ez következik abból, hogy floor x %x, s így minden 0!x esetén floor x % x. f ) Igen. Ez következik abból a tényből, hogy ceil x
2 % x
2 C1. Tehát ceil x
2 % x
2 C1 <= x minden 2!x esetén.
3.7.2. Példa
Legyen f x = floor x ceil x . Igazoljuk, hogy f x O x2 . Megoldás
Ábrázoljuk először - a tájékozódás kedvéért- az f függvényt és az x2 függvényt azonos koordinátarendszerben:
plot([x^2,floor(x)*ceil(x)],x=-5..5,discont=true,color=[blue,
>
>
red],thickness=2);
x
K4 K2 0 2 4
5 10 15 20 25
Az ábra alapján igenlő válasz látszik valószínűnek. Valóban mivel ceil x %xC1 és
floor x %x teljesül minden x-re, ezért ha 0!x, akkor floor x ceil x %x xC1 <=2 x2, ha 1
%x 3.7.3. Feladat
Döntse el, hogy a következő függvények közül melyik O x2 : a ) f x = 17 xC11 ; b ) f x = x2C1000 ;
c ) f x = x ln x ; d ) f x = x4 2 ; e ) f x = 2x ; f ) f x = ceil x 2 ;
3.7.4. Példa
Mutassuk meg a definíciót fölhasználva, hogy ha x4C9 x3C4 xC7 O x4 . Megoldás
Az alacsonyabb fokú tagokra felső korlátot kell adnunk:
Ha 9!x, akkor x4C9 x3C4 xC7%x4Cx4Cx4Cx4 = 4 x4. Ezért x4C9 x3C4 xC7
>
>
>
>
(8.1.1) (8.1.1)
>
>
O x4 .C= 4 és k= 9 mellett ui. x4C9 x3C4 xC7%C x4 Szemléltetve:
plot([x^4+9*x^3+4*x+7,4*x^4],x=0..4.5,color=[blue,red]);
x
0 1 2 3 4
0 200 400 600 800 1000 1200 1400 1600
Az ábra alapján úgy látszik, hogy finomíthatjuk a becslést, vagyis csökkenthetjük pl. a k értékét.
Vizsgáljuk a g x = 4 x4K x4C9 x3C4 xC7 = 3 x4K9 x3K4 xK7 függvényt, tehát a két függvény különbségét!
g:=x-> 3*x^4-9*x^3-4*x-7;
g:=x/3 x4K9 x3K4 xK7
Ábrázoljuk a függvényt és deriváltját azonos koordinátarendszerben:
plot([g(x),D(g)(x)],x=0..5,color=[blue,red],thickness=[3,2]);
(8.1.2) (8.1.2)
>
>
>
>
x
1 2 3 4 5
0 100 200 300 400 500 600 700 800
Az ábra alapján az sejthető, hogy pl. k= 3.5 is megfelel. A különbségfüggvény szélsőértékét is meghatározhatjuk. A derivált komplex gyökei:
gyok:=[solve(D(g)(x),x)];
gyok:= 1
12 1017C72 97 1/3C 27
4 1017C72 97 1/3 C 3
4,K1
24 1017
C72 97 1/3K 27
8 1017C72 97 1/3 C 3
4 C 1
2 I 3 1
12 1017
C72 97 1/3K 27
4 1017C72 97 1/3
,K1
24 1017C72 97 1/3
K 27
8 1017C72 97 1/3 C 3
4 K 1
2 I 3 1
12 1017C72 97 1/3
K 27
4 1017C72 97 1/3 Válasszuk ki a valós gyököket:
valos:=select(type,gyok,realcons);
(8.1.5) (8.1.5) (8.1.3) (8.1.3)
(8.1.4) (8.1.4)
>
>
>
>
>
>
valos:= 1
12 1017C72 97 1/3C 27
4 1017C72 97 1/3 C 3
4
Adjuk meg a gyök közelítő értékét:
zh:=evalf(valos);
zh:= 2.312341166 Rajzoljuk föl a deriváltat pozitív x-ekre:
plot(D(g)(x),x=0..5);
x
1 2 3 4 5
0 100 200 300 400 500 600 700 800
A különbség-függvénynek a zh= 2.312341166 helyen minimuma van.
Keresük meg a különbsé-függvény zérushelyét:
zhg:=fsolve(g(x),x=3..5);
zhg:= 3.201233421 Tehát a k = 3.201233421 is megfelel.
3.7.5. Feladat
A definíciót felhasználva mutassa meg, hogy 2xC17 O 3x .
(8.1.7)
Bontsuk föl a függvényt polinom és valódi tört összegére:
x2C1 Az átalakítást polinomosztással is elvégezhettük volna
tort:=(x^2+1)/(x+1);
Keressük meg azt a legkisebb egészt, amelyre f x O xn az alábbi f függvényekre:
a ) f x = 2 x3Cx2 ln x ; b ) f x = 3 x3Cln x 4; c ) f x = x4Cx2C1
x3C1 ; d ) f x = x4C5 ln x x4C1 .
Megoldás
Mivel ln x !x minden pozitív x értékre
a ) 2 x3Cx2 ln x !2 x3Cx3 = 3 x3, s így f x O x3 , tehát f x O x3 , de ha n!3, akkor már nem teljesül f-re O xn , vagyis n= 3.
b) Az előzőhöz hasonló gondolatmenettel n= 3.
c ) Végezzük el a polinomosztást:
tort:=(x^4+x^2+1)/(x^3+1);
tort:= x4Cx2C1 x3C1
hanyados:=quo(numer(tort),denom(tort),x,'r');
hanyados:=x
>
>
>
>
(8.1.11) (8.1.11) tort=hanyados+r/denom(tort);
x4Cx2C1
x3C1 =xC x2KxC1 x3C1
A második tag, a x2C1Kx
x3C1 kifejezés valódi tört, tehát elég nagy x értékre kisebb x-nél, sőt bármely rögzített pozitív számnál. Szemléltesük is ezt a tényt:
plot([x,(x^2+1-x)/(x^3+1)],x=0..4,color=[blue,red]);
x
0 1 2 3 4
0 1 2 3 4
Tehát f x O x
d ) Bontsuk szét a törtet:
x4C5 ln x
x4C1 = x4C1Cln x K1
x4C1 = 1C ln x K1
x4C1 , ahol ln x K1
x4C1 ! xK1
x4C1 < x4C1
x4C1 = 1, ha 1!x.
Tehát f x O 1 . Másképpen n= 0.
3.7.9. Feladat
Keressük meg azt a legkisebb egészt, amelyre f x O xn az alábbi f függvényekre:
a ) f x = 2 x2Cx3 ln x ; b ) f x = 3 x5Cln x 4; c ) f x = x4Cx2C1
x4C1 ; d ) f x = x3C5 ln x x4C1 .
3.7.10. Példa
Mutassuk meg, hogy x2C4 xC17 O x3 , de x3 nem O x2C4 xC17 . Megoldás
Egyrészt x2C4 xC17%x2Cx2Cx2 = 3 x2%3 x3 minden 17!x esetén,tehát x2C4 xC17 O x3 . Másrészt ha x3 O x2C4 xC17 volna, akkor
x3%C x2C4 xC17 <= 3 C x2 teljesülne minden elég nagy x értékre. Ez azt jelentené, hogy x%3 C teljesülne, ami nyílván lehetetlen állandó C-re és elég nagy x-re.
3.7.11. Feladat
Mutassa meg, hogy 3 x4C1 O x5
10 , de x5
10 nem O 3 x4C1 . 3.7.12. Példa
Mutassuk meg, hogy 3 x4C1 O x4
2 és x4
2 O 3 x4C1 . Megoldás
Az első részhez: 3 x4C1%4 x4 = 8 x4
2 ,minden 1!x esetén. A második részhez:
x4
2 %3 x4 <=1(3 x4C1) minden x -re.
3.7.13. Feladat
Mutassa meg, hogy x ln x O x2 , de x2 nem O x ln x .
3.7.14. Példa
Adjuk meg a lehető legjobb nagy O becslést a következő függvényekre:
a ) n2C8 nC1 ; b ) n ln n Cn2 n3C2 ; c ) n!C2n n3Cln n2C1 . Megoldás
a ) A meghatározó tag az n2 n-nel való szorzata, tehát a függvény O n3 .
Részletezve n2C8 nC1 =n3Cn2C8 n + 8%4 n3 , ha 1%n. Tehát nem túl szigorú becslést végezve k= 1 és C= 4 választásigazoltuk a függvényről, hogy O x3 .
b ) Mivel n ln n !n, az első tényező meghatározó tagja az n2, míg a második tényezőé az n3. Így a függvény O n5 . Ez a definíció alapján - mint tudjuk - azt jelenti, hogy
n ln n Cn2 n3C2 !C n5 (0!x) Ez pedig 0!x-ra egyenértékű a
>
>
>
>
(8.1.12) (8.1.12) n ln n Cn2 n3C2
n5 !C
A tört végtelenben vett határértéke:
Limit((n*ln(n)+n^2)*(n^3+2)/(n^5),n=infinity)=limit((n*ln(n)+
n^2)*(n^3+2)/(n^5),n=infinity);
nlim/N
n ln n Cn2 n3C2
n5 = 1
Ez pedig azt jelenti, hogy minden 1!C megfelel. Legyen pl. C= 2.
plot([2,(n*ln(n)+n^2)*(n^3+2)/(n^5)],n=1..10,color=[blue, red],thickness=[2,3]);
n
1 2 3 4 5 6 7 8 9 10
1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0
Láthatóan a hányados "elég hamar " kisebb lesz mint 2.
A példából látható, hogy ha limx
/N
f x
g x =C, ahol C valós szám, akkor f x O g x c ) Az első tényezőt illetően megjegyezzük, hogy
2n!n!,
ha 4%n, ezért az első tényező meghatározó tagja az n!. A második tényező meghatározó tagja az n3. Ezért a függvény O n! n3
(8.1.13)30
(8.1.13)
>
>
>
>
3.7.15. Példa
Adjunk nagy O becslést az alábbi függvények mindegyikére.Az f függvényt O g becslő függvény legyen a lehető legegyszerűbb és a legkisebb rendű!
a ) n ln n2C1 Cn2 ln n ;
b ) n ln n C1 2C ln n C1 n2C1 ; c ) n2nCnn2.
Megoldás:
a ) Mindenekelőtt megjegyezzük, hogy az ln n2C1 és az ln n azonos nagy O osztályba tartoznak, mi mivel ln n2 = 2 ln n (0!n). Ezért itt a második tag gyorsabban növekszik és így
a legegyszerűbb pontos becslés: O n2 ln n Az alábbi ábra alapján úgy tűnik, hogy...
plot([n*ln(n^2+1)+n^2*ln(n),1.5*n^2*ln(n)],n=1..6,color=
[blue,red],thickness=[3,2],title=`f(x)=kék, 1.5*g(x)=piros`);
n
1 2 3 4 5 6
0 10 20 30 40 50 60 70 80 90
f(x)=kék, 1.5*g(x)=piros
... C= 1.5 és k = 4.5 megfelel.
Pontosabban, vegyük az 1.5 g x Kf x különbségfüggvényt. Ennek zérushelye.
gyok:=solve(n*ln(n^2+1)+n^2*ln(n)=1.5*n^2*ln(n));
>
>
>
>
(8.1.15) (8.1.15) (8.1.13) (8.1.13)
(8.1.14) (8.1.14)
>
>
gyok:=K0.08983733895K0.6660442539 I,K0.08983733895C0.6660442539 I, 4.082826035
f:=n->1.5*n^2*ln(n)-n*ln(n^2+1)-n^2*ln(n);
f:=n/1.5 n2 ln n Kn ln n2C1 Kn2 ln n A különbségfüggvény lehetséges szélsőértékhelye:
solve(D(f)(n));
2.604287102
plot([f(n),D(f)(n)],n=0..10,color=[blue,red],thickness=[2,2], title=`Az f-1.5*g és deriváltja`);
n
2 4 6 8 10
0 10 20 30 40 50 60
Az f-1.5*g és deriváltja
A függvény és deriváltja viselkedése alapján a becslés jó volt, sőt C= 1.5 mellett k= 4.1 is jó.
b ) Az első tag n2 ln n 2-tel egy osztályba tartozik nagy O, míg a második tag némileg kisebb osztályba, vagyis az O n2 ln n osztályba. (Minden esetben elhagyhatjuk az alacsonyabb rendű tagokat, mert ezeket "felülbírálják" a megtartott tagok- éppen ez a nagy O becslés lényege ).
Ennélfogva a válasz O n2 ln n 2
c ) Itt az egyetlen kérdés, hogy a 2n vagy az n2 kifejezés nő-e gyorsabban. Természetesen az első,
így a legjobb nagy O becslés: O n2n . 3.7.16. Feladat
Adjon nagy O becslést az alábbi függvények mindegyikére.Az f függvényt O g becslő függvény legyen a lehető legegyszerűbb és a legkisebb rendű!
a ) n3Cn2 ln n ln n C1 C 17 ln n C19 n3C2 ; b ) 2nCn2 n3C3n ;
c ) nnCn 2nC5n n!C5n .
Algoritmusok
3.7.17. Feladat
Írjon rekurzív eljárást az alábbi rekurzív módon megadott sorozatokra, majd oldja meg a rekurziókat, azaz adjon explicit képletet a sorozat általános tagjára:
a ) an= an
K1C6 an
K2, ha 2%n, a0= 3, a1= 6;, b ) an= 7 an
K1K10 an
K2, ha 2%n, a0= 2, a1= 1.
3.7.18. Feladat
Írjon rekurzív eljárást a rekurzív módon megadott Lucas-sorozatra, majd oldja meg a rekurziót, azaz adjon explicit képletet a sorozat általános tagjára:
A Lucas-sorozatot a következő rekurzió definiálja:
a0= 2, a1= 1, an= an
K1Can
K2, ha 2%n 3.7. 19. Feladat
Írjon rekurzív és iteratív eljárást az alábbi rekurzív módon megadott sorozat n-edik elemének meghatározására:
a0= 1, a1= 3, a2= 3, an= an
K1$an
K2
2 $an3K3 , ha 3%n
Ellenőrző kérdések
1. Értelmeze a nagy O-szimbólumot!
2. Mit értünk a primitív művelet fogalma alatt?
3. Definiálja az algoritmus fogalmát.
4. Mi a pszeudokód?
5. Milyen módon írhatjuk le az algoritmusokat?
6. Milyen feladatot oldanak meg a keresési algoritmusok?
7. Mit értünk egy algoritmus idő-komplexitása alatt?
8. Definiálja a rekurzív algoritmus fogalmát!
9. Írja le az iteratív algoritmus működését!
10. Mit mondhatunk a lineáris keresés idő-komplexitásáról?
11. Mit mondhatunk a bináris keresés idő-komplexitásáról?
1.
1.
>
>
2.
2.
>
>
4. Kombinatorika
A kombinatorika a matematika azon területe, amely egy véges halmaz elemeinek valamilyen szabály alapján történő csoportosításával, kiválasztásával, sorrendbe rakásával foglalkozik. Pontosabban, a kombinatorika problémái két fő kérdéskör köré csoportosíthatók:
az elemek különböző sorrendben történő elhelyezése;
az elemek kiválasztása.
Az első kérdés vezet a permutációk, a második a kombinációk, a kettő egyik pedig a variációk
fogalmához. Ha az adott elemek között egynlők is vannak, akkor ismétléses permutációkról, ha pedig a kiválasztásnál megengedjük egy elem ismételt szerepeltetését, akkor ismétléses kombinációkról, illetve ismétléses variációkról beszélünk.
Ebben a fejezetben ezeken kívül megfogalmazzuk a binomiális tételt, s partíciós problémákkal is foglalkozunk. Bevezetjük a generátorfüggvény fogalmát, s megmutatjuk, hogyan lehet azt partíciós problémák megoldásánál alkalmazni.