Professional Documents
Culture Documents
Adatszerkezetek És Algoritmusok Előadás Jegyzet
Adatszerkezetek És Algoritmusok Előadás Jegyzet
1)
Az algoritmusok futási ideje egy bizonyos bemenetre a végrehajtott alapműveletek vagy
lépések száma.
2)
Beszúró rendezés:
Műveletek:
- adatszerkezetek létrehozása
- adatszerkezetek módosítása
elem hozzáadása
elem cseréje
elem törlése
- elem elérése
Közvetlen elérésű memória (RAM): memóriában tárolt minden elem azonos (konstans) idő
alatt hozzáférhető, függetlenül attól, hogy az adott elem elérésekor hány elemet tartalmaz
a memória.
Adatszerkezet reprezentációja lehet:
o folytonos (vektorszerű)
o szétszórt (láncolt)
Adatszerkezetek osztályozása:
Elemek típusa alapján
homogén (azonos típusú elemek) elemeinek kapcsolata alapján tovább
bontható az osztályozás
o struktúra nélküli
o asszociatív
o szekvenciális
o hierarchikus
o hálós
Bináris keresésnél:
Homogén, rendezett adatok, folytonos reprezentáció.
Halmaz: (gyakorlati jegyzetek)
Egymástól különböző elemekből áll. Absztrakt adattípus.
Tulajdonságai: homogén, dinamikus, struktúra nélküli, folytonos reprezentációval ábrázolt.
Halmazműveletek az unió, metszet, különbség, stb.
Tömb: (absztrakt adattípus) olyan adattípus, mely előre meghatározott, konstans számú
elemből áll és minden elemet egyértelműen azonosít egy egész számokból álló véges
sorozat.
Sorozat elemeinek száma a tömb dimenziója.
Egydimenziós tömb a vektor, a szám pedig, ami az adott elem tömbön belüli helyzetét
mutatja az index.
Kétdimenziós tömb a mátrix, minden elemet kettő számjegyből álló sorozattal azonosítunk.
A mátrix sorfolytonos reprezentációja esetén megmarad az elemek közvetlen hozzáférése.
Tömb tulajdonságai: homogén, statikus, asszociatív, folytonos reprezentációval ábrázolt.
Ritka mátrix: ha a mátrixban elhelyezkedő elemek nagyrészének az értéke 0. Három soros
reprezentációval ábrázoljuk, ekkor elveszik az elemekhez történő közvetlen hozzáférés.
4)
Verem: olyan speciális absztrakt adattípus, melyben mindössze két módosító műveletet
használhatunk. (gyakorlati jegyzet)
PUSH: ami elemek a verem elejéhez történő hozzáadására szolgál.
POP: ami a verem elején elhelyezkedő elem hozzáférésére és egyben eltávolítására szolgál.
LIFO adattípus: last in, first out.
Tulajdonságai: homogén, dinamikus, szekvenciális, folytonos reprezentációval ábrázolt.
S: olyan verem, ami természetes számokat tartalmaz.
S.top: olyan érték, ami megmondja, hogy a verem az adott időpontban hány elemet
tartalmaz. Ha ez az érték 0, akkor a verem üres. Így létrehozhatunk STACK-EMPTY
műveleteket.
POP-nál ilyenkor alulcsordulás (UNDERFLOW) van.
PUSH-nál ilyenkor túlcsordulás (OVERFLOW) van.
Műveletek:
adatszerkezetek létrehozása: folytonos reprezentációval
adatszerkezetek módosítása:
o elem hozzáadása: PUSH
o elem törlése: POP
o elem cseréje: NINCS
elem elérése: POP
Sor: olyan speciális absztrakt adattípus, melyben mindössze két módosító műveletet
használhatunk. (gyakorlati jegyzet)
ENQUEUE: elemeknek a sor végére történő beszúrása.
DEQUEUE: a sor elején lévő elemhez történő hozzáférésére és egyben az adott elem
eltávolítására.
FIFO adattípus: first in, first out.
Két természetes számot tartunk nyilván: TAIL (hozzáadás) és HEAD (törlés).
Tulajdonságai: homogén, dinamikus, szekvenciális, folytonos reprezentációval ábrázolt.
Reprezentáció megközelítései:
o naív
o sétáló
o ciklikus:
Q.head és Q.tail elem.
DEQUEUE-nél UNDERFLOW.
ENGUEUE-nél OVERFLOW.
Műveletek:
adatszerkezetek létrehozása: folytonos reprezentációval
adatszerkezetek módosítása:
o elem hozzáadása: ENQUEUE
o elem törlése: DEQUEUE
o elem cseréje: NINCS
elem elérése: DEQUEUE
Láncolt lista (linked list): a lista elemei a lista fizikai tárolása során nem követik a listában
szereplő sorrendet, hanem szétszórva helyezkednek el a memóriában. Az elemek
összetettek, az adott elem értékén túl tartalmaznak egy mutatót is, mely a következő elem
memóriabeli helyét tárolja. Tehát minden eleme 2 részből áll:
1. érték 2. mutató (memóriacímet tárol)
HEAD mutató, ami a lista első elemének memóriabeli címét tartalmazza.
Ha a HEAD = NIL, akkor üres a lista.
Tulajdonságai: homogén, dinamikus, szekvenciális, szétszórt (láncolt) reprezentáció.
Típusai: egyirányban láncolt lista, kétirányban láncolt lista, ciklikus lista, multilista.
Kétirányban láncolt lista: minden eleme az adott elem értékén túl tartalmaz még két
mutatót NEXT és PREV. (x.next: x utáni elem, x.prev: x előtti elem).
LIST-SEARCH(L,k): megkeresi a k érték első előfordulását az L listában lineáris kereséssel.
Amennyiben a k érték szerepel a lista elemei között, akkor a visszatérési érték a k értéket
tartalmazó elemre mutató mutató, egyébként pedig NIL.
LIST-INSERT(L,x): beszúrja az adott x elemet az L lista legelső pozíciójába.
LIST-DELETE(L,x): eltávolítja az x elemet az L listából. Elsőnek meg kell keresni az adott érték
memóriacímét hozzá.
Műveletek:
adatszerkezetek létrehozása: szétszórt (láncolt) reprezentációval
adatszerkezetek módosítása:
o elem hozzáadása: LIST-INSERT
o elem törlése: LIST-DELETE
o elem cseréje: NINCS
elem elérése: LIST-SEARCH
5)
Táblázat: olyan összetett adatelemeket tartalmaz, melyek mindegyike alapvetően két
részből áll:
1. kulcs: ami minden esetben egyedi, így azonosítják az elemeket
2. érték: ami maga is összetett, nem szükséges egyedinek lennie
Tulajdonságai: homogén, dinamikus, asszociatív, folytonos vagy szétszórt reprezentáció.
Típusai:
soros
önátrendező: ha az adatelemek feldolgozási gyakorisága nagymértékben
eltérő, adatok tárolása láncolt reprezentáció és lineáris keresés
használatával, gyorsan reagál, megtalált elemet mindig előre hozzuk a
legelső pozícióba
kulcstranszformációs (HASH tábla): amennyiben az U kulcstér nagy (kulcsok
nagy intervallumból kerülnek ki) ezt használjuk közvetlen címzés helyett.
Amikor több kulcshoz tartozik ugyanaz a pozíció azt az esetet ütközésnek
hívjuk. Osztásos módszer: a h hash függvény a k kulcshoz az m különböző
pozíció egyikét rendeli hozzá maradékos osztás segítségével.
h(k) = k mod m
Műveletek:
INSERT: elem beszúrása
DELETE: elem eltávolítása
SEARCH: elem kulcs alapján való megtalálása
Adatszerkezetek létrehozása: folytonos vagy láncolt reprezentációval
Adatszerkezetek módosítása:
elem hozzáadása: INSERT
elem törlése: DELETE
elem cseréje: nem használjuk
Elem elérése: SEARCH
HASH táblázat:
Ütközésfeloldás láncolással műveletek:
Az azonos hash értékekkel rendelkező elemeket 1-1 láncolt listában tároljuk. j-edik
pozícióban egy mutatót találunk, mely azon láncolt lista első elemére mutat, amelyik
mindazon elemeket tartalmazza, mely elemek hash értéke j. Ha nincs ilyen, akkor az értéke
NIL.
Ütközésfeloldás nyílt címzés módszerével:
Minden elem magában a táblázatban tárolódik, ezért a táblázat egy pozíciójában vagy egy
érték található vagy pedig a NIL.
Kereséskor végig nézzük a táblázat elemeit, amíg nem találjuk meg a keresett elemet vagy ki
nem tudjuk jelenteni, hogy az elem nincs benne a táblázatban.
Előnye, hogy nincs szükség más adatszerkezet használatára és mutatók kezelésére.
6)
Fa: adattípus, ami egyrészt a csúcsok halmaza, másrészt a csúcsokat összekötő élek halmaza
alkotja.
Tulajdonsága:
Bármely két csúcsa között pontosan egy út vezet.
Van egy kijelölt csúcs, melyet gyökérnek hívunk.
Fogalmak:
o csúcs
gyökér
közbenső elem
levél
o él
o szülő
o ős (szülő, nagyszülő, ...)
o a fa magassága (ősök számának maximuma)
o gyerek
o leszármazott (gyerek, unoka, ...)
o testvér (két olyan csúcs, melyeknek közös a szülőjük)
o út
o részfa
Tulajdonságai: homogén, dinamikus, hierarchikus, folytonos vagy szétszórt reprezentáció.
Hierarchikus lista: a fa folytonos reprezentációjának az egyik lehetséges módja, mely nem
Bináris fa: olyan fa, ahol minden csúcsnak legfeljebb két gyereke lehet. Minden gyerek
baloldali vagy jobboldali. Folytonos reprezentációja:
Bináris fa bejárása:
Kifejezésfa: olyan bináris fa, mely minden közbenső eleme egy műveleti jelet tartalmaz és
minden levél eleme egy operandus.
Bináris keresőfa: olyan bináris fa, ami kielégíti azt a feltételt, hogy – Legyen x bináris
keresőfa egy tetszőleges csúcsa. Ha az y csúcs az x csúcs baloldali részfájában található,
akkor y.key < x.key. Ha az y csúcs az x csúcs jobboldali részfájában található, akkor
y.key > x.key.
Műveletek: (gyakorlat jegyzet)
keresés:
beszúrás
törlés
minimum
maximum
megelőző elem
rákövetkező elem
Műveletek:
adatszerkezetek létrehozása: szétszórt (láncolt) reprezentációval
adatszerkezetek módosítása:
o elem hozzáadása: TREE-INSERT
o elem törlése: TREE-DELETE
o elem cseréje: NINCS
elem elérése: ITERATIVE-TREE-SEARCH
7)
Egy bináris fa kiegyensúlyozott, ha bármely csúcs esetén a baloldali és a jobboldali részfa
magassága közötti különbség maximum.
AVL fa: olyan kiegyensúlyozott bináris keresőfa, mely elemek hozzáadása vagy törlése után,
szükség esetén visszaállítja a kiegyensúlyozottságot.
Műveletek:
adatszerkezetek létrehozása: folytonos vagy szétszórt (láncolt)
reprezentációval
adatszerkezetek módosítása:
o elem hozzáadása: TREE-INSERT + REBALANCE
o elem törlése: TREE-DELETE + REBALANCE
o elem cseréje: NINCS
elem elérése: ITERATIVE-TREE-SEARCH
Minden csúcsához tartozik egy szám, ami a jobboldali és a baloldali részfa magasságának a
különbsége. Ezt a számot egyensúly-faktornak hívjuk.
AVL fa módosítás esetén forgatásra is szükség lehet, hogy a fa visszanyerje a
kiegyensúlyozott alakját. Erre csak akkor van szükség, ha valamely csúcsnak az egyensúly-
faktor kilép a [-1; 0; 1] intervallumból. Ekkor 4 eset fordulhat elő:
1. 2.
3.
4.
8)
Piros-fekete fa: a bináris keresőfa minden csúcsához hozzárendel egy plusz bit információt,
a csúcs színét, ami lehet piros vagy fekete.
9)
Alapvető különbség a háttértárak és a belső memóriája (RAM) között, hogy a háttértárak
jóval nagyobb kapacitással rendelkeznek, olcsóbbak, kikapcsolás vagy áramszünet esetén is
megőrzik az adatokat, bár nagyságrendekkel lassabbak, mint a RAM.
Winchestereket úgy gyorsították meg, hogy egy időben több helyen is olvassák a lemezeket.
Egy-egy ilyen egyszerre beolvasott adatot lapnak hívunk és az eljárást, amivel a lapokat a
memóriában töltjük lapozásnak nevezzük.
Az adatok betöltése a háttértárból a memóriába tovább tarthat, mint az feldolgozása, ezért
két összetevője van a futási időnek:
háttértárhoz történő hozzáférések száma
CPU számítási ideje
TÉTEL:
Legyen n ≥ 1 természetes szám. Bármely n kulcsot tartalmazó, t ≥ 2 minimális fokszámú B-fa
n+1
esetén a fa magassága h ≤ log t 2 .
Műveletek:
adatszerkezetek létrehozása: B-TREE-CREATE
adatszerkezetek módosítása:
o elem hozzáadása: B-TREE-INSERT
o elem törlése: B-TREE-DELETE
o elem cseréje: NINCS
elem elérése: B-TREE-SEARCH
A B-TREE-SEARCH eljáráshoz lapozás szükséges, ahol h a fa magasságát, n
pedig a kulcsok számát jelöli. Mivel x.n < 2*t, a 2-3 sorokban található while ciklus
lépésszáma minden csúcsra, így a teljes futási idő .
Beszúrás:
10)
Irányítatlan gráf: a csúcsok és élek véges halmazából áll. Az élek halmazát a csúcsok
elemeiből alkotott rendezetlen párok alkotják.
Szomszédsági lista:
Szomszédsági lista:
11)
A párhuzamos algoritmusok végrehajtásához szükségesek párhuzamos számítások, ezeket
több processzor maggal rendelkező gépeken tudjuk végrehajtani.
Ezen számítógépek esetén minden processzor mag egy közös memórián osztozik.
Az ilyen jelenlegi processzorokat nevezzük többmagos processzornak (közös memórián
osztozik, de párhuzamos számításokat végez).
Futási idő:
Hozzáférési verseny (determinacy race) alakul ki abban az esetben, amikor több,
párhuzamosan futó szálon ugyanahhoz a memóriarészhez próbálunk meg hozzáférni úgy,
hogy legalább egy szál írni próbálja az adott memóriarészt.
P probléma:
A P osztály a polinom időben megoldható problémákból áll, azaz olyan problémákból,
melyekhez létezik olyan k konstans, hogy a probléma n hosszú bemenet esetén O(nk) idő
alatt megoldható.
NP probléma:
Az NP osztály olyan problémákból áll, amelyek polinom időben ellenőrizhetők.
NPC probléma:
Az NP-teljes problémák osztályát jelöli. Ha az NP-teljes problémák közül, akár csak egy is
megoldható polinomiális időben, akkor minden NP-beli problémamegoldható polinomiális
időben.
Optimalizálási probléma:
Minden megengedett megoldáshoz egy érték tartozik, feladata olyan megengedett
megoldás megtalálása, amelyhez a legjobb érték van hozzárendelve.
Döntési problémák:
NP-teljességet itt alkalmazzuk. A válasz egyszerű, lehet igen vagy nem is.
Legrövidebb út | Leghosszabb út
Euler-kör Hamilton-kör
G=(V,E) összefüggő, irányított gráf G=(V,E) gráf Hamilton-köre egy olyan
Euler-köre egy olyan kör, amelyben kör, amelyben pontosan egyszer szerepel
pontosan egyszer szerepel G minden éle. minden csúcs.
A G gráf pontosan akkor tartalmaz NP-teljes probléma, hogy egy adott
Euler-kört, ha minden csúcsából páros gráfban található-e ilyen kör.
számú el indul ki.
Megtalálására algoritmus létezik.
13)
Leszámláló rendezés: n bemeneti elem mindegyike 0 és k közötti egész szám.
Radix sort:
Adott n darab d-számjegyű szám, amelyben minden számjegy k lehetséges értéket vehet
fel, a RADIX-SORT helyesen rendezi ezeket a számokat időbe, ha a rendezés
stabil, akkor időt használ.