Da D to t v o é v ty t py IB111: Datové typy

Podobné dokumenty
IB111 Úvod do programování skrze Python Přednáška 7

IB111 Úvod do programování skrze Python Přednáška 6

Základní datové struktury

Lineární datové struktury

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh

Šablony, kontejnery a iterátory

Abstraktní datové typy

Datové struktury 1: Základní datové struktury

Dynamické datové struktury I.

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

Algoritmizace a programování

Lekce 4. Kolekce. Kolekce - seznamy, N-tice a slovníky. C2184 Úvod do programování v Pythonu podzim 2016

Abstraktní datové typy: zásobník

Šablony, kontejnery a iterátory

Lineární datové struktury

Datové typy a struktury

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

Kolekce, cyklus foreach

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

ADT/ADS = abstraktní datové typy / struktury

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

Datové struktury. alg12 1

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) b)

Datové typy. IB111 Základy programování Radek Pelánek

ABSTRAKTNÍ DATOVÉ TYPY

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

Datové struktury 2: Rozptylovací tabulky

Programování v Pythonu

Programování v Pythonu

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

KIV/ZIS cvičení 5. Tomáš Potužák

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

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

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

2 Datové struktury. Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky

PB161 Programování v jazyce C++ Přednáška 3

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

Dynamické datové struktury IV.

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

Konstruktory a destruktory

bfs, dfs, fronta, zásobník, prioritní fronta, halda

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.

Maturitní témata. IKT, školní rok 2017/18. 1 Struktura osobního počítače. 2 Operační systém. 3 Uživatelský software.

Funkce, podmíněný příkaz if-else, příkaz cyklu for

ZÁPOČTOVÁ PRÁCE z UIR

Paměť počítače. alg2 1

Anotace. Dámy na šachovnici dominance a nezávislost. Aritmetické výrazy, notace a převody mezi nimi, nejdelší rostoucí podposloupnost.

2. úkol MI-PAA. Jan Jůna (junajan)

X37SGS Signály a systémy

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

Operace s vektory a maticemi + Funkce

ABSTRAKTNÍ DATOVÉ TYPY (ADT)

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

Prohledávání do šířky = algoritmus vlny

5 Přehled operátorů, příkazy, přetypování

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

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

Jazyk C++ II. STL knihovna kontejnery část 1

bfs, dfs, fronta, zásobník, prioritní fronta, halda

TÉMATICKÝ OKRUH TZD, DIS a TIS

Spojový seznam. Jan Kybic.

Racionální čísla, operátory, výrazy, knihovní funkce

Maturitní téma: Programovací jazyk JAVA

VZORCE A VÝPOČTY. Autor: Mgr. Dana Kaprálová. Datum (období) tvorby: září, říjen Ročník: sedmý

Prioritní fronta, halda

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

X36UNX 16. Numerické výpočty v sh příkazy expr, bc, dc. Zdeněk Sojka

2 Strukturované datové typy Pole Záznam Množina... 4

[1] samoopravné kódy: terminologie, princip

Zásobník (LIFO) Opakem zásobníku LIFO je fronta FIFO (First In, First Out první dovnitř, první ven)

Programování 3. hodina. RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015

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

ALGORITMY A DATOVÉ STRUKTURY

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

Tabulka. Datová struktura, která umožňuje vkládat a později vybírat informace podle identifikačního klíče. Mohou být:

IB111 Úvod do programování skrze Python

Algoritmy I, složitost

KAPITOLA 9 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM

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

Lekce 01 Úvod do algoritmizace

Operátory ROLLUP a CUBE

I. Dalšívnitřní paměti

PB161 Programování v jazyce C++ Přednáška 3

Tabulkový procesor. Základní rysy

Zadání a řešení testu z matematiky a zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia od podzimu 2014

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.

Algoritmizace prostorových úloh

IB111 Úvod do programování skrze Python

Pointery II. Jan Hnilica Počítačové modelování 17

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

MATURITNÍ TÉMATA Z MATEMATIKY

Jazyk C# (seminář 3)

Programování v Pythonu

Jazyk C++ II. STL knihovna kontejnery část 2

II. Úlohy na vložené cykly a podprogramy

Homer. prvky. délka. přední 0 zadní 4. Použití fronty BUS STOP. 3 Lisa. 2 Bart. 4 Maggie. 1 Marge. Grafické znázornění předchozí animace:

Transkript:

Datové typy IB111: Datové typy

Data a algoritmizace jaká data potřebuji pro vyřešení problému? jak budu data reprezentovat? jaké operaci s nimi potřebuji provádět? Navržení práce s daty je velice důležité

Datový typ Datový typ rozsah hodnot, které může proměnná daného typu přijmout a množina operací, které jsou pro tento datový typ dovoleny/definovány.

Abstraktní datový typ (ADT) specifikuje strukturu a operacenad ní na základě dokumentované funkcionality (případně i složitost) nezávisí na konkrétní implementaci Důležité principy: Abstrakce Oddělení specifikace Implementace

Základní ADT Mezi základní ADT patří: (lineární) seznam zásobník fronta množina slovník - asociativní pole zobrazení textový řetězec

(Zřetězený) seznam Obsahuje posloupnost prvků Operace: Přidání prvku Na začátek Na konec Na určité místo (např. za/před určitý prvek) Odebrání prvku Ze začátku Od konce Konkrétní prvek (daný pozicí, hodnotou apod.) Test prázdnosti seznamu

Typy (zřetězených) seznamů Jednosměrně zřetězený seznam data next data next data next Obousměrně zřetězený seznam data prev next data prev next data prev next

Typy (zřetězených) seznamů Kruhový seznam Jednosměrný nebo obousměrný data next data next data next

Seznamy v Pythonu (opak.) Seznam prvků oddělený čárkami a uzavřený do hranatých závorek K prvkům můžeme přistupovat např. přes indexy Seznamy lze modifikovat

Seznamy v Pythonu (opak.) Na rozdíl od řetězců lze seznamy modifikovat Počet prvků funkce len()

Seznamy: Užitečné funkce list.append(x) list.extend(l) list.insert(i, x) list.remove(x) list.pop(i) list.pop() list.index(x) list.count(x) list.sort() Přidá prvek x na konec seznamu Přidá všechny prvky L na konec seznamu Přidá prvek x před prvek na pozici i Odstraní první prvek s hodnotou x Odstraní prvek na pozici i Odstraní poslední prvek Navrátí index prvního prvku s hodnotou x Navrátí počet výskytů hodnoty x v seznamu Setřídí prvky seznamu list.reverse() Přehodí pořadí prvků (od posledního k prvnímu) x in list Test zda seznam obsahuje x

Seznamy: příklady

Seznamy: příkaz del Příkaz del smaže prvek nebo jinou část seznamu Lze smazat i celou proměnnou

Vnořené seznamy Lze použít pro vícerozměrná data

Vnořené seznamy -matice Vnořené seznamy Vícerozměrná pole Vhodné pro například pro matice Příklad: vytvoření nulové matice zadaných rozměrů

Příklad: Matice Násobení matic

Příklad: (aritmetický) průměr Statistická veličina Snaha zjistit typickou hodnotu Nevýhoda: extrémní hodnoty ovlivňují průměr Výpočet: součet všech hodnot dělený počtem prvků n x = 1 X i n i= 1

Příklad: medián Mediánje číslo, které rozdělí řadu podle velikosti seřazených čísel na dvě stejně početné poloviny. Nalezení mediánu: 1. Seřadím čísla podle velikosti 2. Vezmu číslo, která se nalézá uprostřed seznamu. Pokud není nějaké číslo přesně uprostřed, tj. počet prvků je sudý, pak se obvykle za medián považuje aritmetický průměr hodnot na dvou místech u středu.

Příklad: medián

Zásobník (stack) Operace: push (vložení) pop (odstranění) top (horní prvek) empty (test prázdnosti) LIFO = Last In First Out Intuitivní příklad: sloupec knih Běžné použití: procházení grafů vyhodnocování výrazů rekurze

Python: zásobník pomocí seznamu

Příklad: postfixová notace Zápis matematických výrazů Infixová notace Zápis operátorů mezi operandy Např. 1 + 2 Prefixová notace Zápis operátorů před operandy Např. + 12 Postfixová notace (reverzní polská notace) Operátor následuje operandy Není třeba používat závorky Např. 12 +

Příklad: postfixová notace

Příklad: postfixová notace

Fronta (queue) operace: push (vložení) pop (odstranění) top (první prvek) empty (test prázdnosti) FIFO = First In First Out příklad: zpracování příchozích požadavků serverem

Python a fronta lze pomocí seznamu, ale pomalé Protože přidávání a odebírání ze začátku seznamu vyžaduje posun všech prvků použití knihovny collections:

Seznam x zásobník x fronta Zásobník a fronta jsou podobné seznamu Ale poskytují méně možných operací Např. přidání jen na začátek/konec Proč používáme struktury, které nám nabízejí méně funkcí? Pokud se omezíme na více specifický datový typ mohou být: operace rychlejší a/nebo paměťové nároky menší Při návrhu nám pomáhá uvědomit si, že potřebujeme např. zásobník a ne obecně seznam

Množina (set) operace: insert (vložení) find (test na přítomnost) delete (odstranění) příklady: evidování navštívených vrcholů při prohledávání počítání průniku informací ze dvou souborů

Množiny v Pythonu Množina Neuspořádaná kolekce dat bez duplicitních prvků len(s) x in s s1 <= s2 union nebo operátor intersection nebo operátor & difference nebo operátor - symmetric_difference nebo operátor ^ počet prvků množiny Test zda prvek x se nachází v množině s Test zda s1 je podmnožinou s2 Sjednocení množin Průnik množin Rozdíl množin Položky z jedné z množin nenacházející se v množině druhé

Množiny v Pythonu: příklad

N-tice (tuples) v Pythonu N-tice podobné seznamům Nejsou měnitelné (stejně jako řetězce)

Slovník (dictionary, map) Slovník, dictionary, map, asociativní pole zobecnění množiny, pole dvojice klíč, hodnota klíče jsou unikátní neuspořádané příklady: počet výskytů jednotlivých slov v textu kešování výsledků časově náročných výpočtů

Slovník v Pythonu {} Klíč a hodnotu oddělujeme dvojtečkou U jednoduchých klíčů lze použít i = Slovník lze vyrobit i n-tic (tuples) Slovník je modifikovatelný

Slovník v Pythonu: příklad

Výpis slovníku Jednotlivé položky slovníku můžeme iterovat pomocí.iteritems()

Příklad: frekvence slov Analyzujeme předložený text Pro každé slovo vypíšeme kolikrát se v textu vyskytuje Výsledek lze využít jako metriku podobnosti dokumentů apod.

Příklad: frekvence slov -výpočet

Příklad: frekvence slov -výpis

Příklad: morseovka

Příklad: převodník