1 / 17

Nevezetes algoritmusok

Nevezetes algoritmusok. Lineáris keresés A legalapvetőbb keresési algoritmus. Adott elemet keresünk egy halmazban úgy, hogy minden elemet végignézünk, amíg a keresettet meg nem találjuk.

clover
Download Presentation

Nevezetes algoritmusok

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Nevezetes algoritmusok

  2. Lineáris keresés A legalapvetőbb keresési algoritmus. Adott elemet keresünk egy halmazban úgy, hogy minden elemet végignézünk, amíg a keresettet meg nem találjuk. Legrosszabb eset: A halmaz minden elemével hasonlítunk, ez n összehason-lítást jelent. Átlagban: n/2+1 keresés. Ha listában vagy külső táras állomány-ban kell rendeznünk. (Ekkor nehézkes a lista középső tagjának vizsgálata.)

  3. Bináris keresés Rendezett halmazban keresünk. A keresett elemet a középső elemhez hasonlítjuk. Ha egyezik, akkor megtaláltuk; ha nem, akkor abban a felében folytatjuk a keresést, amelyet a keresett érték kijelöl: ha a keresett érték kisebb, mint a középső elem, akkor az első felében, egyébként a másodikban. Az eljárást ilyen módon folytatjuk tovább. [Log2n]+1 összehasonlítás. Ha a középső elem vizsgálata nem okoz nehézséget. Pl.: tömbben tároljuk.

  4. Beszúrás Van egy n elemű rendezett halmazunk. Be akarunk szúrni egy n+1-edik elemet. Egyik lehetőség: végigszaladunk a halmazon, és betesszük a beszúrandó elemet az elé az elem elé, ami már nem előzi meg. Általában n/2, de a legrosszabb esetben n összehasonlításra van szükség. Másik lehetőség: a kérdéses elemet a középső elemmel hasonlítjuk össze. Ha az új elem megelőzi a középsőt, akkor a halmaz első felében keressük a helyét a továbbiakban, stb. A lépésszám log2n, vagy az erre következő első egész szám, azaz [log2n], ha n nem 2 hatványa.

  5. Beszúrásos rendezés A rendezés során sorrendbeli hibát keresünk a halmazban. Ennek során használhatunk lineáris (n(n-1)/2 összehasonlítás), illetve bináris keresést (n-1k=1log2(k+1) összehasonlítás). A kialakult sorrendtől eltérő helyet megjegyezzük, az ott lévő elemet elmentjük, majd addig keresünk attól visszafelé, amíg nála nagyobbat nem találunk, az elé kell majd beszúrnunk. Amikor a helyet megtaláltuk, akkor a közbeeső elemeket feljebb tolva, az imént kiemelt elemet a felszabaduló helyre illesztjük. Túl sok mozgatást igényel.

  6. Shell rendezés A beszúrásos módszer lépésenként finomított változata. A halmaznak csak minden d-edik elemét vizsgáljuk, azaz d lépésközzel végezzük el a beszúrásos rendezést. Ezután csökkentjük a lépésközt, és úgy végezzük el a rendezést. A folyamat addig tart, amíg a lépésköz 1 nem lesz.

  7. Összefésülés Van két n elemű halmazunk: (a1, ... , an) és (b1, ... ,bn). Ezeket kell egyesíteni. Hasonlítsuk össze az b1 elemet rendre az a1, a2, ... elemekkel. Beszúrjuk b1-et az elé az ai elé, amelyet közvetlenül megelőz. Ettől az ai-től folytatjuk tovább b2-re, stb. Legfeljebb 2n-1 összehasonlításra van szükség.

  8. Minimum (maximum) elven alapuló rendezés Egy adott részhalmazban (kezdetben a teljes halmaz) megkeressük a legkisebb (legnagyobb) elemet és ezt tesszük az első helyre. A következő lépésben a második elemtől kezdve vizsgáljuk és ismét a legkisebb (legnagyobb) elemet visszük előre, stb. A mindenkori legkisebb elem keresése lineáris kereséssel történik.

  9. Buborékrendezés Növekvő sorrend: halmaz elejéről indulva rendre összehasonlítjuk a szomszédos elemeket, s ha a kisebb van hátrább, megcseréljük őket. Az eljárást mindaddig folytatjuk, amíg a rendezettség ki nem alakul. (Csökkenő sorrend fordítva!) Összehasonlítások száma n(n-1)/2. Kis sorozatok (max. 10-20 elemű) esetén használható, egyébként sok összehasonlítást igényel. Módosított buborékrendezés Az alapelv hasonló, de a pásztázás többirányú és váltakozó.

  10. Gyorsrendezés (quick-sort) Kiválasztjuk a halmaz tetszőleges elemét. Ezt nevezzük alapelemnek, mert ehhez viszonyítjuk a többit. Először balról lépegetünk addig, amíg ennél az alapelemnél csupa kisebbet találunk. Ha egy nagyobb vagy egyenlő elemhez érünk, jobbról vizsgálódunk, és keressük az alapelemnél nem nagyobb elemet. Ha megtaláltuk, kicseréljük a kettőt és a következő, eggyel nagyobb, illetve kisebb elemtől kezdjük a keresést és a cserét.

  11. Kupac A fa olyan gráf, amely körmentes, azaz bármely két csúcsa között pontosan egy élsorozaton át lehet eljutni. A bináris fa olyan fa, amelynek csúcspontjaiból maximum 2 részfa nyílik (azaz fokszáma 2). A kupac egy olyan teljes bináris fa, amelyben egy tetszőleges csúcsban lévő érték nem lehet nagyobb a fiaiban lévő elemeknél.

  12. Egy f gyökerű részfa kupaccá alakítása a következő módon történik (a, az f-ben tárolt érték, f1 és f2 f fiai, a bennük tárolt érték a1,a2): Felszivárog(f){Ha min(a1,a2)<a, akkor min{a1,a2} és a helyet cserél.Ha az a elem ai-vel cserélt helyet, akkor felszivárog(fi)} A következő eljárás az egész fát kupaccá teszi: Kupacépítés(f){Az f fa v csúcsaira lentről felfelé, jobbról balra felszivárog(v)} A kupacra két alapművelet jellemző: 1. a legkisebb elem törlése, amely a fa gyökerében van;2. új elem hozzáadása a kupachoz.

  13. Részfa: t részfája a-nak, ha a a gyökere, azaz közvetlen megelőző eleme t-nek, vagy t részfája a valamely részfájának. Elágazásszám: közvetlen részfák száma. Fokszám: egy fa fokszáma pontjai max. elágazásszámával egyezik meg (a bináris fák fokszáma ezért 2). Szülő/ős: egy fában, a gyökeret kivéve valamennyi csomópontnak egyedi szülője van, amelyet megelőző csomópontnak nevezünk. (N őse L-nek, ha L közvetlen leszármazottja N-nek).

  14. Leszármazott (gyermek):az L csomópontot akkor nevezzük az N csomópont leszármazottjának, ha L az N-et közvetlenül követő elem, vagyis L az N gyermeke. Megkülönböztethetünk bal, illetve jobb oldali gyermekeket. A gyermekek egymásnak testvérei. Szukcesszor: a fa egy elemének jobb/bal oldali szukcesszora az elemből kiinduló jobb/bal részfa gyökéreleme, amennyiben a részfa nem üres. Él: egy csomópontból az azt követőbe húzott vonalat élnek nevezzük

  15. Kupacrendezés Bemenet a rendezendő sorozatot tartalmazó A[1..n] tömb. Először kupacot építünk, utána n-szer kivesszük a legkisebb elemet a kupacból, és újra kupaccá alakítunk. Az eljárás nem csökkenő sorrendben adja vissza az elemeket. A kupacrendezés a leggyorsabb ismert rendező módszer.

  16. Ládarendezés A módszer akkor hasznos, ha a lehetséges elemek tartománya a rendezendő elemek számához képest nem túl nagy. Tegyük fel, hogy az A[1..n] tömböt szeretnénk rendezni, és tudjuk, hogy A elemei az m elemű U halmazból kerülnek ki. Ekkor lefoglalhatunk egy U elemeivel indexelt B tömböt. Ennek elemei - a ládák - U-beli elemek listái lesznek. Kezdetben minden láda üres. Az eljárás első fázisában végigolvassuk az A tömböt, és az s=A[i] elemet a B[s] lista végére fűzzük. A második fázisban azelejéről a végéig növő sorrendben végigmegyünk B-n és a B[i] listák tartalmát visszaírjuk A-ba.A módszer akkor hasznos, ha a lehetséges elemtípusok száma nem túl nagy a rendezendő elemek számához képest.

More Related