1 / 20

Dodekaéder Hamilton köre

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ó gráfok hamiltoniak. Egy gráf Hamilton gráf-e: HAM={<G>: G Hamilton gráf} HAM(G)= {G: $ p:p G útja, p Hamilton kör}

eamon
Download Presentation

Dodekaéder Hamilton köre

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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>: 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=W(SQR(n)), a permutációk száma=m!, a futási idő: W(m!)=W(SQR(n)!)=W(2SQR(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(n2). • 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: • Megsejtjük (egy sejtés halmazt előállítunk) a tanút • 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(n1), lg(n2),…-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: Q(b2), összeadás/kivonás: Q(b)(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]. Ekkora 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<=a mod s<s, csak a mod s=0 lehet, hiszen s a legkisebb ilyen>=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 a1, a2,…, an számokat páronként relatív prímeknek nevezzük, ha minden i¹j esetén lnko(ai,aj)=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= p1e1*p2e2*…*pnen alakban, ahol p1<p2<…<pn prímek, az ei-k pedig pozitív egészek. • Példa: 24=23*3, 6000= 24*3*53 • Tétel: A prímfaktorizáció nem végezhető el (lg(n)-re nézve) polinomiális időben. • Pl: 200 decimális jegyű szám felbontása a gyakorlatban lehetetlen…

  11. Legnagyobb közös osztó keresése • Naív algoritmus:- a= p1e1*p2e2*…*pnen- b= p1f1*p2f2*…*pnfn az összes prímre, esetleg ei=0- lnko(a,b)= p1min(e1,f1)*p2min(e2,f2)*…*pnmin(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<B, euklidesz(B,A,LNKO).euklidesz(A,B,LNKO):- B>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<=R<B<=A  A>=B+R és B>R miatt B+R>2*R. R<B/2 BR<AR<AB/2.vagyis az AB szorzat a rekurzív hívások között legalább feleződik! legfeljebb log(AB) az iterációk száma. Mivel egy iteráció polinomiális időben végrehajtható  állítás. ) • Megjegyzés: Az euklideszi algoritmust sokan a következőképpen definiálják: • euklidesz(A,B,LNKO):- B>0, 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: F0=0, F1=1, Fk+1+ Fk = Fk+2 . • Pl. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,… • Aranymetszés: f=(1+sqr(5))/2=1.61803 • Konjugáltja: f’=(1-sqr(5))/2 = -0.6183 • Tétel: Fi=(fi-f’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>=Fk+2, és B>=Fk+1. • Biz: 1. Ha k=1, akkor B>=1=F2, valamint A>B miatt A>=2=F3. • 2. 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>=Fk+1 és (A mod B)>=Fk. Másrészt B+R=B+(A-A/B*B)<=A A>=B+(A mod B)>= Fk+1+ Fk= Fk+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<B, euklidesz(B,A,LNKO,Y,X).euklidesz(A,B,LNKO,X,Y):- B>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 (p(n)/(n/ln(n)))=1, ahol p(n) a prímek eloszlásfüggvénye, az n-nél nem nagyobb prímek száma. • Pl. n=109 esetben p(n)=50847534, n/ln(n)=48254942, 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(10100)»230 számot kellene ellenőrizni…

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

  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 tesztelvefor 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)bk,bk-1,…,b0 az n bináris alakjad=1for 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 bi=1 then d=(d*a) mod nnext iif d<>1 then return TRUE else return FALSE

More Related