Legkönnyebb és legnehezebb Rendezési algoritmusok



Hasonló dokumentumok
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.

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

Adatbázis rendszerek Gy: Algoritmusok C-ben

Algoritmusok és adatszerkezetek gyakorlat 03 Oszd meg és uralkodj. Nagy

6. foglalkozás. Hajócsata Keresési algoritmusok

Programozási segédlet

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

Algoritmuselmélet 2. előadás

Rendezések. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar október 24.

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

Ismétlő feladatsor: 10.A/I.

TÖMEGMÉRÉS ÖSSZEHASONLÍTÁSSAL KOFÁK A PIACON

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

5. foglalkozás. Húsz találgatás Információelmélet

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

Programozási tételek. Dr. Iványi Péter

Adatbázis és szoftverfejlesztés elmélet. Programozási tételek

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

A 2017/2018 tanévi Országos Középiskolai Tanulmányi Verseny első fordulójának feladatai. INFORMATIKA II. (programozás) kategória

A törtek és egységtörtek fogalmának megerősítése az igazságosság fogalmának segítségével

III. osztály 1 Orchidea Iskola IV. Matematika verseny 2011/2012 II. forduló

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

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

Európa az 1900-as évek elején. A játékosok cirkuszigazgatókat alakítanak, akik beutazzák Európa

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

2018, Funkcionális programozás

Az modul. Készítette: bóta mária kőkúti ágnes

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

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

ismeretek a kis számokról: 1, 2, 3, 4

Matematika. 1. osztály. 2. osztály

5/1. tétel: Optimalis feszítőfák, Prim és Kruskal algorithmusa. Legrövidebb utak graphokban, negatív súlyú élek, Dijkstra és Bellman Ford algorithmus.

Egyszerű programozási tételek

FELADATOK ÉS MEGOLDÁSOK

;3 ; 0; 1 7; ;7 5; 3. pozitív: ; pozitív is, negatív is: ;

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

A fejlesztés várt eredményei a 1. évfolyam végén

Zendo. Tervezte:Kory Heath

6. AZ EREDMÉNYEK ÉRTELMEZÉSE

1. Dóri, Samu és Bianka pénzt számoltak, és beváltották nagyobb egységekre. Rakd ki

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

Osztott algoritmusok

Szín számokkal Képábrázolás

PYTAGORIÁDA Az országos forduló feladatai 35. évfolyam, 2013/2014-es tanév. Kategória P 6

A 2016/2017 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória

Oszthatósági problémák

Statisztikai szoftverek esszé

A pillangóval jelölt feladatok mindenki számára könnyen megoldhatók. a mókussal jelölt feladatok kicsit nehezebbek, több figyelmet igényelnek.

Felvételi tematika INFORMATIKA

8. GYAKORLÓ FELADATSOR MEGOLDÁSA. (b) amelyiknek mindegyik számjegye különböző, valamint a második számjegy a 2-es?

Rekurzív algoritmusok

Kódelméleti elemi feladatgyűjtemény Összállította: Hraskó András és Szőnyi Tamás

A programozás alapjai 1 Rekurzió

Algoritmuselmélet 1. előadás

Amit a törtekről tudni kell 5. osztály végéig Minimum követelményszint

FELADATOK ÉS MEGOLDÁSOK

Kedves Első Osztályos! Rajzold be az óvodai jeledet!

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

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

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

Hogyan fogalmazzuk meg egyszerűen, egyértelműen a programozóknak, hogy milyen lekérdezésre, kimutatásra, jelentésre van szükségünk?

Az enyhe értelmi fogyatékos fővárosi tanulók 2009/2010. tanévi kompetenciaalapú matematika- és szövegértés-mérés eredményeinek elemzése

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

Nyitott mondatok Bennfoglalás maradékkal

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.

Mire jó a fejszámolás?

Számolási eljárások 12. feladatcsomag

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

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

Diszkrét matematika I.

Feladatok és megoldások az 1. sorozat Építőkari Matematika A3

A továbbiakban Y = {0, 1}, azaz minden szóhoz egy bináris sorozatot rendelünk

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

Euler tétel következménye 1:ha G összefüggő síkgráf és legalább 3 pontja van, akkor: e 3

TÖRTSZÁMOK, MÉRÉSEK. 34. modul

46. Grósz Erzsébet: A MAGYAR KÁRTYA a fejlesztésben

FELADATOK ÉS MEGOLDÁSOK

Amit a törtekről tudni kell Minimum követelményszint

FELADATOK ÉS MEGOLDÁSOK

3297 sz. Habermaaß játék. Kalózos fejlesztő játékgyűjtemény. 2-4 matekkalóz részére 6-99 éves korig.

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

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Számelmélet I.

KOVÁCS BÉLA, MATEMATIKA I.

Kris Burm játéka. Tartozékok

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

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

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

Diszkrét matematika 1.

Anno 1701 A kártyajáték, amely Klaus Teuber Catan telepesei című játékán alapul

Gyors fejszámolási tippek, trükkök és ötletek (I. rész)

19. AZ ÖSSZEHASONLÍTÁSOS RENDEZÉSEK MŰVELETIGÉNYÉNEK ALSÓ KORLÁTJAI

Bevezető. Tartalom. 10 piramis győzelmi pontok. építési költség. Piramis elemek mező 1 kocka. 1 játéktábla. privilégiumok. munkás mező.

Adatmanipuláció, transzformáció, szelekció SPSS-ben

A 2007/2008 tanévi Országos Középiskolai Tanulmányi Verseny első forduló feladatainak megoldása. II. (programozás) kategória

Szeminárium-Rekurziók

Webprogramozás szakkör

Általános algoritmustervezési módszerek

14. Mediánok és rendezett minták

Leszámláló rendezés. 1. Végigmegyünk az A-n, és ha egy elem értéke i, akkor megnöveljük C[i] értékét eggyel.

OSZTHATÓSÁG. Osztók és többszörösök : a 3 többszörösei : a 4 többszörösei Ahol mindkét jel megtalálható a 12 többszöröseit találjuk.

Átírás:

7. foglalkozás Legkönnyebb és legnehezebb Rendezési algoritmusok Tartalom A számítógépeket gyakran használják arra, hogy listákat valamiféle rendbe rakjanak, például neveket ábécé szerint, találkozókat vagy e-maileket dátum szerint vagy egyéb elemeket szám szerint. A listák rendezése abban segít, hogy gyorsan megtaláljunk dolgokat, és a szélsőértékeket könnyű észrevenni. Ha egy dolgozat eredményeit sorrendbe tesszük, a legmagasabb és legalacsonyabb érték nyilvánvaló lesz. Ha rossz módszert választunk, hosszú időbe is beletelhet, míg sorba rendezünk egy hosszú listát, még gyors számítógépen is. Szerencsére sok gyors módszert ismerünk a rendezésre. Ezen a foglalkozáson a gyerekek megismerkedhetnek több rendezési módszerrel és megfigyelhetik, hogyan tud egy intelligens módszer sokkal gyorsabban elvégezni egy feladatot, mint egy közönséges eljárás. Előismeretek Matematika: 2. vagy magasabb szint. Gyakorlati súlymérési feladatok. Képességek Mérleg használata Sorba rendezés Összehasonlítás Korcsoport 8 év vagy több Eszközök Minden gyerekcsoportnak szüksége lesz: 8 darab ugyanolyan méretű, de különböző súlyú edényre (pl. homokkal telt tejes dobozok vagy filmtekercs-dobozok) Mérlegek Feladatlap: Súlyok rendezése (Hiba: A hivatkozás forrása nem található. oldal) Feladatlap: Oszd meg és uralkodj (Hiba: A hivatkozás forrása nem található. oldal) 68

Legkönnyebb és legnehezebb Megbeszélés A számítógépek gyakran rendeznek sorba dolgokból álló listákat. Ötleteljünk és keressük meg az összes helyet, ahol a sorba rendezés fontos. Mi történne, ha ezek a dolgok nem sorrendben lennének? A számítógépek rendszerint két értéket hasonlítanak össze egyszerre. A következő oldalon szereplő foglalkozás ezzel az előfeltevéssel él, hogy a gyerekek fogalmat alkothassanak arról, hogy milyen is ez. Tevékenység 1. Osszuk a gyerekeket csoportokba. 2. Minden csoportnak szüksége lesz egy példányra a Hiba: A hivatkozás forrása nem található. oldalon levő feladatlapból, valamint külön súlyokra és mérlegekre. 3. Végezzék el a gyerekek a feladatot, majd beszéljük meg az eredményt. 69

Feladatlap: Súlyok rendezése Cél: Megtalálni a legjobb módszert ismeretlen súlyok sorba rendezéséhez. Mire van szükség: Homok vagy víz, 8 egyforma edény és egy mérleg súlyokkal. Mit kell csinálni: 1. Töltsetek minden edénybe más és más mennyiségű homokot vagy vizet. Gondosan zárjátok le. 2. Keverjétek össze őket, hogy ne lehessen tudni a súlyok sorrendjét. 3. Keressétek meg a legkönnyebbet. Mi a legegyszerűbb módja ennek? Megjegyzés: Most nem szabad használni a mérleget az egyes edények súlyának megállapításához. Egyszerre csak két súly hasonlítható össze. 4. Válasszatok ki 3 súlyt véletlenszerűen és rakjátok őket sorrendbe a legkönnyebbtől a legnehezebbig úgy, hogy ehhez csak a mérleget használhatjátok. Hogy csináltátok? Legalább hány összehasonlítást kellet végeznetek ehhez? Miért? 5. Most rakjátok sorba az összes tárgyat a legkönnyebbtől a legnehezebbig. Amikor úgy érzitek, hogy kész vagytok, ellenőrizzétek a rendezést úgy, hogy párosával újra leméritek a tárgyakat. Kiválasztásos rendezés (Selection sort) Az egyik módszert, amit a számítógép használ, kiválasztásos rendezésnek hívják. Ez a következőképpen működik. Először válasszátok ki az összes közül a legkönnyebbet és rakjátok át a másik oldalra. Majd a maradékból válasszátok ki a következő legkönnyebbet, és tegyétek azt is a másik oldalra. Ezt addig kell ismételni, amíg minden súly átkerül a másik oldalra. Számoljátok meg, hány összehasonlítást végeztetek. Extra a profiknak: Mutassátok meg, hogyan tudjátok kiszámolni matematikailag, hogy hány összehasonlítást kell végezni, hogy 8 tárgyat sorba rendezzünk. És ha 9 tárgy van? Vagy 20? 70

Feladatlap: Oszd meg és uralkodj Gyorsrendezés (Quick sort) A gyorsrendezés sokkal gyorsabb, mint a kiválasztásos rendezés, különösen nagyobb listáknál. Tulajdonképpen ez az egyik legjobb ismert módszer. A gyorsrendezés a következőképpen működik. Válasszatok ki tetszőlegesen egy tárgyat és tegyétek a mérleg egyik serpenyőjébe. Most hasonlítsátok össze az összes maradék tárgyat vele. Tegyétek a könnyebbeket tőle jobbra, a kiválasztott tárgy maradjon középen, a nehezebbeket pedig tőle jobbra. (Előfordulhat, hogy az egyik oldalra sokkal több tárgy kerül, mint a másikra.) Válasszátok ki az egyik csoportot, és végezzétek el rajta ugyanezt az eljárást. Majd a másik csoporton is. Ne felejtsétek el, hogy az ismert súlynak középen kell maradnia. Ezt az eljárást addig kell végezni, amíg egyik csoportban sem lesz egynél több tárgy. Amikor már az összes csoportot felosztották egyedüli tárgyakra, a tárgyak sorrendben lesznek, a legkönnyebbtől a legnehezebbig. Hány összehasonlítás igényel ez az eljárás? Bizonyára azt fogjátok észrevenni, hogy a gyorsrendezés hatékonyabb módszer, mint a kiválasztásos rendezés, hacsak nem a legkönnyebb vagy legnehezebb tárgyat választottátok ki elsőre. Ha olyan szerencsétek volt, hogy a középső súlyt szemeltétek ki, mindössze 14 összehasonlítást kellett tennetek a kiválasztásos rendezés 28-ával szemben. Valójában a gyorsrendezés soha nem lesz rosszabb, mint a kiválasztásos rendezés, viszont sokkal jobb lehet! Extra a profiknak: Ha a gyorsrendezéskor véletlenül mindig a legkönnyebb tárgyat választanánk ki, hány összehasonlításra lenne szükség? 71

Variációk és kiegészítések Számos különböző rendezési módszert találtak fel. A súlyaitokat ezekkel is rendezhetitek: A beillesztéses rendezés (insertion sort) úgy működik, hogy minden egyes tárgyat kiemelünk egy rendezetlen csoportból és a megfelelő pozícióba helyezzük egy folyamatosan növekvő sorban (lásd alábbi ábra). Minden egyes beillesztéssel csökken a rendezetlen csoport és nő a rendezett sor, egészen addig, míg a csoportból minden tárgy a rendezett sorba nem kerül. A kártyajátékosok gyakran folyamodnak ehhez a módszerhez, amikor a kártyáikat elrendezik a kezükben. A buborékrendezés (Bubble sort) során újra és újra végigmegyünk a listán és kicserélünk minden tárgyat, amelyek nem a jó sorrendben vannak. A lista akkor rendezett, amikor már nincs csere, amikor végigmegyünk a listán. Ez a módszer nem túl hatékony, de néhányan könnyebben megértik, mint a többit. Az összefésülő rendezés (Mergesort) egy másik módszer, ami az oszd meg és uralkodj elvét használja egy sorozat elemeinek rendezéséhez. Azzal kezdjük, hogy a listát két egyforma (vagy majdnem egyforma, ha páratlan számú elem van) listára osztjuk fel. Mind a két féllistát rendezzük, majd összefésüljük őket. Két rendezett lista összefésülése egyszerű feladat: a két sorból mindig kivesszük a legkisebbet és betesszük egy másik sorba. Az alábbi ábrán a 40 és a 60 grammos súlyok vannak a lista elején, tehát a 40 grammos az az elem, amit ki fogunk venni belőle. Hogy hogyan rendezzük a kisebb listákat? Egyszerű: összefésülő rendezéssel! Bizonyára minden lista a végén már csak egyedüli elemekből fog állni, tehát nem kell aggódni amiatt, hogy mikor kell leállni. 72

Mire jó ez az egész? Az információt sokkal könnyebb megtalálni rendezett listában. A telefonkönyvek, szótárak és a könyvek névmutatói ábécé-rendet alkalmaznak, és az élet jóval nehezebb lenne, ha nem tennék. Ha egy számsor (például a kiadások listájában) sorba van rendezve, könnyű átlátni, mert a szélsőséges esetek a lista elején és végén szerepelnek. A duplikátumokat is könnyű észrevenni, mert ezek együtt maradnak. A számítógépek idejük jelentős részét azzal töltik, hogy a dolgokat sorba rendezzék, ezért az informatikusoknak gyors és hatékony módokat kell találni ehhez. Néhány lassabb módszer, mint amilyen a beillesztéses és a buborékrendezés is hasznos lehet bizonyos speciális esetekben, de általában a gyorsakat használják, mint amilyen a gyorsrendezés is. A gyorsrendezés egy rekurzió nevű koncepciót használ fel. Ez azt jelenti, hogy egy listát egyre kisebb és kisebb részekre bontunk és minden részen ugyanazt a rendezést hajtjuk végre. Ezt a különleges megközelítést oszd meg és uralkodj elvnek nevezik. A listát újra és újra felosztjuk, amíg elég kicsi nem lesz ahhoz, hogy uraljuk. A gyorsrendezésnél a felosztást addig végezzük, amíg végül csak egy elemet tartalmaznak. Egy elemet pedig triviális sorba rendezni! Bár nagyon bonyolultnak tűnhet, a gyakorlatban drámaian gyorsabb lehet, mint a többi módszer. 73

Megoldások és tippek 4. A legjobb módszer a legkönnyebb súly megtalálásához az, hogy sorban végigmegyünk minden tárgyon, és megjegyezzük, hogy addig melyik volt a legkönnyebb. Vagyis hasonlítsunk össze két tárgyat és tartsuk meg a könnyebbet. Majd hasonlítsuk össze egy következővel, és mindig könnyebbet tartsuk meg az összehasonlításhoz. Ezt addig végezzük, amíg végig nem mentünk az összes tárgyon. 5. Hasonlítsuk össze a súlyokat a mérlegen. Ezt könnyűszerrel meg lehet tenni három összehasonlítással, olykor kettő is elég, - ha a gyerekek észreveszik, hogy az összehasonlító operátor tranzitív (vagyis ha A könnyebb, mint B és B könnyebb, mint C, akkor A is könnyebb, mint C). Profiknak: Itt egy kis emlékeztető a kiválasztásos rendezés összehasonlításainak számának összegzéséhez. Két tárgy minimumának megtalálásához egy összehasonlítás kell, háromhoz kettő, négyhez három és így tovább. Nyolc tárgy összehasonlításához a beillesztéses rendezéssel 7 összehasonlítást kell végezni, hogy megtaláljuk az elsőt, hat, hogy megtaláljuk a következőt, öt, hogy a rá következőt és így tovább. Így: 7 + 6 + 5 + 4 + 3 + 2 + 1 = 28 összehasonlítás. n tárgy 1 + 2 + 3 + 4 + + n 1 összehasonlítást igényel a rendezéshez. E számokat úgy könnyű összeadni, ha csoportosítjuk őket. Például az 1 + 2 + 3 + + 20 összeadásához csoportosítsuk így őket: (1 + 20) + (2 + 19) + (3 + 18) + (4 + 17) + (5 + 16) + (6 + 15) + (7 + 14) + (8 + 13) + (9 + 12) + (10 + 11) = 21 10 = 210 Az összeg általánosítva: 1 + 2 + 3 + 4 + n 1 = n(n 1)/2. 74