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

Podobné dokumenty
(a kryptografické odbočky) IB111 Úvod do programování skrze Python

(a kryptografické odbočky) IB111 Úvod do programování skrze Python

Programy a algoritmy pracující s čísly. IB111 Úvod do programování skrze Python

Programy a algoritmy pracující s čísly. IB111 Úvod do programování skrze Python

Řetězce a seznamy. IB111 Základy programování Radek Pelánek 1 / 60

Programy a algoritmy pracující s čísly. IB111 Úvod do programování

(a kryptografické odbočky) IB111 Úvod do programování

Složitost a moderní kryptografie

Rekurze. IB111 Úvod do programování skrze Python

Časová složitost / Time complexity

V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2

IB111 Úvod do programování skrze Python

Úvod RSA Aplikace, související témata RSA. Ing. Štěpán Sem Festival Fantazie, Štěpán Sem

Modulární aritmetika, Malá Fermatova věta.

Prvočísla a čísla složená

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

Kombinatorika, výpočty

Moravské gymnázium Brno s.r.o.

8. RSA, kryptografie s veřejným klíčem. doc. Ing. Róbert Lórencz, CSc.

Moravské gymnázium Brno s.r.o.

Jak funguje asymetrické šifrování?

Prvočísla, dělitelnost

Matematické algoritmy (11MAG) Jan Přikryl. verze: :29

3 Co je algoritmus? Trocha historie Definice algoritmu Vlastnosti algoritmu... 3

Rekurze. IB111 Úvod do programování

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

Kód trezoru 1 je liché číslo.

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1

Matematické algoritmy (11MAG) Jan Přikryl

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ů

8. Rekurze. doc. Ing. Jiří Vokřínek, Ph.D. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze

Příklady: (y + (sin(2*x) + 1)*2)/ /2 * 5 = 8.5 (1+3)/2 * 5 = /(2 * 5) = 1.3. Pavel Töpfer, 2017 Programování 1-3 1

Asymetrická kryptografie a elektronický podpis. Ing. Dominik Breitenbacher Mgr. Radim Janča

IB111 Úvod do programování skrze Python

19. a 20. přednáška z kryptografie

Historie matematiky a informatiky Cvičení 1

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

Úvod do kryptologie. 6. března L. Balková (FJFI ČVUT v Praze) Primality Testing and Factorization 6. března / 41

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

Základy algoritmizace a programování

Programování: základní konstrukce. IB111 Úvod do programování

Rekurze. IB111 Základy programování Radek Pelánek

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

Modulární aritmetika, Malá Fermatova věta.

Rekurze. Jan Hnilica Počítačové modelování 12

Pokročilá kryptologie

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

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

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

Správa přístupu PS3-2

Dělitelnost čísel, nejmenší společný násobek, největší společný dělitel

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

5. přednáška - Rozklad problému na podproblémy

RSA. Matematické algoritmy (11MAG) Jan Přikryl. Ústav aplikované matematiky ČVUT v Praze, Fakulta dopravní. verze: :01

Čínská věta o zbytcích RSA

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

NMIN101 Programování 1 2/2 Z --- NMIN102 Programování /2 Z, Zk

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

Funkce, intuitivní chápání složitosti

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

Polynomy nad Z p Konstrukce faktorových okruhů modulo polynom. Alena Gollová, TIK Počítání modulo polynom 1/30

1 Teorie čísel. Základní informace

Lenka Zalabová. Ústav matematiky a biomatematiky, Přírodovědecká fakulta, Jihočeská univerzita. zima 2012

RSA. Matematické algoritmy (11MA) Miroslav Vlček, Jan Přikryl. Ústav aplikované matematiky ČVUT v Praze, Fakulta dopravní. čtvrtek 21.

Testování prvočíselnosti

Rozklad na součin vytýkáním

Dynamické programování

příklad Steganografie Matematické základy šifrování šifrování pomocí křížů Hebrejské šifry

Trocha teorie Ošklivé lemátko První generace Druhá generace Třetí generace Čtvrtá generace O OŠKLIVÉM LEMÁTKU PAVEL JAHODA

Dynamické programování

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

Datové struktury 2: Rozptylovací tabulky

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

Programy a algoritmy pracující s čísly

1. 1 P Ř I R O Z E N Á Č Í S L A

Programování: základní konstrukce

MFF UK Praha, 22. duben 2008

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

Programovani v Maplu Procedura

Poslední nenulová číslice faktoriálu

NPRG030 Programování I 3/2 Z --- NPRG031 Programování II --- 2/2 Z, Zk

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

Programování I. Martin Pergel, 10. října Martin Pergel, Programování I

Programování a algoritmizace

Programování v Pythonu

Diskrétní matematika 1. týden

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

Digitální učební materiál

Počet kreditů: 5 Forma studia: kombinovaná. Anotace: Předmět seznamuje se základy dělitelnosti, vybranými partiemi algebry, šifrování a kódování.

NMIN101 Programování 1 2/2 Z --- NMIN102 Programování /2 Z, Zk

Řídicí struktury. alg3 1

Svobodná chebská škola, základní škola a gymnázium s.r.o. Dušan Astaloš. samostatná práce, případně skupinová práce. pochopení znaků vztahů mezi čísly

Dělitelnost přirozených čísel. Násobek a dělitel

Základy algoritmizace 4. Problémy, algoritmy, data

Rekurzivní algoritmy

Funkce - opakování. Funkce může přijímat parametry na vstupu a může vracet parametry na výstupu.

Rekurze a rychlé třídění

1 Mnohočleny a algebraické rovnice

Transkript:

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

Připomenutí z minule, ze cvičení proměnné, výrazy, operace řízení výpočtu: if, for, while funkce příklady: faktoriál, dělitelé, prvočísla

Z DÚ: ciferný součet if n % 10 == 0: f = 0 + f elif n % 10 == 1: f = 1 + f elif n % 10 == 2: f = 2 + f elif n % 10 == 3: f = 3 + f elif n % 10 == 4: f = 4 + f...

Z DÚ: čtverec def ctverec(n): for i in range(1, n): print "*" * i if i == n-1: p = 1 while n+1 > p: print "*" * n n = n - 1

Příklad: Největší společný dělitel vstup: přirozená čísla a, b výstup: největší společný dělitel a, b příklad: 180, 504 Jak na to?

Naivní algoritmus I projít všechny čísla od 1 do min(a, b) pro každé vyzkoušet, zda dělí a i b vzít největší

Naivní algoritmus II školní algoritmus najít všechny dělitele čísel a, b projít dělitele, vybrat společné, vynásobit příklad: 180 = 2 2 3 2 5 504 = 2 3 3 2 7 NSD = 2 2 3 2 = 36

Euclidův algoritmus: základ základní myšlenka: pokud a > b, pak: příklad: NSD(a, b) = NSD(a b, b) krok a b 1 504 180 2 324 180 3 180 144 4 144 36 5 108 36 6 72 36 7 36 36 8 36 0

Operace modulo modulo = zbytek po dělení příklady: 13 mod 5 = 3 28 mod 4 = 0 14 mod 3 = 2 18 mod 7 =?? 29 mod 13 =??

Euclidův algoritmus: vylepšení vylepšená základní myšlenka: pokud a > b, pak: NSD(a, b) = NSD(a mod b, b) krok a b 1 504 180 2 180 144 3 144 36 5 36 36 6 36 0

Euclidův algoritmus: pseudokód odčítací varianta, bez rekurze def nsd(a,b): if a == 0: return b while b!= 0: if a > b: a = a - b else: b = b - a return a

Euclidův algoritmus: pseudokód modulo varianta, rekurzivně def nsd(a,b): if b == 0: return a else: return nsd(b, a % b)

Příklady 160, 75 57, 33

Efektivita algoritmů proč byly první dva algoritmy označeny jako naivní? časová náročnost algoritmu: naivní: exponenciální vůči počtu cifer euclidův: lineární vůči počtu cifer různé algoritmy se mohou výrazně lišit svou efektivností často rozdíl použitelné vs nepoužitelné více později

Příklad: hledání všech dělitelů vstup: číslo N výstup: seznam všech dělitelů N co když chceme nejen dělitele vypsat, ale dále s nimi pracovat?

Pole (seznamy) více položek za sebou v pevném pořadí indexováno od nuly! základní koncept dostupný ve všech jazycích: pole (array), položky stejného typu, pevně daná délka Python nabízí obecnější koncept

Seznamy v Pythonu seznam (list), n-tice (tuple) položky mohou být různého typu variabilní délka indexování i od konce (pomocí záporných čísel)

Seznamy: použití v Pythonu s = [] # deklarace prázdného seznamu s = [3, 4, 1, 8 ] s[2] # indexace prvku, s[2] = 1 s[-1] # indexace od konce, s[-1] = 8 s[2] = 15 # změna prvku s.append(6) # přidání prvku s[1:4] # indexace intervalu, s[1:4] = [4, 15, 8] len(s) # délka seznamu, len(s) = 5 t = [ 3, "pes", [2, 7], -8.3 ] # seznam může obsahovat různé typy

Python: seznamy a cyklus for cyklus for přes prvky seznamu range vrací seznam čísel typické použití: for i in range(n) ale můžeme třeba i: for x in ["pes", "kocka", "prase"]:

Objekty, hodnoty, aliasy parametry funkcí pouze volání hodnotou (narozdíl např. od Pascalu: volání hodnotou a odkazem) měnitelné objekty (např. seznam) však funkce může měnit více na cvičeních, později

Řetězce řetězec seznam znaků práce s řetězcem analogická práci s seznamem (indexování,...) řetězec je však neměnitelný (immutable) více na cvičení

Prvočísla dělitelné jen 1 a sebou samým předmět zájmu matematiků od pradávna, cca od 70. let (moderní kryptologie) i důležité aplikace problémy s prvočísly: výpis (počet) prvočísel v intervalu test prvočíselnosti rozklad na prvočísla (hledání dělitelů)

Eratosthenovo síto problém: výpis prvočísel od 2 do n algoritmus: opakuj: označ další neškrtnuté číslo na seznamu jako prvočíslo všechny násobky tohoto čísla vyškrtni

Eratosthenovo síto

Test prvočíselnosti Problém Vstup: číslo n Výstup: ANO/NE (je/není prvočíslo)

Test prvočíselnosti: naivní algoritmus zkoušíme všechny možné dělitele od 2 do n 1 vylepšení: dělíme pouze lichými čísly dělíme pouze čísly tvaru 6k ± 1 dělíme pouze do n

Test prvočíselnosti: chytřejší algoritmy náhodnostní algoritmy polynomiální deterministický algoritmus (objeven 2002) (vysoce) nad rámec tohoto kurzu umí se to dělat rychle

Rozklad na prvočísla rozklad na prvočísla = faktorizace naivní algoritmy: průchod všech možných dělitelů zlepšení podobně jako u testů prvočíselnosti chytřejší algoritmy: složitá matematika aktivní výzkumná oblast neumí se to dělat rychle max cca 200 ciferná čísla

Příklad aplikace: asymetrická kryptologie

Asymetrická kryptologie: realizace jednosměrné funkce jednoduché vypočítat jedním směrem obtížné druhým (inverze) ilustrace: míchání barev RSA (Rivest, Shamir, Adleman) algoritmus jednosměrná funkce: násobení prvočísel (inverze = faktorizace) veřejný klíč: součin velkých prvočísel bezpečnost nikdo neumí provádět efektivně faktorizaci využití modulární aritmetiky, Eulerovy věty,...

Další důležité programátorské konstrukce vstup/výstup (input/output, IO): standardní IO soubory dělení projektu do více souborů (packages), použití knihoven složitější datové typy, objekty viz další přednášky, cvičení, samostudium