miskolci egyetem informatikai intézet Általános informatikai tanszé k pance miklós

22
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ó

Upload: esma

Post on 19-Jan-2016

25 views

Category:

Documents


1 download

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

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

Miskolci EgyetemInformatikai 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ó

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

Önrendező listák 1.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:

12

1 , ... ,

8

1 ,

4

1 ,

2

1N

11 2

1 ...

8

1 3

4

12

2

11

N

N

iii Npk

1 2

1 ...

8

1

4

1

2

11

N

2

1

2

1 ...

8

1

4

1

1 N

Ekkor a keresés átlagos költsége:

2

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

Önrendező listák 2.

4

1

2

1 ...

8

1

1 N

0 2

1

1N

........

Az átlagos költség tehát: 21

N

iii pk

Szekvenciális listában az elemeket a keresési gyakoriságukalapján csökkenő sorrendbe rendezzük.

3

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

Ö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

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

Skip lista 1.

L[1] L[2] L[3] L[4] L[5] L[6] L[7] L[8] L[9]

1. szint

2. szint

3. szint

4. szint

NNN

NNNNN

2/1...4/12/11

/...4/2/

A pointerek száma:

Többszintű, kulcs szerint rendezett láncolt lista.

5

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

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

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

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/2i elemű 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

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

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ő:

1. keressük meg az új elem helyét a listában

2. 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)

3. fűzzük be az új elemet minden i-nél nem nagyobb szintű láncolatba

8

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Shell rendezés 1.

D. L. Shell (1959):

Az elemeket nagyobb ugrásokkal próbálja meg végső helyükre tenni:

16

- 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.

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

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

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

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:

1. felosztási fázis, két részre bontás,

2. részfeladatok megoldása,

3. egyesítési fázis.

18

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

Quick sort 2.

19

rekurzívan

Lb Lj

<

PjPb

L1 Ln

Lk

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

Quick sort 3.

- 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

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

Quick sort 4.

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

if a > b then csere(a,b)

if a > c then csere(a,c)

if b > c then csere(b,c)

x = b; {középső} 21

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

Quick sort 5.

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