IAJCE Přednáška č. 9. int[] pole = new int[pocet] int max = pole[0]; int id; for(int i =1; i< pole.length; i++) { // nikoli 0 if (Pole[i] > max) {

Podobné dokumenty
Algoritmizace prostorových úloh

Náplň. v Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění

Algoritmizace a programování

Algoritmizace řazení Bubble Sort

Časová složitost algoritmů

V případě jazyka Java bychom abstraktní datový typ Time reprezentující čas mohli definovat pomocí třídy takto:

Algoritmy I, složitost

Pole a kolekce. v C#, Javě a C++

Dynamické datové struktury III.

Zadání k 2. programovacímu testu

Časová složitost algoritmů, řazení a vyhledávání

A4B33ALG 2010/05 ALG 07. Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated. Quicksort.

Třídění a vyhledávání Searching and sorting

Základy algoritmizace a programování

Třídící algoritmy. Insert Sort. Bubble Sort. Select Sort. Shell Sort. Quick Sort. Merge Sort. Heap Sort.

5. Vyhledávání a řazení 1

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Třídění dat. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_26 04

Prioritní fronta, halda

IB111 Úvod do programování skrze Python

Základy řazení. Karel Richta a kol.

Universita Pardubice Fakulta elektrotechniky a informatiky. Mikroprocesorová technika. Semestrální práce

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

Dynamické datové struktury IV.

Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce)

Kolekce, cyklus foreach

Algoritmy vyhledávání a řazení. Zatím nad lineární datovou strukturou (polem)

Digitální učební materiál

Stromy. Jan Hnilica Počítačové modelování 14

ALG 09. Radix sort (přihrádkové řazení) Counting sort. Přehled asymptotických rychlostí jednotlivých řazení. Ilustrační experiment řazení

NPRG030 Programování I, 2018/19 1 / :03:07

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Bubble sort. příklad. Shaker sort

Standardní algoritmy vyhledávací.

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

Algoritmy I. Třídění ALGI 2010/2011

Programování v C++, 2. cvičení

int t1, t2, t3, t4, t5, t6, t7, prumer; t1=sys.readint();... t7=sys.readint(); prume pru r = r = ( 1+t 1+t t3+ t3+ t4 t5+ t5+ +t7 +t7 )/ ;

ALG 14. Vícedimenzionální data. Řazení vícedimenzionálních dat. Experimentální porovnání řadících algoritmů na vícedimenzionálních datech

Datové struktury. alg12 1

vyhledávací stromové struktury

Algoritmy a datové struktury

Maturitní téma: Programovací jazyk JAVA

IB111 Úvod do programování skrze Python

ÚVODNÍ ZNALOSTI. datové struktury. správnost programů. analýza algoritmů

Základy programování (IZP)

Digitální učební materiál

1 Úvod do Turbo Pascalu

1. Téma 12 - Textové soubory a výjimky

Úvod do programování - Java. Cvičení č.4

Select sort: krok 1: krok 2: krok 3: atd. celkem porovnání. výběr nejmenšího klíče z n prvků vyžaduje 1 porovnání

Řazení. Uspořádat množinu prvků obsahujících klíč podle definovaného kriteria.

3 Algoritmy řazení. prvku a 1 je rovněž seřazená.

DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3

Sada 1 - Základy programování

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Složitost UPR 2008/09 1

Obsah 10. přednášky: Jak bude probíhat zkouška?! Podrobné informace:

Samostatná práce. Počítače a programování 1

ˇ razen ı rychlejˇ s ı neˇ z kvadratick e Karel Hor ak, Petr Ryˇsav y 20. dubna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012

Prioritní fronta, halda (heap), řazení

Generické programování

Spojový seznam. Jan Kybic.

KTE / ZPE Informační technologie

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí:

KTE / ZPE Informační technologie

Šablony, kontejnery a iterátory

Rekurze a rychlé třídění

boolean hasnext() Object next() void remove() Kolekce

DSA, První krok: máme dokázat, že pro left = right vrátí volání f(array, elem, left, right)

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

Lineární spojový seznam (úvod do dynamických datových struktur)

Základní pojmy. Matice(řádky, sloupce) Matice(4,6) sloupce

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

Robert Haken [MVP ASP.NET/IIS, MCT] software architect, HAVIT, Základní algoritmy v praxi

Lineární a polynomická regrese, interpolace, hledání v tabulce

Dynamické datové struktury I.

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

OOPR_05. Případové studie

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

Algoritmy na ohodnoceném grafu

Šablony, kontejnery a iterátory

Programování v C++ 1, 17. cvičení

Maturitní otázky z předmětu PROGRAMOVÁNÍ

ALGORITMY A DATOVÉ STRUKTURY

Profilová část maturitní zkoušky 2013/2014

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Vyhodnocování dotazů slajdy k přednášce NDBI001. Jaroslav Pokorný MFF UK, Praha

Databázové systémy Cvičení 5.2

Zdokonalování gramotnosti v oblasti ICT. Kurz MS Excel kurz 3. Inovace a modernizace studijních oborů FSpS (IMPACT) CZ.1.07/2.2.00/28.

Spojová implementace lineárních datových struktur

Michal Krátký. Úvod do programování. Cíl kurzu. Podmínky získání zápočtu III/III

Hledání k-tého nejmenšího prvku

Vyvažování a rotace v BVS, všude se předpokládá AVL strom

TGH07 - Chytré stromové datové struktury

Transkript:

Vyhledání extrému v poli použito v algoritmech řazení hledání maxima int[] pole = new int[pocet] int max = pole[0]; int id; for(int i =1; i< pole.length; i++) // nikoli 0 if (Pole[i] > max) max = pole[i]; nové maximum id = i; Minimum = stejný princip Algoritmy řazení počátek algoritmu: první prvek = maximum Úvod jedna ze základních činností při práci s daty (až 25% času) Základní terminologie sort o třídit, roztřiďovat, rozdělovat, zařadit (podle druhů) o uspořádat, seřadit řazení = přeskupování prvků množiny tak, aby vytvořily určitou posloupnost, ve které platí mezi prvky vztah menší větší o seřaď studenty podle data narození třídění = činnost; prvky z velké množiny jsou rozdělovány do menších množin (podskupin) podle nějaké společné vlastnosti o roztřiď studenty podle data narození do 10 skupin řazení a třídění se běžně zaměňuje, obojí = přeskupit posloupnost směr řazení o vzestupně o sestupně prvek[i] <= Prvek[i+1] pro všechna i prvek[i] >= Prvek[i+1] pro všechna i klíč o = položka záznamu, podle které se řadí o při řazení neelementárních prvků ( záznam = datová struktura s více (různými) položkami více později) věk: 21 13 89 4 Jméno: Alois Pepa Jirka Lenka hmotnost: 88,6 68,2 110 30,8 1

o příklad třídění, klíč = věk 4 13 21 89 Lenka Pepa Alois Jirka 30,8 68,2 88,6 110 1) primární, sekundární, terciární řazení položky jsou seřazeny podle primárního klíče, vzniklé podskupiny podle sekundárního atd. o stabilita třídění = metoda neporuší integritu jednoho záznamu různé metody řazení různé rychlosti, paměťové nároky, vhodné pro různě velké množiny prvků poznámky: o dále diskutované algoritmy nad polem: int[] pole = 3,89,1,55,12; o efektivita algoritmů diskutována později o všechny algoritmy mají několik variant, lze je vylepšit Řazení přímým výběrem Select sort též řazení s výběrem mezního prvku Princip: 1. V poli nalezneme prvek s nejmenší hodnotou a zapamatujeme si jeho pořadí 2. Vyměníme tento prvek s prvkem na prvním místě 3. Postupně opakujeme body 1. a 2. nad zbývající, nesetříděnou částí pole Průběh 3,89,1,55,12 1,89,3,55,12 1,89,3,55,12 1,3,89,55,12 1,3,89,55,12 1,3,12,55,89 1,3,12,89,55 1,3,12,55,89 1,3,12,55,89 2

řešení v C#: static void SelectSort(int[] pole) int min, temp; for (int i = 0; i < pole.length; i++) min = i; // pozice min prvku // nalezeni minima for (int j = i + 1; j < pole.length; j++) if (pole[j] < pole[min]) min = j; // prohozeni prvku temp = pole[i]; pole[i] = pole[min]; pole[min] = temp; Řazení přímým vkládáním Insert sort postup je používán i v běžném životě Princip: 1. máme setříděno k prvků řazení karet 2. pro (k+1). prvek nalezneme místo v již setříděné posloupnosti zbytek posloupnosti se odsune 3. Postupně opakujeme body 1. a 2. nad zbývající, nesetříděnou částí posloupnosti Průběh // pred tridenim po trideni 3,89,1,55,12 3,89,1,55,12 3,89,1,55,12 1,3,89,55,12 1,3,89,55,12 1,3,55,89,12 1,3,55,89,12 1,3,12,55,89 poznámka: Posunutí karet snadné; posunutí pole = cyklus trvá dlouho 3

řešení v C#: static void InsertSort(int[] pole) int j, temp; for (int i = 1; i < pole.length; i++) temp = pole[i]; j = i; while ((pole[j - 1] > temp) && (j > 0)) pole[j] = pole[j - 1]; j--; pole[j] = temp; Řazení zaměňováním Bubble sort modifikace Select sort Princip: 1. Porovnáváme vždy dva sousední prvky směrem od konce posloupnosti 2. Pokud Pole[i+1] < Pole[i] prohodíme je; konec na prvním prvku nejmenší prvek na první pozici probublá posloupností částečně se setřídí posloupnost 3. Postupně opakujeme body 1. a 2. konec u druhého prvku v pořadí atd. Průběh // porovnani // prohozeni 3,89,1,55,12 3,89,1,12,55 3,89,1,12,55 3,89,1,12,55 3,89,1,12,55 3,1,89,12,55 3,1,89,12,55 1,3,89,12,55 // probublala 1 1,3,89,12,55 1,3,89,12,55 1,3,89,12,55 1,3,12,89,55 1,3,12,89,55 1,3,12,89,55 // probublala 3 1,3,12,89,55 1,3,12,55,89 1,3,12,55,89 1,3,12,55,89 1,3,12,55,89 1,3,12,55,89 // probublala 12 1,3,12,55,89 praktické řešení viz cvičení umět ale i na zkoušku! Závěrečné poznámky další metody Quick sort, Merge sort, Radix sort o pro cca 13 a více položek o pro < 13 Quick sort horší Quick sort efektivnější než zmíněné metody 4

Složité záznamy fyzicky netřídíme Před řazením: pozice záznamu v původní posloupnosti Po řazení: Algoritmy vyhledávání Úvod vyhledávání = nachází se hledaný prvek v posloupnosti? Výstup: o nalezeno/nenalezeno (bool) o index (pozice) prvku výstupní informace index nalezeného prvku (i): o i >= 0: prvek se nachází v posloupnosti na pozici i o i = -1: prvek se nenachází prvek je v poli vícekrát, vracíme: o první výskyt o všechny výskyty (výstupní informace = pole) dle organizace vstupní posloupnosti: o neuspořádaná posloupnost nutné tzv. sekvenční vyhledávání o uspořádaná (setříděná) posloupnost lze i tzv. binární vyhledávání dle povahy hledaného prvku o elementární prvek (jedno číslo v poli int) o subposloupnost ( text v textu ) Sekvenční vyhledávání První výskyt prvku první výskyt prvku = stop algoritmu 5

požadavek: metoda, bude vracet pozici prvku o nalezeno pozice (0 až pole.length-1) o nenalezeno záporné číslo (-1) řešení v C#: static int SeqSearch(int[] pole, int prvek) int index; for(int i = 0; i < pole.length; i++) if (pole[i] == prvek) index = i; return index; return -1; static void Main(string[] args) int[] pole = 3, 89, 1, 55, 12 ; int pozice = SeqSearch(pole, 55); if (pozice == -1) Console.WriteLine("Prvek nebyl nalezen"); else Console.WriteLine("Prvek je na pozici 0", pozice); Všechny výskyty prvku Nutno prohledat celé pole Návratová hodnota = pole, prvky o Nenalezen žádný prvek pozice (indexy) výskytu prvku null problém: výstupní pole nutno vytvořit před vyhledáváním, ale velikost (počet nalezených výskytů) známo po vyhledávání. Řešení: vytvoření pomocného pole o max velikosti po skončení hledání (znám počet výskytů) vytvořím správné pole a pomocné kopie 6

řešení v C#: static int[] SeqSearchAll(int[] pole, int prvek) int dalsi = 0; // indexy v poli nalezenych vyskytu int[] temppole = new int[pole.length]; for (int i = 0; i < pole.length; i++) if (pole[i] == prvek) temppole[dalsi++] = i; // ulozime pozici // vytvorime nove pole o spravnem poctu prvku if (dalsi > 0) int[] indexy = new int[dalsi]; for (int i = 0; i < indexy.length; i++) indexy[i] = temppole[i]; return indexy; else return null; Binární vyhledávání Více hledání nad stejnými daty vyplatí se data setřídit Pak lze hledat metodou půlení intervalu = binární vyhledávání sekvenční Výstup všech výskytů nemá smysl!!! řešení v C: int BinarySearch(int[] pole, int prvek) int stred, dolni = 0, horni = pole.length - 1; je rychlejší než while (horni >= dolni) stred = (horni + dolni) / 2; if (prvek < pole[stred]) horni = stred - 1; else if (prvek > pole[stred]) dolni = stred + 1; else // prvek nalezen return stred; return -1; // nenalezen 7

Řazení a vyhledávání v C# prakticky vzestupně, quick sort int[] cisla = 1, -5, 88, 0, 10 ; string[] jmena = "Pepa", "Martin", "Alois", "Cecilka"; Array.Sort(cisla); // jmena sestupne vstupní pole musí být setříděné Array.Sort(jmena); Array.Reverse(jmena); int index = Array.BinarySearch(pole, 5); // hledá 5 nalezeno index prvního nalezeného prvku nenalezeno záporné číslo Metody třídy Array umí pracovat s poli (skoro) jakéhokoli typu 8