Algoritmizace a programování



Podobné dokumenty
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) {

Algoritmizace prostorových úloh

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

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

Algoritmizace řazení Bubble Sort

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

vyhledávací stromové struktury

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

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

Algoritmy I, složitost

Kolekce, cyklus foreach

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr

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

Standardní algoritmy vyhledávací.

Algoritmy a datové struktury

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

Lineární datové struktury

Semestrální práce 2 znakový strom

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

IB111 Úvod do programování skrze Python

Základy algoritmizace a programování

bin arn ı vyhled av an ı a bst Karel Hor ak, Petr Ryˇsav y 23. bˇrezna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

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

Časová složitost algoritmů

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

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.

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

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

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

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

Základy algoritmizace. Hašování

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

Název předmětu: Školní rok: Forma studia: Studijní obory: Ročník: Semestr: Typ předmětu: Rozsah a zakončení předmětu:

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

ABSTRAKTNÍ DATOVÉ TYPY (ADT)

Radomíra Duží L Datový typ množina

Zadání k 2. programovacímu testu

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Sada 1 - Základy programování

Microsoft Office. Excel vyhledávací funkce

Algoritmizace prostorových úloh

Datové struktury 2: Rozptylovací tabulky

Binární vyhledávací stromy pokročilé partie

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

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

Abstraktní datové typy

1. D Y N A M I C K É DAT O V É STRUKTUR Y

Programování II. Návrh programu I 2018/19

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

Šablony, kontejnery a iterátory

Algoritmizace prostorových úloh

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

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

TGH07 - Chytré stromové datové struktury

1/1 ČESKÁ ZEMĚDĚLSKÁ UNIVERZITA V PRAZE PROVOZNĚ EKONOMICKÁ FAKULTA PŘIJÍMACÍ ŘÍZENÍ 2017/2018

Algoritmizace a programování

TGH07 - Chytré stromové datové struktury

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

Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky

Úvod do programování 6. hodina

Strukturované typy a ukazatele. Úvod do programování 1 Tomáš Kühr

Složitosti základních operací B + stromu

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

Rekurzivní algoritmy

PA152. Implementace databázových systémů

Zadání druhého zápočtového projektu Základy algoritmizace, 2005

Stromy, haldy, prioritní fronty

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.

5 Rekurze a zásobník. Rekurzivní volání metody

Dynamické datové struktury I.

Binární soubory (datové, typované)

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

Datové struktury. alg12 1

Úvod do programování

Šablony, kontejnery a iterátory

Abstraktní datové typy: zásobník

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

Základní datové struktury

IB111 Úvod do programování skrze Python

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

Algoritmizace a programování

Algoritmizace prostorových úloh

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

Různé algoritmy mají různou složitost

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

ANOTACE vytvořených/inovovaných materiálů

Dynamické datové struktury III.

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

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

SQL tříhodnotová logika

6 Příkazy řízení toku

7. Dynamické datové struktury

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

IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)

Lineární datové struktury

Úvod do programovacích jazyků (Java)

Databázové a informační systémy Jana Šarmanová

8 Třídy, objekty, metody, předávání argumentů metod

PODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2

Transkript:

Algoritmizace a programování Vyhledávání, vkládání, odstraňování Vyhledání hodnoty v nesetříděném poli Vyhledání hodnoty v setříděném poli Odstranění hodnoty z pole Vkládání hodnoty do pole Verze pro akademický rok 2012/2013 1

Základní algoritmy zpracování sady dat Sada dat záznamy o studentech fakulty (jméno, příjmení, datum narození, datum přijetí, průběh studia) kniha jízd datum, SPZ vozidla, počet ujetých kilometrů, čerpání phm atd. objednávky firmy objednatel, položky objednávky Základní operace, které potřebujeme provádět s obdobnou sadou dat přidat záznam (studenta) odstranit záznam (například v případě chybného založení) modifikovat aktuálně zaznamenané údaje vyhledat konkrétní záznam (na základě stanoveného kriteria) seřadit záznamy dle požadovaného kriteria (dle jména, dle studijních výsledků) Uchování záznamů aktuálně zpracovávaných programem soubor pole další struktury jako je seznam Ukažme si jednotlivé operace vyhledávání, přidávání a odstraňování za předpokladu, že jednotlivé záznamy jsou uloženy v poli pro jednoduchost budeme prozatím pracovat pouze s polem hodnot primitivního datového typu 2

Úloha vyhledávání hodnoty v poli Vyhledání Vyhledání konkrétní hodnoty h v poli a, které obsahuje n hodnot, předpokládáme, že obecně n a.length Výsledkem má být index od 0 do n-1 jako pozice výskytu hledané hodnoty, popřípadě hodnota -1, pokud se daný prvek v poli nevyskytuje Při řešení konkrétní úlohy je nutné uvažovat, zda se hledaná hodnota může v poli vyskytovat vícekrát či nikoli; pokud ano, zda se má vyhledat první výskyt, nebo první výskyt a následně další Variantně, pokud požadujeme pouze zjistit, zda se daná hodnota v poli vyskytuje či nikoli, by mohla být výsledkem hodnota true nebo false Nesetříděné pole Aplikujeme algoritmus sekvenční vyhledávání tj. postupné procházení a testování všech hodnot v poli od nejnižšího indexu Setříděné pole vzestupné uspořádání hodnot Sekvenční vyhledávání ukončení hledání, kdy nalezneme hodnotu hledané Binární vyhledávání (metoda půlení intervalu) efektivnější využití toho, že hodnoty jsou vzestupně uspořádané 3

Vyhledávání v nesetříděném poli // vyhledani prvniho vyskytu p = -1; for (int i = 0; (p == -1) && (i < n); i++){ if (a[i] == h) p = i; // (p = -1) => hodnota nenalezena // vyhledani dalsiho vyskytu d = p; for (int i = p+1; (d == p) && (i < n); i++){ if (a[i] == h) d = i; // (d = p) => dalsi hodnota nenalezena Pole a s n hodnotami Hodnoty od indexu 0 do indexu n-1 Hledaná hodnota je v proměnné h Výsledná pozice prvního výskytu hledané hodnoty je v proměnné p Pozice dalšího výskytu hledané hodnoty je v proměnné d za předpokladu, že pozice předchozího výskytu je v proměnné p 4

Vyhledávání v setříděném poli // vyhledani vyskytu pos = -1; d = 0; h = n-1; do { p = (d + h) / 2; if (a[p] == cislo) pos = p; else if (a[p] > cislo) h = p - 1; else d = p + 1; while ((pos == -1) && (d <= h)); Pole a s n hodnotami Hodnoty od indexu 0 do indexu n-1 Hledaná hodnota je v proměnné cislo Výsledná pozice výskytu hledané hodnoty je v proměnné pos Pokud pos -1, potom pos obsahuje pozici hledaného prvku Pokud pos = -1, potom d obsahuje pozici, na kterou by patřila hledaná hodnota v setříděné posloupnosti 5

Úloha odstranění hodnoty z pole Předpoklady Mějme pole a, které obsahuje n hodnot, délka pole nemusí být nutně shodná s velikostí alokované paměti, tedy obecně n a.length V rámci tohoto pole byla nalezena pozice (index) prvku pos, který se má odstranit Příslušný index by měl být v rozsahu od 0 do n-1 Požadavky na řešení Naším úkolem je odstranit prvek z pole tak, aby prvek se v poli nevyskytoval pole bylo o jednu položku kratší Řešení Pokud nezáleží na pořadí hodnot v poli kopírování posledního prvku na danou pozici pos, aktualizace délky Pořadí hodnot v poli je důležité od identifikované pozice pos až do konce pole provedeme zkopírování každého prvku na pozici předcházející, aktualizace délky pole 6

Odstranění hodnoty z pole // odstraneni prvku z usporadaneho pole // pos if ((pos >= 0) && (pos < n)) { for (int i = pos; i < n-1; i++){ a[i] = a[i+1]; n--; Pole a s n hodnotami Hodnoty od indexu 0 do indexu n-1 Hodnota, kterou požadujeme odstranit má index pos Po provedení operace obsahuje proměnná a v rozsahu od 0 do n modifikované pole 7

Úloha vložení hodnoty do pole Předpoklady Mějme pole a, které obsahuje n hodnot, délka pole nemusí být nutně shodná s velikostí alokované paměti, tedy obecně n a.length V rámci tohoto pole byla nalezena pozice (index) pos, na kterou je nutné vložit novou hodnotu h Příslušný index pos je v rozsahu od 0 do n Požadavky na řešení Naším úkolem je přidat novou hodnotu do pole tak, aby hodnota byla vložena na požadovanou pozici všechny stávající hodnoty zůstaly v poli zachovány pole bylo o jednu položku delší Řešení Při řešení zadané úlohy je nutné vzít v úvahu kapacitu aktuálně alokované paměti pro dané pole operaci provedeme ve dvou krocích Zvětšíme aktuální délku pole Od identifikované pozice až do konce pole provedeme zkopírování každého prvku na pozici následující 8

Vložení hodnoty do pole // vlozeni noveho prvku do pole // pos final int DELTA = 10; if ((pos >= 0) && (pos <= n)) { if (n == a.length){ b = new int[a.length + DELTA]; for (int i = 0; i < n; i++) b[i] = a[i]; a = b; b = null; n++; for (int i = n-1; i > pos; i--){ a[i] = a[i-1]; a[pos] = h; Pole a s n hodnotami Hodnoty od indexu 0 do indexu n-1 Novou hodnotu h vkládáme na pozici pos Po provedení operace obsahuje proměnná a v rozsahu indexů od 0 do n-1 modifikované pole 9

Kopírování pole Metoda třídy systém pro kopírování části pole do jiného pole System.arraycopy(a, srcpos, b, destpos, length); Výsledek stejný jako for (int i = 0; i < length; i++) b[destpos + i] = a[srcpos + i] Efektivita systémové funkce vyšší b = new int[a.length + DELTA]; System.arraycopy(a, 0, b, 0, pos); b[pos] = h; System.arraycopy(a, pos, b, pos+1, n-pos); a = b; b = null; n++; 10