Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Složitost algoritmu Vybrané problémy: Při analýze složitosti jednotlivých algoritmů často narazíme na problém, jakým způsobem vzít v úvahu velikost vstupu.

Podobné prezentace


Prezentace na téma: "Složitost algoritmu Vybrané problémy: Při analýze složitosti jednotlivých algoritmů často narazíme na problém, jakým způsobem vzít v úvahu velikost vstupu."— Transkript prezentace:

1 Složitost algoritmu Vybrané problémy: Při analýze složitosti jednotlivých algoritmů často narazíme na problém, jakým způsobem vzít v úvahu velikost vstupu. Co když počítáme s maticí – je velikost vstupu n nebo n*n? Co když počítáme s velkými čísly? Jelikož máme brát v úvahu délku vstupu, pro běžný integer budeme uvažovat délku vstupu 1, ale co když jde o mnohem větší čísla? Pozor na problémy s pseudopolynomickou složitostí!

2 Složitost algoritmu

3 Jakou velikost vstupu máme uvažovat? Je obvyklé pracovat s parametrem n, i když je zřejmé, že na vstupu bude n*n čísel. Složitost: Každý z n*n prvků nové matice vznikne jako skalární součin dvou vektorů o velikosti n, k čemuž je třeba provést n násobení a n-1 sčítání. Tedy n+n-1=2n-1 pro každý prvek nové matice Celkem tedy n*n*(2n-1)=2n 3 -n 2 Složitost algoritmu: f  O(n 3 )

4 Složitost algoritmu

5 Příklad: Jakou složitost má algoritmus pro součet dvou čísel? Algoritmus: Součet se provede jedinou instrukcí. Složitost: Není zde žádný cyklus, takže pokud jde o „standardní“ čísla, jediná instrukce mi vrátí součet. Složitost algoritmu: f  O(1) Co když ale půjde o hodně velká čísla?

6 Složitost algoritmu Příklad: Jakou složitost má algoritmus pro součet dvou „hodně dlouhých“ čísel? Algoritmus: Součet se provede v cyklu tak, že postupujeme zprava číslici po číslici (a pracujeme s eventuálním přenosem). Složitost: Délka cyklu, ve kterém se provádí sčítání, je úměrná počtu číslic (délce vstupu) a vstup nemůžeme považovat za jedno číslo C. Složitost algoritmu: f  O(N), kde N je délka vstupu (N =  logC  +1).

7 Složitost algoritmu

8

9 Právě uvedený příklad algoritmu patří mezi takzvané problémy s pseudopolynomickou složitostí. Pseudopolynomická složitost se nazývá složitost, která se vzhledem k číselné hodnotě vstupu jeví jako polynomická, ale fakticky se vzhledem k délce vstupu jedná o složitost exponenciální. Pro problém faktorizace není znám algoritmus pracující v polynomiálně omezeném čase, a právě na tohoto faktu využívají moderní šifrovací algoritmy.

10 Šifrovací algoritmy Při utajené výměně informací je možné postupovat takto:  Pokud chce Karel poslat Evě utajený balík, zamkne ho svým zámkem.  Eva balík dostane, přidá na něj svůj zámek a pošle zpět.  Karel odstraní svůj zámek a pošle Evě už jen se zámkem Evy.  Eva odemkne svým klíčem a konečně ví, co je v balíku. To znamená opakované posílání, je to zdlouhavé, a proto potřebujeme lepší systém distribuce/výměny klíčů.

11 Šifrovací algoritmy Řešením může být asymetrické šifrování, kdy každá osoba má dva klíče (jeden šifrovací, druhý dešifrovací). Šifrovací klíč je „veřejný“, dešifrovací je „soukromý“. Zpráva je zašifrována „veřejným“ klíčem. Přečíst ji potom lze s použitím „soukromého“ klíče. Je třeba mít vhodnou matematickou funkci, kterou lze (při znalosti určitých faktů) snadno invertovat.

12 Šifrovací algoritmus RSA RSA (R. Rivest, A. Shamir, L. Adlemann) Vygenerujeme dvě dostatečně velká prvočísla p a q (každé má délku 1024 bitů) a spočteme n=pq. Číslo n je parametrem šifrovacího systému (šifrovací modul) a zveřejňuje se spolu s veřejným klíčem. Spočítá se Eulerova funkce  (n)= (p-1)(q-1) udává počet přirozených čísel menších než n, která jsou nesoudělná s číslem n (protože n je součinem dvou prvočísel, je takových čísel právě (p-1)(q-1))

13 Šifrovací algoritmus RSA Zvolíme privátní klíč e z množiny {1,..,n} nesoudělný s číslem (p-1)(q-1) K privátnímu klíči e vypočteme Eulerovým algoritmem veřejný klíč d podle vztahu d  e mod (p-1)(q-1)= d  e mod  (n)= 1 Tato rovnice má jediné řešení d (1<d<  (n)) Zakódování zprávy z se provede dle vztahu z e mod n =s Dekódování zprávy se provede dle vztahu s d mod n =z Korektnost šifry je dána vztahem: z=s d mod n = z de mod n = z k  (n)+1 mod n =1  z mod n=z

14 Šifrovací algoritmus RSA Jednoduchý příklad: Zvolíme číslem prvočísla p=11 a q=19 Spočteme šifrovací modul n=p*q=11*19= 209 Spočítáme Eulerovu funkci  (n)= (p-1)(q-1) =10*18 = 180 Zvolíme privátní klíč e z množiny {1,..,n} nesoudělný s číslem (p-1)(q-1); nechť je to e=7 Veřejný klíč d vypočteme (rozšířeným Euklidovým algoritmem) ze vztahu d  e mod (p-1)(q-1)= d  e mod  (n)= 1 d  7 mod 180 = 1 z čehož dostaneme d=103

15 Šifrovací algoritmus RSA Rozšířený Euklidův algoritmus: Snadný výpočet pomocí tabulky 18010 701 2551-25 180 div 7 = 25 180 mod 7 = 5 1-0*25 = 10-1*25 = -25

16 Šifrovací algoritmus RSA Rozšířený Euklidův algoritmus: Snadný výpočet pomocí tabulky 18010 701 2551-25 1226 7 div 5 = 1 7 mod 5 = 2 0-1*1 = -11-(-25)*1 =26

17 Šifrovací algoritmus RSA Rozšířený Euklidův algoritmus: Výpočet končí ve chvíli, kdy je zbytek po dělení 1 Pokud vyjde kladné číslo, máme d, když číslo záporné (-77), musíme přičíst  (n) a potom tedy d=180-77=103 Vidíme, že 103*7 mod 180 = 721 mod 180=1 18010 701 2551-25 1226 213-77 5 div 2 = 2 5 mod 2 = 1 1-(-1)*2 = 3-25-(26)*2 =-77

18 Šifrovací algoritmus RSA Máme tedy veřejný klíč: n=209, e=7 a soukromý klíč n=209, d=103 Pošleme zprávu z=a, v ASCII je to 97 Zakódujeme použitím veřejného klíče e: 97 7 mod 209 =147 Dekódování zprávy se provede pomocí privátního klíče d: 147 103 mod 209 = 97

19 Šifrovací algoritmus RSA

20


Stáhnout ppt "Složitost algoritmu Vybrané problémy: Při analýze složitosti jednotlivých algoritmů často narazíme na problém, jakým způsobem vzít v úvahu velikost vstupu."

Podobné prezentace


Reklamy Google