Kupacrendezés. Az s sorban lévő elemeket rendezzük a k kupac segítségével! k.empty. not s.isempty. e:=s.out k.insert(e) not k.

Hasonló dokumentumok
Algoritmuselmélet 2. előadás

Programozás alapjai 9. előadás. Wagner György Általános Informatikai Tanszék

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések)

Algoritmusok vektorokkal keresések 1

Rendezések. A rendezési probléma: Bemenet: Kimenet: n számot tartalmazó (a 1,a 2,,a n ) sorozat

Specifikáció. B logikai formula, a bemeneti feltétel, K logikai formula, a kimeneti feltétel, A az algoritmus, amelyre az állítás vonatkozik.

Edényrendezés. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), átlagos eset Θ(n).

A programozás alapjai előadás. [<struktúra változó azonosítók>] ; Dinamikus adatszerkezetek:

Számjegyes vagy radix rendezés

Specifikáció. B logikai formula, a bemeneti feltétel, K logikai formula, a kimeneti feltétel, A az algoritmus, amelyre az állítás vonatkozik.

Legkönnyebb és legnehezebb Rendezési algoritmusok

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

Számláló rendezés. Példa

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

14. Mediánok és rendezett minták

1. ábra. Számláló rendezés

Bevezetés a programozásba. 12. Előadás: 8 királynő

Algoritmusok és adatszerkezetek gyakorlat 09 Rendezések

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.

Algoritmizálás, adatmodellezés tanítása 7. előadás

7. előadás. Gyorsrendezés, rendezés lineáris lépésszámmal. Adatszerkezetek és algoritmusok előadás március 6.

2. Milyen értéket határoz meg az alábbi algoritmus, ha A egy vektor?. (2 pont)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Egyszerű programozási tételek

Adatszerkezetek II. 10. előadás

10. előadás Speciális többágú fák

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

Adatbázis rendszerek Gy: Algoritmusok C-ben

Kupac adatszerkezet. 1. ábra.

Információs Technológia

Gyakorló feladatok ZH-ra

Algoritmusok és adatszerkezetek gyakorlat 07

15. A VERSENYRENDEZÉS

Programozási módszertan. Függvények rekurzív megadása "Oszd meg és uralkodj" elv, helyettesítő módszer, rekurziós fa módszer, mester módszer

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

Adatszerkezetek 7a. Dr. IványiPéter

Algoritmusokfelülnézetből. 1. ELŐADÁS Sapientia-EMTE

Programozás alapjai. 8. előadás

Kupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1]

Algoritmusok pszeudókód... 1

Tartalomjegyzék Algoritmusok - pszeudókód

Rekurzív algoritmusok

Műveletek mátrixokkal. Kalkulus. 2018/2019 ősz

Véletlenszám generátorok és tesztelésük. Tossenberger Tamás

Problémaosztályok, algoritmusok. Rendezés, keresés

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

Programozás alapjai II. (7. ea) C++

ALGORITMUSOK ÉS PROBLÉMAOSZTÁLYOK (1. előadás)

Algoritmusok pszeudókód... 1

angolul: greedy algorithms, románul: algoritmi greedy

Kiegészítő részelőadás 1. Az algoritmusok hatékonyságának mérése

file:///d:/okt/ad/jegyzet/ad1/b+fa.html

Nagyságrendek. Kiegészítő anyag az Algoritmuselmélet tárgyhoz. Friedl Katalin BME SZIT február 1.

Számítógép és programozás 2

Tartalomjegyzék Algoritmusok - pszeudókód

2018, Funkcionális programozás

Egyszerű programok készítése Kifejezések Bitszintű műveletek Relációs műveletek... 58

értékel függvény: rátermettségi függvény (tness function)

Programozási módszertan. Mohó algoritmusok

Algoritmusok - pszeudókód... 1

Adatszerkezet - műveletek

1. ábra. Egy rekurzív preorder bejárás. Egy másik rekurzív preorder bejárás

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Adatszerkezetek és algoritmusok

AAO 3. Csink László 2007

Láncolt listák Témakörök. Lista alapfogalmak

A félév során előkerülő témakörök

Szalai Péter. April 17, Szalai Péter April 17, / 36

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Fájlszervezés. Adatbázisok tervezése, megvalósítása és menedzselése

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

C# feladatok gyűjteménye

5 = hiszen és az utóbbi mátrix determinánsa a középs½o oszlop szerint kifejtve: 3 7 ( 2) = (példa vége). 7 5 = 8. det 6.

Kétfázisú szimplex algoritmus és speciális esetei

Kombinatorikai algoritmusok. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

Kombinatorikai algoritmusok

15. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: január 30.

Algoritmuselmélet 1. előadás

Robotika. Kinematika. Magyar Attila

4.2. Tétel: Legyen gyenge rendezés az X halmazon. Legyen továbbá B X, amelyre

10. Szimultán kiválasztások

Alkalmazott modul: Programozás. Programozási tételek, rendezések Giachetta Roberto

Más szavakkal formálisan:, ahol olyan egész szám, hogy. Más szavakkal formálisan:, ahol olyan egész szám, hogy.

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus adatszerkezetek. Dinamikus adatszerkezetek. Önhivatkozó struktúrák. Önhivatkozó struktúrák

Lekérdezések feldolgozása és optimalizálása

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

Algoritmusok bonyolultsága

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

Rendezések. Összehasonlító rendezések

Adatszerkezetek 2. Dr. Iványi Péter

Haladó rendezések. PPT 2007/2008 tavasz.

INFORMATIKA javítókulcs 2016

Rendezettminta-fa [2] [2]

Fibonacci számok. Dinamikus programozással

Algoritmusok és adatszerkezetek II.

2. Visszalépéses stratégia

Átírás:

10. Előadás

Beszúró rendezés Használjuk a kupacokat rendezésre! Szúrd be az elemeket egy kupacba! Amíg a sor ki nem ürül, vedd ki a kupacból a maximális elemet, és tedd az eredmény (rendezett) sorba! 2

Kupacrendezés Az s sorban lévő elemeket rendezzük a k kupac segítségével! k.empty not s.isempty e:=s.out k.insert(e) not k.isempty e:=k.delmax s.in(e) 3

Kupacrendezés A kupacok hatékony rendezőt adnak: Szúrjunk be minden elemet a kupacba n elem, ezekhez kell O(log 2 n) O(n log n) sorrendben távolítsuk el az elemeket n elem, ezekhez kell O(log 2 n) O(n log n) Összesen O(n log n) ignorálva a 2-es konstanst, stb. Nézzünk meg egy animációt a kupacrendezésre! 4

Gyorsrendezés (Quicksort) hatékony rendezési algoritmus C.A.R. Hoare készítette, 1960. Az Oszd meg és Uralkodj algoritmus egy példája Két fázis Partíciós fázis Oszd a munkát két részre! Rendezési fázis Uralkodj a részeken!

Gyorsrendezés (Quicksort) Partíció Válassz egy strázsát (pivot)! Válaszd a strázsa pozícióját olyanra, hogy minden elem tőle jobbra nagyobb legyen! minden elem tőle balra kisebb legyen! < strázsa strázsa > strázsa

Gyorsrendezés (Quicksort) Uralkodj Alkalmazd ugyanezt az algoritmust mindkét félre! < strázsa > strázsa < p p > p strázsa < p p > p

Gyorsrendezés (Quicksort) Implementáció quicksort( void *a, int also, int felso ) { int pivot; /* Terminálási feltétel! */ if ( felso > also ) { pivot = feloszt( a, also, felso ); } quicksort( a, also, pivot-1 ); quicksort( a, pivot+1, felso ); } Oszd meg Uralkodj

Quicksort - Megosztás Ez a példa int-eket használ az egyszerűség kedvéért! Bármelyik elem jó strázsának, válaszd a bal szélsőt! 23 12 15 38 42 18 36 29 27 also felso

Quicksort - Megosztás állítsd be a bal és jobb végét bal jobb 23 12 15 38 42 18 36 29 27 also str_elem: 23 felso

Quicksort - Megosztás mozgasd a jelzéseket, míg szembetalálkoznak! bal jobb 23 12 15 38 42 18 36 29 27 also str_elem: 23 felso

Quicksort - Megosztás mozgasd a bal jelzőt, míg a str_elem-nél elemekre mutat! mozgasd a jobb jelzőt hasonlóan bal jobb 23 12 15 38 42 18 36 29 27 also str_elem: 23 felso

Quicksort - Megosztás Cseréld ki a str_elem két oldalán rossz sorrendben lévő elemeket! bal jobb 23 12 15 38 42 18 36 29 27 also str_elem: 23 felso

Quicksort - Megosztás A bal és a jobb szembetalálkoztak, így állj le! bal jobb 23 12 15 18 42 38 36 29 27 also str_elem: 23 felso

Quicksort - Megosztás Végül cseréld ki a str_elem -et és a bal -nál lévőt bal jobb 23 12 15 18 42 38 36 29 27 also str_elem: 23 felso

Quicksort - Megosztás add vissza az str_elem pozícióját! bal 18 12 15 23 42 38 36 29 27 also str_elem: 23 felso

Quicksort Uralkodj! rekurzívan rendezi a bal felét rekurzívan rendezi a jobb felét 18 12 15 23 42 38 36 29 27 str_elem: 23

Gyorsrendezés algoritmusa Gyorsrendezés (A, also, felso) also < felso q := Feloszt(A, also, felso) Gyorsrendezés (A, also, q-1) Gyorsrendezés (A, q+1, felso) SKIP (A vektorban, also és felso indexek között)

Feloszt(A, also, felso) str_elem:=a[also]; bal:=also; jobb:=felso; bal < jobb A[bal]<= str_elem and bal <felso bal:= bal+1 A[jobb]>= str_elem and jobb >also jobb:= jobb-1 bal < jobb Csere(A[bal], A[jobb]) SKIP A[also]:=A[bal]; A[bal]:= str_elem; return bal;

Quicksort - Analízis Felosztás vizsgálj meg minden elemet egyszer O(n) Uralkodás az adatok kétfelé osztása O(log 2 n) összesen szorzat O(n log n) ugyanaz, mint a Heapsort a quicksort általában gyorsabb kevesebb összehasonlítás De van egy gond

Quicksort az igazság! Mi történik, ha az adatok már rendezettek, vagy majdnem rendezettek? Azt várnánk, hogy akkor gyorsabb lesz!

Quicksort az igazság! Rendezett adatok pivot? < pivot 1 2 3 4 5 6 7 8 9 > pivot

Quicksort az igazság! Rendezett adatok Minden partíció létrehoz egy 0 méretű feladatot és egy n-1 méretűt! A partíciók száma? pivot 1 2 3 4 5 6 7 8 9 > pivot pivot 2 3 4 5 6 7 8 9 > pivot

Quicksort az igazság! Rendezett adatok Minden partíció létrehoz egy 0 méretű feladatot és egy n-1 méretűt! A partíciók száma? minden n időigénye O(n) összesen n O(n) pivot 1 2 3 4 5 6 7 8 9 pivot > pivot 2 3 4 5 6 7 8 9 > pivot vagyis O(n 2 ) A Quicksort olyan rossz, mint a buborék vagy a beszúrásos rendezés?

Quicksort az igazság! A Quicksort O(n log n) viselkedése a majdnem egyforma partíciókon múlik O( log n ) van Átlagosan is majdnem ez a helyzet és a Quicksort általában O(n log n) Mit lehet tenni? Általában semmit De javíthatjuk az esélyeinket!

Quicksort A pivot választása Bármelyik strázsa megteszi Válasszunk egy másikat pivot 1 2 3 4 5 6 7 8 9 < pivot > pivot amikor a partíciók egyformák akkor O(n log n) időre lesz szükség

Quicksort 3-ból a középső pivot Végy 3 pozíciót, és válaszd a középsőt Pl. első, középső, utolsó 1 2 3 4 5 6 7 8 9 a középső 5 ez a rendezett adatok legjobb felosztása! O(n log n) idő Mivel a rendezett (vagy majdnem rendezett) adatok elég gyakoriak, ez egy jó stratégia különösen, ha azt várjuk, hogy az adataink rendezettek lesznek!

Quicksort Véletlen pivot Válassz egy strázsát véletlenszerűen Minden felosztásnál másik pozíciót Átlagosan a rendezett adatokat jól osztja szét O(n log n) idő Kulcs követelmény: A pivot kiválasztása O(1) idő kell legyen

Quicksort - Garantált O(n log n)? Soha! A tetszőleges pivot választási stratégia vezethet O(n 2 ) időhöz Itt a 3-ból a középső kiválasztja a 2-t egy partícióba 1 elem kerül, a másikba 7 következőnek kiválasztja a 4-t egy partícióba 1 elem kerül, a másikba 5 1 4 9 6 2 5 7 8 3 1 2 4 9 6 5 7 8 3

Rendezés Buborék, Beszúrásos, Maximumkiválasztásos O(n 2 ) rendezések egyszerű kód kis n-re gyors lehet (rendszer függő) Quick Sort Oszd meg és uralkodj O(n log n)

Quicksort O(n log n) de. Lehet O(n 2 ) is A pivot kiválasztásától függ 3-ból a középső véletlen pivot Jobb, de nem garantált

Quicksort használjuk inkább a Heapsort-ot? A Quicksort általában gyorsabb kevesebb összehasonlítás és csere néhány empirikus adat: Quick Heap Beszúró Hasonl Csere Hasonl Csere Hasonl Csere 100 712 148 2842 581 2596 899 200 1682 328 9736 9736 10307 3503 500 5102 919 53113 4042 62746 21083

Quicksort Heap Sort Quicksort általában gyorsabb néha O(n 2 ) jobb pivot választás csökkenti a valószínűségét ha átlagosan jó végrehajtási időt akarunk, használjuk ezt üzleti alkalmazások, információs rendszerek Heap Sort általában lassúbb Garantált O(n log n) lehet rá építeni, ezt a tervezésben felhasználni! használjuk például real-time rendszerekhez Az idő egy megszorítás