1 / 22

Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós

Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő: Imre Mihály, műszaki informatikus hallgató. Önrendez ő listák 1.

esma
Download Presentation

Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós

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. Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszék Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő: Imre Mihály, műszaki informatikus hallgató

  2. Önrendező listák1. Pl. a raktározási gyakorlatban a tételeket nem azonos gyakorisággal keressük (a tételek 15%-ára vonatkozik a keresések 85%-a). Tételezzük fel a következő hivatkozási gyakoriságot: Ekkor a keresés átlagos költsége: 2

  3. Önrendező listák2. ........ Az átlagos költség tehát: Szekvenciális listában az elemeket a keresési gyakoriságukalapján csökkenő sorrendbe rendezzük. 3

  4. Önrendező listák 3. MF: Move to Front: a hivatkozott elem előre megy T: Transpose: a hivatkozott elem a megelőzővel helyet cserél FC: Frequency Count: számol, rendez Sleator, Tarján: az MF módszer nem rosszabb bármely más módszer hatékonyságának kétszeresénél (a bizonyítás bonyolult). Ezért ezt nyugodtan használhatjuk. 4

  5. 4. szint 3.szint L[9] L[7] L[5] L[4] L[6] L[2] L[1] L[8] L[3] 2. szint 1. szint Skip lista 1. Többszintű, kulcs szerint rendezett láncolt lista. A pointerek száma: 5

  6. Skip lista 2. Keresés: a bináris kereséshez hasonló 1.az i. szinten összehasonlítás, ha = megvan: vége, ha > az adott elemnél, akkor folytatás 2. 2.az i. szintű láncon előre megyünk, míg nagyobbat nem találunk, ha a szint végére értünk, akkor nincs a listában: vége 3.vissza az i. szinten a megelőző elemre, lelépünk az (i-1)-edik szintre ezen a helyen 4.ugrás 1. Hatékonysága O(log N), mindig feleződik az intervallum. 6

  7. Skip lista 3. Beszúrás: pozíció megkeresése O(log N), célszerű ellentétes láncolat is a legalsó szinten  3N pointer kell. Pointer állítás így O(1), beszúrás O(log N). Ezzel torzul a skip lista tökéletessége, mert felette már nem valódi felező, negyedelő, stb. pointerek lesznek. Tökéletes skip lista: ahol pontosan középen vannak a láncolat elemei. Véletlen skip lista: csak körülbelül teljesül a felezés, átlagosan az i-edik szinten N/2ielemű a láncolat. 1 a valószínűsége, hogy egy elem az 1. szinten benne van a láncban 1/2 a valószínűsége, hogy egy elem a 2. szinten benne van a láncban 7

  8. Skip lista 3. • 1/2i a valószínűsége, hogy egy elem az i. szinten benne van a láncban • N elem esetén log(N) a szintek száma, így a beszúrás algoritmusa a következő: • keressük meg az új elem helyét a listában • határozzuk meg az új elem max. szintszámát, úgy, hogy az i. érték 1/2i valószínűséggel kerüljön kiválasztásra. 1<= i <= log(N) (véletlenszám generálás) • fűzzük be az új elemet minden i-nél nem nagyobb szintű láncolatba 8

  9. Rendezés A CPU idők ¼ -ét fordítják rendezésre. Kötetnyi irodalom foglalkozik vele.Feltételek: - a teljes lista beférjen a memóriába, - a kulcs egész, - a kiinduló sorrend az elemek egy permutációja, - csökkenő vagy növekvő sorrend, - a tételek átrendezését saját helyükön kell végrehajtani. Tömbök rendezése: belső rendezés. Soros fájlok rendezése: külsőrendezés. 9

  10. Rendezés Stabil rendezés: az azonos kulcsú tételek relatív sorrendje a rendezés után nem változik. A hatékonyság mérésére: - a kulcs-összehasonlítások száma (C), - a tételmozgatások száma (M). Közvetlen módszerek: egyszerű (kicsi program), több művelet, kis N-re valók. Kifinomultabb módszerek: bonyolultabb, kevesebb művelet, nagy N-re valók. 10

  11. Kiválasztásos rendezés for i =1 to N-1 begin mine= Li ; minp= i; for j = i + 1 to N if Lj < mine then begin mine= Lj ; minp= j ; end; if minp < > i then begin Lminp = Li ; Li =mine; end; end; Nem érzékeny az előrendezettségre, hatékonysága O(N2). 11

  12. Beszúró rendezés 1. A j-edik elemet beszúrjuk az 1 .. j-1 rendezett listába. Átlagos hatékonysága O(N2), érzékeny az előrendezettségre.  for i=2 to N begin j = i – 1 ; k = Li while k < Lj and j > 0 do begin Lj+1 = Lj ; j = j –1; end; Lj+1 = k; end; 12

  13. Beszúró rendezés 2. Beszúrás javítása: L0 = Lj ; A beszúrási pozíciót bináris kereséssel határozzuk meg: bináris rendezés. Az összehasonlítások száma (C) csökkent, de M nem. De egy rendezett tömb újrarendezése több időt venne igénybe, mint a soros kereséssel. 13

  14. Buborék rendezés 1. Szomszédos elemek permutációja, hatékonyság: O(N2) Elejétől a végéig: csere, ha a kisebb indexű elem értéke kisebb mint a nagyobb indexűé, így a legkisebb a végére kerül. Ezután a 2. legkisebb, és így tovább (a felső határt lehet lefelé tolni). N-1 pásztázás kell. 14

  15. Buborék rendezés 2. Javítási lehetőségek: 1. minden menetben feljegyezzük, hogy volt-e csere, ha nem volt: vége. 2. melyik pozícióban volt utoljára csere. aszimmetrikus: egyetlen rossz helyen lévő elem a tömb nehezebbik feléről egyetlen menetben a helyére kerül, míg a könnyebbik részéről a rossz helyen álló elem menetenként csak egy pozícióval kerül a helye felé. 3. keverő rendezés: alulról – felülről (előről – hátulról) elemzése: a beszúró, kiválasztó jobb. Valójában a buborék rendezés alig ér egyebet hangulatos nevénél. Akkor hatásos csak, ha a tételek már majdnem rendezettek. 15

  16. Shell rendezés 1. D. L. Shell (1959): Az elemeket nagyobb ugrásokkal próbálja meg végső helyükre tenni: - vegyünk egy intervallum hosszúság sorozatot, melynek kezdőértéke N-nél kisebb és utolsó eleme 1, - minden intervallum hosszúságra vesszük összes képezhető részsorozatot, - minden részlistára elvégezzük a beszúró rendezést. 16

  17. Shell rendezés 2. Kevesebb mozgatás kell: O(N log2 N) Shell: N/2, N/4, N/8, … O(N2) 2k-1 : 1, 3, 7, 15, ....: O(N3/2) O(N7/6) nem bizonyított 17

  18. Quick (gyors) rendezés 1. • C. A. R. Hoore (1962): • Általában a leghatékonyabb, az oszd meg és uralkodj alapelv szerint működik: • felosztási fázis, két részre bontás, • részfeladatok megoldása, • egyesítési fázis. 18

  19. Lb Lj < rekurzívan Pj Pb L1 Ln Lk Quick sort2. 19

  20. Quick sort3. - Pb az első elemre mutat - Pj az utolsó elemre mutat - L[Pb] <= L[k] ha igen, akkor Pb += 1, ha nem megállunk - L[Pj] >= L[k] ha igen, akkor Pj - = 1,ha nem megállunk - ha mindkettő megállt, felcseréljük őket, léptetés előre, vissza - mindaddig amíg a két pointer nem találkozik, így kialakul a két részintervallum - folytatás rekurzívan a részintervallumokon 20

  21. Quick sort4. A hatékonyság függ a két részintervallum relatív méretétől, ha egyformák, akkor feleződik és log N szint kell. Minden szinten minden elemet egyszer át kell nézni: O(N log N) átlagosan. Worst case: az egyik részbe csak 1 elem kerül:O(N2). A határelem (pivot elem) választásán múlik minden, legjobb ha ez véletlenszerű, vagy 3 alapuló elemen középső érték: a = ab ; b = a(b+j) div 2 ;c = aj ifa > b then csere(a,b) ifa > c then csere(a,c) ifb > c then csere(b,c) x = b; {középső} 21

  22. Quick sort5. Megjegyzések: - kis tömbökre ne alkalmazzuk:D. Knuth: 9. (eljárás hívás, programozási nyelvtől függ)beszúrásos módszerrel folytatni, mivel valószínűleg eléggé előrendezettek. - rekurzió helyett ciklus - pointer tömb (rekord….) - Quick opt(B. Breutmann) 22

More Related