programovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · ib111 programování a...
TRANSCRIPT
![Page 1: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/1.jpg)
Programování: základní konstrukce, příklady
IB111 Programování a algoritmizace
2010
![Page 2: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/2.jpg)
Připomenutí z minule, ze cvičení
proměnné, výrazy, operaceřízení výpočtu: if, for, whilefunkcepříklady: faktoriál, převod na binární zápis, dělitelé,prvočísla
![Page 3: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/3.jpg)
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
...
![Page 4: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/4.jpg)
Z DÚ: čtverec
def ctverec(n):for i in range(1, n):
print "*" * iif i == n-1:
p = 1while n+1 > p:
print "*" * nn = n - 1
![Page 5: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/5.jpg)
Příklad: Největší společný dělitel
vstup: přirozená čísla a, bvýstup: největší společný dělitel a, bpříklad: 180, 252
Jak na to?
![Page 6: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/6.jpg)
Naivní algoritmus I
projít všechny čísla od 1 do min(a, b)pro každé vyzkoušet, zda dělí a i bvzít největší
![Page 7: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/7.jpg)
Naivní algoritmus II
„školníÿ algoritmusnajít všechny dělitele čísel a, bprojít dělitele, vybrat společné, vynásobitpříklad:
180 = 22 · 32 · 5504 = 23 · 32 · 7NSD = 22 · 32 = 36
![Page 8: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/8.jpg)
Euclidův algoritmus: základ
základní myšlenka: pokud a > b, pak:
NSD(a, b) = NSD(a − b, b)
příklad:
krok a b1 504 1802 324 1803 180 1444 144 365 108 366 72 367 36 368 36 0
![Page 9: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/9.jpg)
Operace modulo
modulo = zbytek po dělenípříklady:
13 mod 5 = 328 mod 4 = 014 mod 3 = 218 mod 7 = ??29 mod 13 = ??
![Page 10: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/10.jpg)
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 b1 504 1802 180 1443 144 365 36 366 36 0
![Page 11: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/11.jpg)
Euclidův algoritmus: pseudokód
odčítací varianta, bez rekurze
def nsd(a,b):if a == 0:
return bwhile b != 0:
if a > b:a = a - b
else:b = b - a
return a
![Page 12: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/12.jpg)
Euclidův algoritmus: pseudokód
modulo varianta, rekurzivně
def nsd(a,b):if b == 0:
return aelse:
return nsd(b, a % b)
![Page 13: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/13.jpg)
Příklady
160, 7557, 33
![Page 14: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/14.jpg)
Efektivita algoritmů
proč byly první dva algoritmy označeny jako „naivníÿ?časová náročnost algoritmu:
naivní: exponenciální vůči počtu cifereuclidů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
![Page 15: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/15.jpg)
Příklad: hledání všech dělitelů
vstup: číslo Nvýstup: seznam všech dělitelů Nco když chceme nejen dělitele vypsat, ale dále s nimipracovat
![Page 16: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/16.jpg)
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
![Page 17: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/17.jpg)
Seznamy v Pythonu
seznam (list), n-tice (tuple)položky mohou být různého typuvariabilní délkaindexování i od konce (pomocí záporných čísel)
![Page 18: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/18.jpg)
Seznamy: použití v Pythonu
s = [] # deklarace prázdného seznamus = [3, 4, 1, 8 ]s[2] # indexace prvku, s[2] = 1s[-1] # indexace od konce, s[-1] = 8s[2] = 15 # změna prvkus.append(6) # přidání prvkus[1:4] # indexace intervalu, s[1:4] = [4, 15, 8]len(s) # délka seznamu, len(s) = 5t = [ 3, "pes", [2, 7], -8.3 ]
# seznam může obsahovat různé typy
![Page 19: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/19.jpg)
Python: seznamy a cyklus for
cyklus for – přes prvky seznamurange – vrací seznam číseltypické použití: for i in range(n)ale můžeme třeba i:for x in ["pes", "kocka", "prase"]:
![Page 20: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/20.jpg)
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ěnitvíce na cvičeních, později
![Page 21: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/21.jpg)
Ř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)
![Page 22: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/22.jpg)
Prvočísla
dělitelné jen 1 a sebou samýmpředmět zájmu matematiků od pradávna, cca od 70. let(moderní kryptologie) i důležité aplikaceproblémy s prvočísly:
výpis (počet) prvočísel v intervalutest prvočíselnostirozklad na prvočísla (hledání dělitelů)
![Page 23: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/23.jpg)
Eratosthenovo síto
problém: výpis prvočísel od 2 do nalgoritmus: opakuj:
označ další neškrtnuté číslo na seznamu jako prvočíslovšechny násobky tohoto čísla vyškrtni
![Page 24: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/24.jpg)
Test prvočíselnosti
ProblémVstup: číslo nVýstup: ANO/NE (je/není prvočíslo)
![Page 25: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/25.jpg)
Test prvočíselnosti: naivní algoritmus
zkoušíme všechny možné dělitele od 2 do n − 1vylepšení:
dělíme pouze lichými číslydělíme pouze čísly tvaru 6k ± 1dělíme pouze do
√n
![Page 26: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/26.jpg)
Test prvočíselnosti: chytřejší algoritmy
náhodnostní algoritmypolynomiální deterministický algoritmus (objeven 2002)(vysoce) nad rámec tohoto kurzuumí se to dělat rychle
![Page 27: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/27.jpg)
Rozklad na prvočísla
rozklad na prvočísla = faktorizacenaivní algoritmy:
průchod všech možných dělitelůzlepšení podobně jako u testů prvočíselnosti
chytřejší algoritmy:složitá matematikaaktivní výzkumná oblastneumí se to dělat rychlemax cca 200 ciferná čísla
![Page 28: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/28.jpg)
Aplikace: asymetrická kryptologie
![Page 29: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/29.jpg)
Asymetrická kryptologie: realizace
jednosměrné funkcejednoduché vypočítat jedním směremobtížné druhým (inverze)ilustrace: míchání barev
RSA (Rivest, Shamir, Adleman) algoritmusjednosměrná funkce: násobení prvočísel (inverze =faktorizace)veřejný klíč: součin velkých prvočíselbezpečnost ∼ nikdo neumí provádět efektivně faktorizacivyužití modulární aritmetiky, Eulerovy věty, . . .
![Page 30: ProgramovÆní: zÆkladní konstrukce, płíklady · 2010. 10. 11. · IB111 Programování a algoritmizace Created Date: 10/8/2010 9:25:02 AM](https://reader035.vdocuments.mx/reader035/viewer/2022071516/61393d14a4cdb41a985b9307/html5/thumbnails/30.jpg)
Další důležité programátorské konstrukce
vstup/výstup (input/output, IO):standardní IOsoubory
dělení projektu do více souborů (packages), použitíknihovensložitější datové typy, objekty
viz další přednášky, cvičení, samostudium