From 89f67d62d98d3df3124198bd7e9a76ada332e6ca Mon Sep 17 00:00:00 2001 From: szabomarton Date: Wed, 13 Nov 2024 12:52:21 +0100 Subject: [PATCH] added adatstrukturak --- adatstrukturak | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 adatstrukturak diff --git a/adatstrukturak b/adatstrukturak new file mode 100644 index 0000000..d0c555e --- /dev/null +++ b/adatstrukturak @@ -0,0 +1,69 @@ +Adatstruktúrák és algoritmusok + +A problémamegoldás menete + Való problémák => absztrakt modellezés => algoritmus => program + +Algoritmus + Az algoritmus egy hatékony eljárás egy feladat vagy probléma megoldására, melynek helyessége bizonyítható. + +Hatékonyság + A hatékonyságot a futási idő és a memóriaigény határozza meg. + + +Algoritmusok futásidő elemzése + Futási idő: Egy bizonyos bemenetre a végrehajtott (gépfüggetlen) alapműveletek, vagy lépések száma. + + A lépésszám pontos meghatározása helyett általában elegendő a lépésszám nagyságrendjének meghatározása, + és ebből már (kis óvatossággal) következtetni lehet arra, + hogy az algoritmus mennyire hatékony, avagy hogyan fog viselkedni nagyobb értékekre. + +Aszimptotikus Hatékonyság + Ha a bemenet mérete elég nagy, akkor az algoritmus futási idejének csak a nagyságrendje érdekes + +Az O ordó jelölés + Az O jelölést arra használjuk, hogy a futási idő növekedését aszimptotikusan alulról és felülről konstans távolságra behatároljuk. + + Például a bináris keresés futási ideje legrosszabb esetben O(log n), helytelen lenne azt állítani, hogy a bináris keresés futási ideje O (log n) minden esetben. + A bináris keresés futási ideje soha nem rosszabb, mint O (log n), de van amikor ennél jobb. + + Jó lenne egy olyan aszimptotikus jelölés ami azt fejezné ki, hogy "a futási idő maximum ennyivel nő, de ennél lassabban is nőhet." Erre használjuk az O jelölést. + + Ha a futási idő O(f(n)), akkor elég nagy n esetén a futási idő maximum k*f(n) valamilyen konstans k érték mellett. + + Azt mondjuk "f(n) ordója" vagy egyszerűen "O(f(n))" (kiejtésben használatos még az "ordó f(n)" is). + Az O jelölést aszimptotikus felső korlátként használjuk, mivel a futási időt felülről korlátozza, ha az input mérete elég nagy. + + Bináris keresés futási ideje: O(log2n) + + + +Tömb + A tömb egy olyan adatszerkezet, amely menet közben nem méretezhető át. + Tehát ha új elemeket szeretnénk egy meglévő tömbhöz adni, az csak úgy fog működni, + hogy létrehozunk egy új tömböt, ami az új elemek és a meglévő elemek tárolására alkalmas, + ezután pedig bemásoljuk a meglévő elemeket és az új elemeket a teljesen új tömbünkbe. + + Tömbökben referencia típusokat is alkalmazhatunk, + viszont ebben az esetben nem elég példányosítani a tömböt, + az egyes elemeket is példányosítani kell, mivel ebben az esetben a tömb csak az objektumra mutató referenciát tárolja, + így a példányosítás nélkül a tömb elemeinek értéke null lesz. + + Az osztályokat nem muszáj a konstrukroruk segítségével példányosítani. + Erre a célra vezették be a nyelvben az Object Initializer szintaxist, + amivel egy osztály adattagjai úgy adhatóak meg, mint egy tömb elemei. + + Ez akkor jön jól, ha van egy osztályunk, amely adattagokkal rendelkezik, + de a konstruktor az objektum minden adattagjának beállításához nagyon összetett és komplikált lenne. + Ebben az esetben nem érdemes konstruktort írni. Az objektum inicializáló szintaxis a következő: + + var objektum = new osztály(){ + Adattag = érték, + Adattag2 = érték, + Adattag3 = érték + }; + + Ez a szintaxis csak olyan adattagok esetén alkalmazható, amelyek publikusan is írhatóak. + Egyéb védelmi szinttel rendelkező adattagok nem írhatóak ezzel a módszerrel. + Ezen adattagok beállítására továbbra is a konstruktor szintaxis használható. + + Az osztályokat