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

Slides:



Advertisements
Hasonló előadás
Nevezetes algoritmusok
Advertisements

I. előadás.
Logaritmikus keresés Feladat: Adott egy 11 elemű, növekvően rendezett tömb számokkal feltöltve. Keressük meg a 17-es értéket! Ha van benne, hányadik eleme.
Kiválasztás (N,A,sorszam) i := 1 Ciklus amíg (A(i) nem T) i := i+1 Ciklus vége sorszam := i Eljárás vége Kiválasztás.
Programozási tételek, és „négyzetes” rendezések
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ő:
C++ programozási nyelv Gyakorlat hét
Matematika és Tánc Felkészítő tanár: Komáromi Annamária
Adatszerkezetek Az adatokat két fő csoportra oszthatjuk: egyszerű és összetett adatok.  Az egyszerű adatot egy érték jellemez, tovább nem bontható. (szám,
Determinisztikus programok. Szintaxis: X : Pvalt program változók E : Kifkifejezések B : Lkiflogikai kifejezések C : Utsutasítások.
Gazdi László – mérnök informatikus Bsc. Tipikus viselkedési minták felismerése Bsc. Önálló labor téma Készítette: Gazdi László Konzulens:
4. VÉGES HALMAZOK 4.1 Alaptulajdonságok
Programozási alapismeretek 10. előadás
Programozási alapismeretek 8. előadás. ELTE 2/  További programozási tételek További programozási tételek 
4. előadás (2005. március 8.) Pointerek Pointer aritmetika
Egydimenziós tömbök. Deklarálás: var valtozónév:array[kezdőérték..végsőérték]of típus; type típusnév = array [kezdőérték..végsőérték] of típus; var valtozónév:
Gombkötő Attila Lineáris egyenlet.
Készítette: Pető László
OPERÁCIÓKUTATÁS Kalmár János, 2012 Tartalom A nulla-egy LP megoldása Hátizsák feladat.
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ő:
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ő:
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ő:
1 Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat 1. Bevezetés Miskolc, 2004.
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ő:
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ő:
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ő:
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ő:
AVL fák.
ELTE Szlávi - Zsakó: Programozási alapismeretek 5.1/ Keresés Specifikáció:  Bemenet: N:Egész, X:Tömb[1..N:Valami]
ELTE Szlávi-Zsakó: Programozási alapismeretek 8.1/ Kiválogatás Specifikáció:  Bemenet: N:Egész, X:Tömb[1..N:Valami]
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ő:
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ő:
Microsoft Excel Függvények VI..
Nevezetes algoritmusok Beszúrás Van egy n-1 elemű rendezett tömbünk. Be akarunk szúrni egy n-edik elemet. Egyik lehetőség, hogy végigszaladunk a tömbön,
Térkép. Mi az adat? Minden információ, amit tárolni kell. Minden információ, amit tárolni kell.  szám  szöveg  dátum  hang  kép, stb.
Előrendezéses edényrendezés – RADIX „vissza”
Rendezési algoritmusok
Félévi típus feladatok
Listák, Vermek és Várakozási Sorok. Listák Pl: Kirándulók listája Bevásárló lista Alma Kenyér Krumpli Szappan Mosópor Bevásárló lista.
Adatszerkezetek 1. előadás
Tömbök és programozási tételek
Rendezések és szövegkezelő függvények
Összetett adattípusok
Hernyák Zoltán Programozási Nyelvek II.
Programozási alapismeretek 11. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 11.2/ Tartalom  Rendezési.
Nevezetes algoritmusok
Programozási tételek.
I. előadás.
Miskolci Egyetem Gazdaságtudományi Kar Üzleti Információgazdálkodási és Módszertani Intézet Mintavételes Eljárások.
Edényrendezés. Működés, elvek - Az edényrendezés nem összehasonlító rendezés. - A rendezendő elemeket nem hasonlítjuk össze, hanem a rendezés során az.
Feladatok (értékadás)
Gráfok ábrázolása teljesen láncoltan
Programozási alapismeretek 8. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 8.2/  További programozási.
Objektum orientált programozás
Bucket sort avagy lineáris idejű rendezés. Pszeudo kód n hosszú L listára for i = 1..n If B[L[i]] != üres Akkor [L[i] Beszúrásos rendezéssel B[L[i]]-be.
Diszjunkt halmazok adatszerkezete A diszjunkt halmaz adatszerkezet diszjunkt dinamikus halmazok S={S 1,…,S n } halmaza. Egy halmazt egy képviselője azonosít.
Algoritmusok és adatszerkezetek
Programozáselmélet 2. rész Denotációs és axiomatikus szemantika.
Memóriakezelés feladatok Feladat: 12 bites címtartomány. 0 ~ 2047 legyen mindig.
„RADIX előre” edényrendezés Adott a háromjegyű bináris számok következő sorozata: 011, 111, 101, 010, 110, 001, 100 Adja meg a tömb tartalmát az egyes.
KÉSZÍTETTE: KOVÁCSICS KRISZTIÁN
Huffman kód.
NJSzT Nemes Tihamér Országos Középiskolai Sámítástechnikai Tanulmányi Verseny.
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Alapvető programozási tételek megvalósítása Czigléczky Gábor 2009.
Mediánok és rendezett minták
I. Előadás bgk. uni-obuda
Lineáris keresés Keresés (N,A,sorszam) i := 1
Informatikai gyakorlatok 11. évfolyam
2-3-fák A 2-3-fa egy gyökeres fa az alábbi tulajdonságokkal:
Algoritmusok és Adatszerkezetek I.
Előadás másolata:

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

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

Ö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

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 A pointerek száma: Többszintű, kulcs szerint rendezett láncolt lista. 5

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

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

Skip lista 3. 1/2 i 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/2 i 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

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

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

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

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

Beszúró rendezés 2. Beszúrás javítása: L 0 = L j ; 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

Buborék rendezés 1. Szomszédos elemek permutációja, hatékonyság: O(N 2 ) 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

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

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.

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

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

Quick sort rekurzívan LbLb LjLj < PjPj PbPb L1L1 LnLn LkLk

Quick sort 3. - P b az első elemre mutat - P j az utolsó elemre mutat - L[P b ] <= L[k] ha igen, akkor P b += 1, ha nem megállunk - L[P j ] >= L[k] ha igen, akkor P j - = 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

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(N 2 ). 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 = a b ; b = a (b+j) div 2 ; c = a j 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

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