Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Dodekaéder Hamilton köre. A Hamilton probléma Egy gráf Hamilton körén egy olyan kört értünk, ami minden egyes csúcspontot érint. Az ilyen kört tartalmazó.

Hasonló előadás


Az előadások a következő témára: "Dodekaéder Hamilton köre. A Hamilton probléma Egy gráf Hamilton körén egy olyan kört értünk, ami minden egyes csúcspontot érint. Az ilyen kört tartalmazó."— Előadás másolata:

1 Dodekaéder Hamilton köre

2 A Hamilton probléma Egy gráf Hamilton körén egy olyan kört értünk, ami minden egyes csúcspontot érint. Az ilyen kört tartalmazó gráfok hamiltoniak. Egy gráf Hamilton gráf-e: HAM={ : G Hamilton gráf} HAM(G)={G:  p:p G útja, p Hamilton kör} HAM nyelvre naiv eldöntő algoritmus: vesszük a G gráf csúcsainak összes permutációját, és ellenőrizzük, hogy (Hamilton) kör-e. Ha n=|G|, a csúcsok száma (csúcsmátrix) m=  (SQR(n)), a permutációk száma=m!, a futási idő:  (m!)=  (SQR(n)!)=  (2 SQR(n) )  a futásidő legalább exponenciális… Bebizonyítható, hogy a Hamilton probléma NP teljes…

3 Ellenőrző algoritmusok Tfh. A feladat egy adott G gráf egy P útjáról eldönteni, hogy Hamilton kör-e.  ellenőrizzük, hogy a P tényleg a G csúcspontjainak egy permutációja, és a pontok tényleg szomszédosak-e. Az időigénye bizonyíthatóan: O(n 2 ). Def: Ellenőrző algoritmus: olyan kétbemenetű A(x,y) algoritmus, amely kiegészül egy további paraméterrel, a tanúval. A bizonyítja az x szót, ha létezik olyan y tanú, hogy A(x,y)=1. L={x  {0,1}*:  y  {0,1}* A(x,y)=1}

4 Ellenőrző algoritmusok Pl: HAM(G,p)={G: p G útja, p Hamilton kör} Pl: Miller-Rabin prímgenerálás: a kívánt tartományban meghívjuk a prímtesztet Munka ellenőrző algoritmusokkal: 1.Megsejtjük (egy sejtés halmazt előállítunk) a tanút 2.Meghívjuk az ellenőrző algoritmust

5 Számelméleti algoritmusok Szép, de haszontalan? Hasznosítás a titkosítási algoritmusokban Hatékonyság: igen nagy számok  lg(n): a szám mérete  polinomiális algoritmus: ha a futási idő lg(n 1 ), lg(n 2 ),…-ben polinomiális. Feltételezésünk: az elemi számtani műveletek (gépi méretű adatokkal) egységnyi idő alatt futnak le. Nagyon nagy számokkal: bitműveletekre le kell bontani Szorzás/osztás:  (  2 ), összeadás/kivonás:  (  ) (bár létezik gyorsabb megoldás is)

6 Számelméleti alapfogalmak Egész számok és természetes számok Oszthatóság: d|a (d osztja a-t)== létezik olyan egész szám, amelyre k*d=a. Másképp: a a d többese/többszöröse. Nem oszthatóság. Ha d|a és d>=0, akkor d az a osztója. 1 és a az a triviális osztói. A többi osztóit az a tényezőinek vagy faktorainak nevezzük. Prímszámok: azok, amelyek nem bonthatók tényezőkre. A többiek: összetett számok.

7 (Legnagyobb) közös osztó Def: Ha d|a és d|b, akkor azt mondjuk, hogy a d szám az a és b közös osztója. Pl: 30 osztói: 1,2,3,5,6,10,15, 24 és 30 közös osztói: 1,2,3,6  d|a és d|b  d|(a+b) és d|(a-b)  d|a és d|b  d|(a*x+b*y) Legnagyobb közös osztó: lnko(a,b).  lnko(0,0)=0  lnko(a,b)=lnko(b,a) --- szimmetria  lnko(a,b)=lnko(-a,b)  lnko(a,b)=lnko(|a|,|b|)  lnko(a,0)=|a|  lnko(a,k*a)=|a|, bármely k egészre

8 Tétel: Ha a és b egészek, legalább egyikük<>0  lnko(a,b)=min({ax+by:x,y egészek}). Biz: Legyen s=min({ax+by}), és q=[a/s]. Ekkor a mod s=a-[a/s]*s=a-q*(ax+by)=a*(1-qx)+b*(-qy)  a mod s szintén a és b lineáris kombinációja. Mivel 0 =0 kombináció volt. Ezért s|a, és hasonlóan s|b. Ha s közös osztója a-nak és b-nek, akkor lnko(a,b)>=s. Másrészt: lnko(a,b)|s és s>0, tehát lnko(a,b)<=s. A kettőből együtt: lnko(a,b)=s, vagyis s az a és b legnagyobb közös osztója.  Ha d|a és d|b, akkor d|lnko(a,b)

9 Relatív prímek Def: az a és b számokat relatív prímeknek nevezzük, ha lnko(a,b)=1 Def: az a 1, a 2,…, a n számokat páronként relatív prímeknek nevezzük, ha minden i  j esetén lnko(a i,a j )=1 Tétel: ha az a, b és p számokra lnko(a,p)=1 és lnko(b,p)=1 (két egész szám relprím egy p- hez)  lnko(ab,p)=1 (akkor a szorzatuk is az) Biz: HF

10 Törzstényezőkre bontás (prímfaktorizáció) Tétel: Ha p prím, a és b pedig olyan egészek, hogy p|ab, akkor p|a vagy p|b. Tétel: Egy egész szám pontosan egyféleképpen írható fel: a= p 1 e1 *p 2 e2 *…*p n en alakban, ahol p 1


11 Legnagyobb közös osztó keresése Naív algoritmus: - a= p 1 e1 *p 2 e2 *…*p n en - b= p 1 f1 *p 2 f2 *…*p n fn az összes prímre, esetleg e i =0 - lnko(a,b)= p 1 min(e1,f1) *p 2 min(e2,f2) *…*p n min(en,fn)  a nem polinomiális (exponenciális) futamidő miatt nem használható… Tétel (a legnagyobb közös osztó rekurziós tétele): a és b természetes számokra: lnko(a,b)=lnko(b,a mod b). Biz: Az egyenlőség két oldala kölcsönösen osztja egymást  a két oldal egyenlő…

12 Az euklideszi algoritmus euklidesz(A,0,A). euklidesz(A,B,LNKO):- A 0, A>=B, R is A mod B, euklidesz(B,R,LNKO). Tétel: Az euklideszi algoritmus futási ideje polinomiális. (Biz: A=k*B+R  0 =B+R és B>R miatt B+R>2*R.  R0, A>=B, R is A - B, euklidesz(B,R,LNKO). Ez a megoldás korrekt, de nem polinomiális!!!

13 Fibonacci számok A következő sorozat: F 0 =0, F 1 =1, F k+1 + F k = F k+2. Pl. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,… Aranymetszés:  =(1+sqr(5))/2= Konjugáltja:  ’=(1-sqr(5))/2 = Tétel: F i =(  i -  ’ i )/sqr(5) --- teljes indukcióval bizonyítható  a Fibonacci számok exponenciálisan nőnek.

14 Az euklideszi algoritmus időszükséglete Tétel: Ha A>B>=0, és az euklidesz(A, B, LNKO) rekurziós mélysége k>=1, akkor A>=F k+2, és B>=F k+1. Biz: 1. Ha k=1, akkor B>=1=F 2, valamint A>B miatt A>=2=F Tfh. A tétel igaz k-1 rekurziós szintig. Belátjuk, hogy igaz marad a k. szinten is. Az euklidesz(A,B,_) k rekurziós szinten van, meghívja az euklidesz(B,A mod B)-t k-1 szinten,  az indukciós feltevés miatt B>=F k+1 és (A mod B)>=F k. Másrészt B+R=B+(A- A/B*B) =B+(A mod B)>= F k+1 + F k = F k+2

15 Az euklideszi algoritmus kiterjesztése Feladat: d=lnko(a,b)=ax+by egyenlőségben x,y,d meghatározása… euklidesz(A,0,A,1,0). euklidesz(A,B,LNKO,X,Y):- A 0, A>=B, R is A mod B, euklidesz(B,R,LNKO,X1,X), Y is X1-A//B*Y.

16 Prímtesztek Prímeket találni könnyű – prímtényezőkre bontani nehéz Tétel: A nagy prímszámtétel: n   lim (  (n)/(n/ln(n)))=1, ahol  (n) a prímek eloszlásfüggvénye, az n-nél nem nagyobb prímek száma. Pl. n=10 9 esetben  (n)= , n/ln(n)= , az eltérés 6%-nál kisebb Egy n véletlen egész 1/ln(n) vlsz-gel prím is. Vagyis n közelében ln(n) egész közül vlsz. van prím is. Vagyis pl. egy 100 jegyű prímhez csak ln( )  230 számot kellene ellenőrizni…

17 Álprímek tesztelése Fermat tétele: Ha p prím, akkor a p-1  (mod p) minden a  Z p -re. A tétel megfordítása majdnem igaz… Azt mondjuk, hogy az n szám a alapú álprím, ha a n-1  (mod n). Ál2prím(N) if modHatvány(2,n-1,n)=1 then return „Összetett” else return „Álprím” Hibaszázalék: ig 22 téves szám van. 100 bit esetén hibaesély<1/10 13 !!

18 Miller-Rabin vlsz.-i prímteszt Nem tökéletes, az előző javítása. Több, véletlen bázisértéket választ ki. Ellenőrzi, ha a nemtriviális négyzetgyöke 1-nek mod n. Carmichael számok: amelyek minden bázisértékre álprímek, de nem prímek… ÖsszTanú: a az n összetettségének tanúja: MillerRabin(n,s) -- n prím, s db. értékkel tesztelve for j=1 to s a=random(1,n-1) if ÖsszTanú(a,n) then return FALSE else return TRUE

19 Miller Rabin hibaaránya Lényegesen kisebb a hibaarány, mint az Ál2Prím esetén Nem függ a szám nagyságától…

20 ÖsszTanú(a,n) b k,b k-1,…,b 0 az n bináris alakja d=1 for i=k to 0 x=d d=(d*d) mod n if d=1 and x<>1 and x<>n-1 then return TRUE if b i =1 then d=(d*a) mod n next i if d<>1 then return TRUE else return FALSE


Letölteni ppt "Dodekaéder Hamilton köre. A Hamilton probléma Egy gráf Hamilton körén egy olyan kört értünk, ami minden egyes csúcspontot érint. Az ilyen kört tartalmazó."

Hasonló előadás


Google Hirdetések