<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="hu">
	<id>https://vik.wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wtf1sh</id>
	<title>VIK Wiki - Felhasználó közreműködései [hu]</title>
	<link rel="self" type="application/atom+xml" href="https://vik.wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Wtf1sh"/>
	<link rel="alternate" type="text/html" href="https://vik.wiki/Speci%C3%A1lis:Szerkeszt%C5%91_k%C3%B6zrem%C5%B1k%C3%B6d%C3%A9sei/Wtf1sh"/>
	<updated>2026-04-06T01:35:08Z</updated>
	<subtitle>Felhasználó közreműködései</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://vik.wiki/index.php?title=Algoritmuselm%C3%A9let_-_Vizsga,_2013.06.06.&amp;diff=167674</id>
		<title>Algoritmuselmélet - Vizsga, 2013.06.06.</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Algoritmuselm%C3%A9let_-_Vizsga,_2013.06.06.&amp;diff=167674"/>
		<updated>2013-06-10T14:27:56Z</updated>

		<summary type="html">&lt;p&gt;Wtf1sh: /* 6. Feladat (Van megoldás) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==2013.06.06. vizsga megoldásai==&lt;br /&gt;
===1. Feladat (Van megoldás) ===&lt;br /&gt;
Ebben a feladatban a mélységi bejárással kapcsolatos kérdésekre kell válaszolni.&lt;br /&gt;
* &#039;&#039;&#039;(a)&#039;&#039;&#039; Adja meg a keresztél definícióját!&lt;br /&gt;
* &#039;&#039;&#039;(b)&#039;&#039;&#039; A mélységi bejárás során hogyan lehet a mélységi és a befejezési számok alapján felismerni a keresztéleket? &#039;&#039;Vizsgán megjegyzést fűztek hozzá: irányított gráfokra kell gondolni.&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;(c)&#039;&#039;&#039; Bizonyítsa be, hogy irányítatlan gráf mélységi bejárásánál nincsenek keresztélek!&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&#039;&#039;&#039;a)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Tekintsük a G irányított gráf egy mélységi bejárását és a kapott T mélységi feszítő erdőt. Ezen bejárás szerint G egy x → y éle keresztél, ha x és y nem leszármazottjai egymásnak.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
msz - mélységi szám&amp;lt;br&amp;gt;&lt;br /&gt;
bsz - befejezési szám&amp;lt;br&amp;gt;&lt;br /&gt;
Ha &amp;lt;math&amp;gt; (msz[y] &amp;lt; msz[x]) &amp;lt;/math&amp;gt; és &amp;lt;math&amp;gt;(bsz[y] &amp;gt; 0) &amp;lt;/math&amp;gt;, akkor az x →  y egy keresztél.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:keresztel_1.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;c)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
A &#039;&#039;&#039;b)&#039;&#039;&#039; rész alapján könnyen belátható. Ha lenne keresztél, az azt jelentené, hogy van olyan x → y él, amire fennáll, hogy &amp;lt;math&amp;gt; (msz[y] &amp;lt; msz[x]) &amp;lt;/math&amp;gt; és &amp;lt;math&amp;gt;(bsz[y] &amp;gt; 0) &amp;lt;/math&amp;gt;, vagyis y-ban előbb jártunk, mint x-ben, és y-nak van befejezési száma. Ennél fogva nem lehet keresztél, hiszen ha lenne, akkor y-ból eljuthattunk volna még x-be, mielőtt befejeztük volna.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Másképpen mondva:&#039;&#039;&#039; Nem fejezhettük volna be y-t anélkül, hogy ne jártunk volna x-ben.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:keresztel_2.PNG]]&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===2. Feladat (Van megoldás)===&lt;br /&gt;
Milyen műveletek vannak a nyitott címzésű hash-elésnél? Hogyan kell megvalósítani a keresést, ha a nyitott címzésű hashelésnél kvadratikus maradék próbát használunk? &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a nyitott címzésű hash-elés?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
lásd: https://wiki.sch.bme.hu/Hash_t%C3%B6mb &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a kvadratikus maradék próba, nyitott címzésű hash-elésnél?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Nyitott címzésű hash-elés műveletei:&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Új elem beszúrása, elem keresése, elem törlése.&amp;lt;br&amp;gt;&lt;br /&gt;
A törlés speciális jelzéssel történik.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Keresés megvalósítása nyitott címzésű hash-elés esetén kvadratikus maradék próbánál:&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
A kvadratikus maradék próba egy álvéletlen próba, ezért másodlagos csomósodáshoz vezethet.&amp;lt;br&amp;gt;&lt;br /&gt;
Legyen M egy 4k + 3 alakú prímszám, ahol k egy pozitív egész.&amp;lt;br&amp;gt;&lt;br /&gt;
Ekkor a próbasorozat legyen&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; 0,1^2,(-1)^2, 2^2,(-2)^2,..,\left ( \frac{M-1}{2} \right )^{2}, -\left ( \frac{M-1}{2} \right )^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===3. Feladat===&lt;br /&gt;
Adja meg az UNIÓ-HOLVAN adatszerkezet definícióját! (A fákkal való implementálást nem kell leírnia.) Mutassa meg, hogy mikor és hogyan használjuk az UNIÓ és a HOLVAN műveleteket a Kruskal algoritmusban! &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a Kruskal algoritmus?&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;UNIÓ-HOLVAN adatszerkezet definíciója: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mikor és hogyan használjuk az UNIÓ és a HOLVAN műveleteket a Kruskal algoritmusban:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===4. Feladat===&lt;br /&gt;
Pista bácsi fel akar ugrálni egy n hosszú, fekete illetve fehér fokokból álló csigalépcsőn. Legfeljebb k fokot tud ugrani, de arra vigyáznia kell, hogy páros (&amp;gt;=2) sok foknyi ugrás után páratlan sokat és páratlan sok után mindig páros (&amp;gt;=2) sokat ugorjon. Adjon O(nk) lépésszámú algoritmust, amely megmondja, hogy fel tud-e úgy ugrálni a csigalépcső tetejére, hogy csak egyféle színű lépcsőfokot használ. (A lépcső fokai rendszertelenül vannak színezve, a színezést ismerjük.) &lt;br /&gt;
&#039;&#039;Vizsgán megjegyzést fűztek hozzá: a talaj és a legteteje nem színes, csak a lépcsők; csak fölfele (előrefele) ugrál, visszafele nem. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===5. Feladat (Van megoldás)=== &lt;br /&gt;
A hátizsák probléma órán tanult algoritmusát futtattuk egy konkrét inputon, melyben 3 tárgy szerepel. Mi lehetett ez a konkrét input, ha az alábbi táblázat keletkezett?&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 0 &lt;br /&gt;
! 1 &lt;br /&gt;
! 2 &lt;br /&gt;
! 3 &lt;br /&gt;
! 4 &lt;br /&gt;
! 5 &lt;br /&gt;
! 6 &lt;br /&gt;
! 7 &lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
|-&lt;br /&gt;
| 2 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 5 &lt;br /&gt;
| 5 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 15 &lt;br /&gt;
| 15 &lt;br /&gt;
|-&lt;br /&gt;
| 3 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 5 &lt;br /&gt;
| 5 &lt;br /&gt;
| 13 &lt;br /&gt;
| 13 &lt;br /&gt;
| 18 &lt;br /&gt;
| 18 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
Az egyszerűség kedvéért a súly legyen kg, az érték pedig €.&lt;br /&gt;
&lt;br /&gt;
#Az első sor alapján az 1-es csomag értéke €10, súlya 4kg.&lt;br /&gt;
#A második sor alapján a 2-es csomag értéke €5, súlya 2kg.&lt;br /&gt;
#A 3. lépésben 2 lehetőségünk van, a 3. csomag értéke vagy 13-5=€8, vagy 13-0=€13.&lt;br /&gt;
##€8 nem lehet, mert akkor a súlya 2kg lenne, de akkor a [2,3] cellába 8 lenne, nem 5.&lt;br /&gt;
##Így csak a €13 jöhet szóba, súlya pedig 4kg, ami jó megoldás lesz.&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&#039;&#039;Avagy kicsit gépiesebb megoldás:&#039;&#039;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jelölje &amp;lt;math&amp;gt; T[s,cs]&amp;lt;/math&amp;gt; a táblázat &amp;lt;math&amp;gt;[s,cs]&amp;lt;/math&amp;gt; celláját, továbbá &amp;lt;math&amp;gt; V_3&amp;lt;/math&amp;gt; a 3. csomag értékét, &amp;lt;math&amp;gt; S_3&amp;lt;/math&amp;gt; pedig a súlyát.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Tudjuk, hogy &amp;lt;math&amp;gt; T[s,cs]=max\left \{ T[s,cs-1];V_i+T[s-S_i,cs-1] \right \}&amp;lt;/math&amp;gt;, ami ebben az esetben:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; T[4,3]=max\left \{ T[4,2];V_3+T[4-S_3,2] \right \} \rightarrow  13=max\left \{ 10;V_3+T[4-S_3,2] \right \}&amp;lt;/math&amp;gt;, amiből következik, hogy:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; 13=V_3+T[4-S_3,2] \rightarrow V_3 = 13-T[4-S_3,2]\Rightarrow\Rightarrow S_3=4, V_3=13&amp;lt;/math&amp;gt; (Átgondolható, hogy a 3. csomag súlya nem lehet 1,2 vagy 3kg).&lt;br /&gt;
}}&lt;br /&gt;
Tehát végeredményben a megoldás:&lt;br /&gt;
*1-es csomag (€10, 4kg)&lt;br /&gt;
*2-es csomag (€5, 2kg)&lt;br /&gt;
*3-as csomag (€13, 4kg)&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===6. Feladat (Van megoldás)===&lt;br /&gt;
Egy irányítatlan, élsúlyozott gráf az alábbi éllistával adott (zárójelben az élsúlyok):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A:B(1), D(3), E(2); B:A(1), C(3), D(y); D:A(3), C(y), E(x); E:A(2), B(1), D(x).&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;(a)&#039;&#039;&#039; Mi lehet x és y értéke, ha tudjuk, hogy az élsúlyok egész számok, és azt is tudjuk, hogy a B csúcsból indított Prim algoritmus az alábbi sorrendben vette be az értékeket: BE, ED, BA, BC. &#039;&#039;Vizsgán megjegyzést fűztek hozzá: az élsúlyok pozitív egész számok, a pozitív szót kifelejtették véletlenül.&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;(b)&#039;&#039;&#039; Mely éleket és milyen sorrendben választja ki a Kruskal algoritmus? (Ha több megoldás is van, akkor az összeset adja meg!)&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
[[File:2013_06_06_V2_6.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;a)&#039;&#039;&#039; Prim algoritmus - Ugyebár úgy dolgozik, hogy az aktuális fához a vele szomszédos élek közül a legkisebb súlyút veszi be. Prim: BE → ED → BA → BC&lt;br /&gt;
# A fához hozzáadjuk a BE élt.&lt;br /&gt;
# Most az ED élt választottuk. Ez alapján x értéke csak 1 lehet, így &amp;lt;math&amp;gt;x = 1&amp;lt;/math&amp;gt;. (Feladatból kihagyták, hogy pozitív egészekről van szó, amúgy &amp;lt;math&amp;gt;x \le 1&amp;lt;/math&amp;gt; lehetne.)&lt;br /&gt;
# Most az AB élt adjuk hozzá, ez alapján &amp;lt;math&amp;gt;y \ge 1&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Most a BC élt adjuk hozzá, ez alapján &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;, így végül &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b)&#039;&#039;&#039; Kruskal algoritmus - Éleket nagyság szerint sorrendbe rakjuk, és növekvő sorrendben felvesszük a fához az éleket, vigyázva, hogy ne csináljunk kört.&lt;br /&gt;
&lt;br /&gt;
1 súlyú - AB, BE, ED&lt;br /&gt;
&lt;br /&gt;
2 súlyú - AE&lt;br /&gt;
&lt;br /&gt;
3 súlyú - BC, AD, EC (és DC, ha &amp;lt;math&amp;gt;y = 3&amp;lt;/math&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Az összes megoldás:&lt;br /&gt;
&lt;br /&gt;
#Az 1 súlyú éleket &amp;lt;math&amp;gt;3! = 6&amp;lt;/math&amp;gt; féleképpen veheti fel az algoritmus (nem lehet belőlük kört csinálni, így itt nincsen para).&lt;br /&gt;
#Utána megpróbálná felvenni az AE élt, de azzal egy kört kapna, így nem veszi fel. Az AD éllel szintén így járna (~ezeket kéne pirosra színezni, ha olyan lenne a feladat).&lt;br /&gt;
#Maradtak a BC, EC és DC oldalak.&lt;br /&gt;
##Ha &amp;lt;math&amp;gt;y = 3&amp;lt;/math&amp;gt;, akkor ezeket szintén 6 féleképpen veheti fel, tehát összesen 36 féleképpen futhat az algoritmus.&lt;br /&gt;
##Ha &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;, akkor a DC oldal kiesik, a maradék 2 élt 2 féleképpen veheti fel, így 12 féleképpen futhat az algoritmus.}}&lt;br /&gt;
&lt;br /&gt;
===7. Feladat(Van megoldás)=== &lt;br /&gt;
Létezik-e olyan X eldöntési probléma, amire X&amp;lt;big&amp;gt;∉&amp;lt;/big&amp;gt;NP és X&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;SAT egyszerre fennáll? &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Eldöntési probléma osztályok? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:bonyolultsag_elmelet.JPG|390px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;problémák&#039;&#039;&#039;nak lehet több típusú több bemenete, és több típusú több kimenete. Ezeket átfogalmazzuk olyanra, hogy a kimenete egyetlen bit legyen (IGEN / NEM), mert ezen algoritmusok felhasználásával is teljesen jól lehet dolgozni, ugyanakkor könnyebb őket nehézség / bonyolultság szerint osztályozni. Az ilyen 1 bites kimenetű problémákat nevezzük &#039;&#039;&#039;eldöntési problémák&#039;&#039;&#039;nak. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az eldöntési problémákat nehézség / bonyolultság szerint osztályokba soroljuk, ezen osztályok között olyan kapcsolatok vannak mint a halmazoknál; ez a fenti rajzon látszik.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;P osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre ismert olyan algoritmus, ami a bemenet polinomjával megadott idő alatt lefut. Vagyis ha a bemenet &#039;&#039;&#039;n&#039;&#039;&#039;, akkor az algoritmusra azt mondjuk, hogy nagy_ordó(valami), ahol a valami &#039;&#039;&#039;n&#039;&#039;&#039; egy polinomja, például n négyzet, n köb, három n négyzet meg négy meg nyolc n köb, és ilyesmik. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre (jelenleg) nem ismert polinom idejű (P-beli) algoritmus, de igen válasz esetén létezik hatékony tanúsítvány. Vagyis, adott egy nagy csomó bemenet és van egy kérdés. P-idő alatt nem tudjuk megmondani a választ, de ha valaki megsúgja hogy a válasz IGEN, akkor P-időben meg tudjuk mondani, hogy ez hülyeség vagy nem hülyeség. Ha azt súgják meg hogy NEM, akkor fogalmunk sincs, P-időben nem tudjuk eldönteni hogy hülyeség-e vagy sem. (&#039;&#039;Ha így lenne, vagyis igen és nem válasz esetén is P-időben ellenőrizni tudnánk a válasz helyességét, akkor az egész probléma P-beli lenne, hiszen megsúgjuk saját magunknak hogy NEM és ha helyes akkor NEM egyébként igen. Persze ha az IGEN-ről P-időben kiderül hogy hülyeség attól még lehet hogy IGEN, csak éppen nem az a konkrét ami meg lett súgva, hanem egy másik.&#039;&#039;) &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;coNP osztály&#039;&#039;&#039; lényegében ugyanaz mint az NP osztály, csak NEM válaszra. Vagyis (jelenleg) nem ismerünk rá P-beli algoritmust, de ha a válasz NEM, akkor P-időben (hatékonyan) ellenőrizni tudjuk, hogy ez-e a jó válasz vagy sem. Szintén, IGEN válasz esetén semmit sem tudunk mondani P-időben, a fenti okok miatt (ami a zárójelben van). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP nehéz&#039;&#039;&#039; osztályba tartozó eldöntési problémák közül bármelyik legalább olyan nehéz, mint bármelyik másik NP-beli eldöntési probléma. Itt jön képbe a Karp-redukció fogalma. Jó dolog sok NP nehéz problémát ismerni, mert akkor ha találunk egy problémát, akkor ha találunk olyan Karp-redukciót, ami azt mutatja, hogy ez a probléma visszavezethető egy közismert NP nehéz problémára, akkor a mi ismeretlen problémánk is NP nehéz lesz. Ez azért van, mert a Karp-redukció tranzitív művelet, továbbá a Karp-redukcónál használt f függvény P-beli, amit kétszer egymás után alkalmazva is még mindig P-beli lesz ez a dolog (az inputok átalakítása). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP teljes&#039;&#039;&#039; problémák azok, amik NP nehezek és NP-beliek is egyszerre. A fenti dolog ide is érvényes, vagyis jó dolog ha sok nevezetes NP teljes problémát ismerünk, mert ha egy ismeretlen problémához találunk egy olyan Karp-redukciót, ami alapján az ismeretlen problémánkat visszavezethetjük egy közismert NP teljes problémára, akkor az ismeretlen problémánkról is kiderült, hogy NP teljes. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Karp-redukció?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
Van egy olyan gépünk, ami kizárólag B problémát tudja megoldani. Nekünk viszont A problémánk van. Ekkor ha szerencsénk van, akkor fogunk találni egy olyan Karp-redukciót, hogy A&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;B. Ennek persze vannak feltételei. Az A eldöntési probléma inputját át kell alakítani B eldöntési probléma inputjává, és meg is kell adni ezt a függvényt, nevezzük el ezt a függvényt f függvénynek. Feltétel, hogy f függvény polinom időben kiszámolható legyen, és ezt be is kell bizonyítani. Továbbá azt is be kell bizonyítani, hogy amennyiben a normális inputra A azt válaszolná, hogy IGEN, akkor az f(normális input)-ra a B szintén ugyanezt válaszolná (és ugyanezt be kell bizonyítani NEM válaszra is). Magyarul a B dolgot megoldó gépet megerőszakoljuk hogy A problémát is hajlandó legyen megoldani. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebből következik néhány dolog. Például az, hogy B legalább olyan nehéz probléma, mint A. Ha például B NP-teljes, akkor A is az. Ha B NP-nehéz, akkor A is az. Ha B coNP-beli, akkor A is az. Ez miért van? Hát azért, mert polinom időben át lehet alakítani az A problémát B-vé. Ezt indirekten könnyen lehet bizonyítani. Indirekt tegyük fel, hogy annak ellenére hogy B probléma NP-teljes és létezik egy olyan Karp-redukció ami A problmémát átalakítja B-vé, szóval mindezek ellenére A probléma P-beli. Ekkor A problémát egy polinom idejű f függvénnyel simán átalakítjuk B problémává, erről szól ugye a Karp-redukció. Ezek után ha bármikor B problémát akarnánk megoldani, akkor az f-függvény fordítva végrehajtásával a B inputját átalakítjuk A inputjává, megoldjuk az A problémát polinom időben, és kész is. Ez ellentmondás mivel B-ről azt mondtuk hogy NP-teljes. A másik érdekesség, hogy ha például egy NP-teljes vagy NP-nehéz problémáról kiderülne hogy P-beli, akkor az összes NP-beliről kiderülne hogy P-beli, mivel az NP-nehéz definíciója az, hogy legalább olyan nehéz mint bármely tetszőleges NP-beli. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Még egy fontos megjegyzés a Karp-redukcióhoz: ugye A problémát akarjuk megoldani, de csak B-t megoldó gépünk van. Az egyik gyakorlaton elhangzott, és fontos tudni, hogy a B-t megoldó gépet az A eldöntési probléma megoldásához csak EGYSZER használhatjuk. Azért mert a Karp-redukció az ilyen.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;SAT probléma? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
A SAT probléma NP-teljes.&amp;lt;br&amp;gt;&lt;br /&gt;
forrás:http://www.cs.bme.hu/algel/12elo-2012.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;A feladat megoldása: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
Tétel: Ha X ≺ Y és Y ∈ NP,akkor X ∈ NP&amp;lt;br&amp;gt;&lt;br /&gt;
Tétel: A SAT probléma NP teljes, tehát része NP-nek.&amp;lt;br&amp;gt;&lt;br /&gt;
A fentiek alapján, mivel X&amp;lt;big&amp;gt;∉&amp;lt;/big&amp;gt;NP, a kérdéses X probléma nem létezhet.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===8. Feladat===&lt;br /&gt;
P-ben van vagy NP-teljes az alábbi eldöntési probléma:&amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Input:&#039;&#039;&#039; irányítatlan G gráf&amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Kérdés:&#039;&#039;&#039; Igaz-e, hogy G-ben vagy van Hamilton-út vagy G 3 színnel színezhető?&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Eldöntési probléma osztályok? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:bonyolultsag_elmelet.JPG|390px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;problémák&#039;&#039;&#039;nak lehet több típusú több bemenete, és több típusú több kimenete. Ezeket átfogalmazzuk olyanra, hogy a kimenete egyetlen bit legyen (IGEN / NEM), mert ezen algoritmusok felhasználásával is teljesen jól lehet dolgozni, ugyanakkor könnyebb őket nehézség / bonyolultság szerint osztályozni. Az ilyen 1 bites kimenetű problémákat nevezzük &#039;&#039;&#039;eldöntési problémák&#039;&#039;&#039;nak. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az eldöntési problémákat nehézség / bonyolultság szerint osztályokba soroljuk, ezen osztályok között olyan kapcsolatok vannak mint a halmazoknál; ez a fenti rajzon látszik.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;P osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre ismert olyan algoritmus, ami a bemenet polinomjával megadott idő alatt lefut. Vagyis ha a bemenet &#039;&#039;&#039;n&#039;&#039;&#039;, akkor az algoritmusra azt mondjuk, hogy nagy_ordó(valami), ahol a valami &#039;&#039;&#039;n&#039;&#039;&#039; egy polinomja, például n négyzet, n köb, három n négyzet meg négy meg nyolc n köb, és ilyesmik. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre (jelenleg) nem ismert polinom idejű (P-beli) algoritmus, de igen válasz esetén létezik hatékony tanúsítvány. Vagyis, adott egy nagy csomó bemenet és van egy kérdés. P-idő alatt nem tudjuk megmondani a választ, de ha valaki megsúgja hogy a válasz IGEN, akkor P-időben meg tudjuk mondani, hogy ez hülyeség vagy nem hülyeség. Ha azt súgják meg hogy NEM, akkor fogalmunk sincs, P-időben nem tudjuk eldönteni hogy hülyeség-e vagy sem. (&#039;&#039;Ha így lenne, vagyis igen és nem válasz esetén is P-időben ellenőrizni tudnánk a válasz helyességét, akkor az egész probléma P-beli lenne, hiszen megsúgjuk saját magunknak hogy NEM és ha helyes akkor NEM egyébként igen. Persze ha az IGEN-ről P-időben kiderül hogy hülyeség attól még lehet hogy IGEN, csak éppen nem az a konkrét ami meg lett súgva, hanem egy másik.&#039;&#039;) &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;coNP osztály&#039;&#039;&#039; lényegében ugyanaz mint az NP osztály, csak NEM válaszra. Vagyis (jelenleg) nem ismerünk rá P-beli algoritmust, de ha a válasz NEM, akkor P-időben (hatékonyan) ellenőrizni tudjuk, hogy ez-e a jó válasz vagy sem. Szintén, IGEN válasz esetén semmit sem tudunk mondani P-időben, a fenti okok miatt (ami a zárójelben van). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP nehéz&#039;&#039;&#039; osztályba tartozó eldöntési problémák közül bármelyik legalább olyan nehéz, mint bármelyik másik NP-beli eldöntési probléma. Itt jön képbe a Karp-redukció fogalma. Jó dolog sok NP nehéz problémát ismerni, mert akkor ha találunk egy problémát, akkor ha találunk olyan Karp-redukciót, ami azt mutatja, hogy ez a probléma visszavezethető egy közismert NP nehéz problémára, akkor a mi ismeretlen problémánk is NP nehéz lesz. Ez azért van, mert a Karp-redukció tranzitív művelet, továbbá a Karp-redukcónál használt f függvény P-beli, amit kétszer egymás után alkalmazva is még mindig P-beli lesz ez a dolog (az inputok átalakítása). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP teljes&#039;&#039;&#039; problémák azok, amik NP nehezek és NP-beliek is egyszerre. A fenti dolog ide is érvényes, vagyis jó dolog ha sok nevezetes NP teljes problémát ismerünk, mert ha egy ismeretlen problémához találunk egy olyan Karp-redukciót, ami alapján az ismeretlen problémánkat visszavezethetjük egy közismert NP teljes problémára, akkor az ismeretlen problémánkról is kiderült, hogy NP teljes. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Karp-redukció?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
Van egy olyan gépünk, ami kizárólag B problémát tudja megoldani. Nekünk viszont A problémánk van. Ekkor ha szerencsénk van, akkor fogunk találni egy olyan Karp-redukciót, hogy A&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;B. Ennek persze vannak feltételei. Az A eldöntési probléma inputját át kell alakítani B eldöntési probléma inputjává, és meg is kell adni ezt a függvényt, nevezzük el ezt a függvényt f függvénynek. Feltétel, hogy f függvény polinom időben kiszámolható legyen, és ezt be is kell bizonyítani. Továbbá azt is be kell bizonyítani, hogy amennyiben a normális inputra A azt válaszolná, hogy IGEN, akkor az f(normális input)-ra a B szintén ugyanezt válaszolná (és ugyanezt be kell bizonyítani NEM válaszra is). Magyarul a B dolgot megoldó gépet megerőszakoljuk hogy A problémát is hajlandó legyen megoldani. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebből következik néhány dolog. Például az, hogy B legalább olyan nehéz probléma, mint A. Ha például B NP-teljes, akkor A is az. Ha B NP-nehéz, akkor A is az. Ha B coNP-beli, akkor A is az. Ez miért van? Hát azért, mert polinom időben át lehet alakítani az A problémát B-vé. Ezt indirekten könnyen lehet bizonyítani. Indirekt tegyük fel, hogy annak ellenére hogy B probléma NP-teljes és létezik egy olyan Karp-redukció ami A problmémát átalakítja B-vé, szóval mindezek ellenére A probléma P-beli. Ekkor A problémát egy polinom idejű f függvénnyel simán átalakítjuk B problémává, erről szól ugye a Karp-redukció. Ezek után ha bármikor B problémát akarnánk megoldani, akkor az f-függvény fordítva végrehajtásával a B inputját átalakítjuk A inputjává, megoldjuk az A problémát polinom időben, és kész is. Ez ellentmondás mivel B-ről azt mondtuk hogy NP-teljes. A másik érdekesség, hogy ha például egy NP-teljes vagy NP-nehéz problémáról kiderülne hogy P-beli, akkor az összes NP-beliről kiderülne hogy P-beli, mivel az NP-nehéz definíciója az, hogy legalább olyan nehéz mint bármely tetszőleges NP-beli. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Még egy fontos megjegyzés a Karp-redukcióhoz: ugye A problémát akarjuk megoldani, de csak B-t megoldó gépünk van. Az egyik gyakorlaton elhangzott, és fontos tudni, hogy a B-t megoldó gépet az A eldöntési probléma megoldásához csak EGYSZER használhatjuk. Azért mert a Karp-redukció az ilyen.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;H-út? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;3 színnel színezhetőség problémája? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;A feladat megoldása: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Wtf1sh</name></author>
	</entry>
	<entry>
		<id>https://vik.wiki/index.php?title=Algoritmuselm%C3%A9let_-_Vizsga,_2013.06.06.&amp;diff=167673</id>
		<title>Algoritmuselmélet - Vizsga, 2013.06.06.</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Algoritmuselm%C3%A9let_-_Vizsga,_2013.06.06.&amp;diff=167673"/>
		<updated>2013-06-10T14:27:24Z</updated>

		<summary type="html">&lt;p&gt;Wtf1sh: /* 7. Feladat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==2013.06.06. vizsga megoldásai==&lt;br /&gt;
===1. Feladat (Van megoldás) ===&lt;br /&gt;
Ebben a feladatban a mélységi bejárással kapcsolatos kérdésekre kell válaszolni.&lt;br /&gt;
* &#039;&#039;&#039;(a)&#039;&#039;&#039; Adja meg a keresztél definícióját!&lt;br /&gt;
* &#039;&#039;&#039;(b)&#039;&#039;&#039; A mélységi bejárás során hogyan lehet a mélységi és a befejezési számok alapján felismerni a keresztéleket? &#039;&#039;Vizsgán megjegyzést fűztek hozzá: irányított gráfokra kell gondolni.&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;(c)&#039;&#039;&#039; Bizonyítsa be, hogy irányítatlan gráf mélységi bejárásánál nincsenek keresztélek!&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&#039;&#039;&#039;a)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Tekintsük a G irányított gráf egy mélységi bejárását és a kapott T mélységi feszítő erdőt. Ezen bejárás szerint G egy x → y éle keresztél, ha x és y nem leszármazottjai egymásnak.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
msz - mélységi szám&amp;lt;br&amp;gt;&lt;br /&gt;
bsz - befejezési szám&amp;lt;br&amp;gt;&lt;br /&gt;
Ha &amp;lt;math&amp;gt; (msz[y] &amp;lt; msz[x]) &amp;lt;/math&amp;gt; és &amp;lt;math&amp;gt;(bsz[y] &amp;gt; 0) &amp;lt;/math&amp;gt;, akkor az x →  y egy keresztél.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:keresztel_1.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;c)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
A &#039;&#039;&#039;b)&#039;&#039;&#039; rész alapján könnyen belátható. Ha lenne keresztél, az azt jelentené, hogy van olyan x → y él, amire fennáll, hogy &amp;lt;math&amp;gt; (msz[y] &amp;lt; msz[x]) &amp;lt;/math&amp;gt; és &amp;lt;math&amp;gt;(bsz[y] &amp;gt; 0) &amp;lt;/math&amp;gt;, vagyis y-ban előbb jártunk, mint x-ben, és y-nak van befejezési száma. Ennél fogva nem lehet keresztél, hiszen ha lenne, akkor y-ból eljuthattunk volna még x-be, mielőtt befejeztük volna.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Másképpen mondva:&#039;&#039;&#039; Nem fejezhettük volna be y-t anélkül, hogy ne jártunk volna x-ben.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:keresztel_2.PNG]]&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===2. Feladat (Van megoldás)===&lt;br /&gt;
Milyen műveletek vannak a nyitott címzésű hash-elésnél? Hogyan kell megvalósítani a keresést, ha a nyitott címzésű hashelésnél kvadratikus maradék próbát használunk? &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a nyitott címzésű hash-elés?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
lásd: https://wiki.sch.bme.hu/Hash_t%C3%B6mb &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a kvadratikus maradék próba, nyitott címzésű hash-elésnél?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Nyitott címzésű hash-elés műveletei:&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Új elem beszúrása, elem keresése, elem törlése.&amp;lt;br&amp;gt;&lt;br /&gt;
A törlés speciális jelzéssel történik.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Keresés megvalósítása nyitott címzésű hash-elés esetén kvadratikus maradék próbánál:&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
A kvadratikus maradék próba egy álvéletlen próba, ezért másodlagos csomósodáshoz vezethet.&amp;lt;br&amp;gt;&lt;br /&gt;
Legyen M egy 4k + 3 alakú prímszám, ahol k egy pozitív egész.&amp;lt;br&amp;gt;&lt;br /&gt;
Ekkor a próbasorozat legyen&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; 0,1^2,(-1)^2, 2^2,(-2)^2,..,\left ( \frac{M-1}{2} \right )^{2}, -\left ( \frac{M-1}{2} \right )^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===3. Feladat===&lt;br /&gt;
Adja meg az UNIÓ-HOLVAN adatszerkezet definícióját! (A fákkal való implementálást nem kell leírnia.) Mutassa meg, hogy mikor és hogyan használjuk az UNIÓ és a HOLVAN műveleteket a Kruskal algoritmusban! &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a Kruskal algoritmus?&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;UNIÓ-HOLVAN adatszerkezet definíciója: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mikor és hogyan használjuk az UNIÓ és a HOLVAN műveleteket a Kruskal algoritmusban:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===4. Feladat===&lt;br /&gt;
Pista bácsi fel akar ugrálni egy n hosszú, fekete illetve fehér fokokból álló csigalépcsőn. Legfeljebb k fokot tud ugrani, de arra vigyáznia kell, hogy páros (&amp;gt;=2) sok foknyi ugrás után páratlan sokat és páratlan sok után mindig páros (&amp;gt;=2) sokat ugorjon. Adjon O(nk) lépésszámú algoritmust, amely megmondja, hogy fel tud-e úgy ugrálni a csigalépcső tetejére, hogy csak egyféle színű lépcsőfokot használ. (A lépcső fokai rendszertelenül vannak színezve, a színezést ismerjük.) &lt;br /&gt;
&#039;&#039;Vizsgán megjegyzést fűztek hozzá: a talaj és a legteteje nem színes, csak a lépcsők; csak fölfele (előrefele) ugrál, visszafele nem. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===5. Feladat (Van megoldás)=== &lt;br /&gt;
A hátizsák probléma órán tanult algoritmusát futtattuk egy konkrét inputon, melyben 3 tárgy szerepel. Mi lehetett ez a konkrét input, ha az alábbi táblázat keletkezett?&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 0 &lt;br /&gt;
! 1 &lt;br /&gt;
! 2 &lt;br /&gt;
! 3 &lt;br /&gt;
! 4 &lt;br /&gt;
! 5 &lt;br /&gt;
! 6 &lt;br /&gt;
! 7 &lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
|-&lt;br /&gt;
| 2 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 5 &lt;br /&gt;
| 5 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 15 &lt;br /&gt;
| 15 &lt;br /&gt;
|-&lt;br /&gt;
| 3 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 5 &lt;br /&gt;
| 5 &lt;br /&gt;
| 13 &lt;br /&gt;
| 13 &lt;br /&gt;
| 18 &lt;br /&gt;
| 18 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
Az egyszerűség kedvéért a súly legyen kg, az érték pedig €.&lt;br /&gt;
&lt;br /&gt;
#Az első sor alapján az 1-es csomag értéke €10, súlya 4kg.&lt;br /&gt;
#A második sor alapján a 2-es csomag értéke €5, súlya 2kg.&lt;br /&gt;
#A 3. lépésben 2 lehetőségünk van, a 3. csomag értéke vagy 13-5=€8, vagy 13-0=€13.&lt;br /&gt;
##€8 nem lehet, mert akkor a súlya 2kg lenne, de akkor a [2,3] cellába 8 lenne, nem 5.&lt;br /&gt;
##Így csak a €13 jöhet szóba, súlya pedig 4kg, ami jó megoldás lesz.&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&#039;&#039;Avagy kicsit gépiesebb megoldás:&#039;&#039;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jelölje &amp;lt;math&amp;gt; T[s,cs]&amp;lt;/math&amp;gt; a táblázat &amp;lt;math&amp;gt;[s,cs]&amp;lt;/math&amp;gt; celláját, továbbá &amp;lt;math&amp;gt; V_3&amp;lt;/math&amp;gt; a 3. csomag értékét, &amp;lt;math&amp;gt; S_3&amp;lt;/math&amp;gt; pedig a súlyát.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Tudjuk, hogy &amp;lt;math&amp;gt; T[s,cs]=max\left \{ T[s,cs-1];V_i+T[s-S_i,cs-1] \right \}&amp;lt;/math&amp;gt;, ami ebben az esetben:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; T[4,3]=max\left \{ T[4,2];V_3+T[4-S_3,2] \right \} \rightarrow  13=max\left \{ 10;V_3+T[4-S_3,2] \right \}&amp;lt;/math&amp;gt;, amiből következik, hogy:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; 13=V_3+T[4-S_3,2] \rightarrow V_3 = 13-T[4-S_3,2]\Rightarrow\Rightarrow S_3=4, V_3=13&amp;lt;/math&amp;gt; (Átgondolható, hogy a 3. csomag súlya nem lehet 1,2 vagy 3kg).&lt;br /&gt;
}}&lt;br /&gt;
Tehát végeredményben a megoldás:&lt;br /&gt;
*1-es csomag (€10, 4kg)&lt;br /&gt;
*2-es csomag (€5, 2kg)&lt;br /&gt;
*3-as csomag (€13, 4kg)&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===6. Feladat (Van megoldás)===&lt;br /&gt;
Egy irányítatlan, élsúlyozott gráf az alábbi éllistával adott (zárójelben az élsúlyok):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A:B(1), D(3), E(2); B:A(1), C(3), D(y); D:A(3), C(y), E(x); E:A(2), B(1), D(x).&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;(a)&#039;&#039;&#039; Mi lehet x és y értéke, ha tudjuk, hogy az élsúlyok egész számok, és azt is tudjuk, hogy a B csúcsból indított Prim algoritmus az alábbi sorrendben vette be az értékeket: BE, ED, BA, BC. &#039;&#039;Vizsgán megjegyzést fűztek hozzá: az élsúlyok pozitív egész számok, a pozitív szót kifelejtették véletlenül.&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;(b)&#039;&#039;&#039; Mely éleket és milyen sorrendben választja ki a Kruskal algoritmus? (Ha több megoldás is van, akkor az összeset adja meg!)&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
[[File:2013_06_06_V2_6.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;a)&#039;&#039;&#039; Prim algoritmus - Ugyebár úgy dolgozik, hogy az aktuális fához a vele szomszédos élek közül a legkisebb súlyút veszi be. Prim: BE → ED → BA → BC&lt;br /&gt;
# A fához hozzáadjuk a BE élt.&lt;br /&gt;
# Most az ED élt választottuk. Ez alapján x értéke csak 1 lehet, így &amp;lt;math&amp;gt;x = 1&amp;lt;/math&amp;gt;. (Feladatból kihagyták, hogy pozitív egészekről van szó, amúgy &amp;lt;math&amp;gt;x \le 1&amp;lt;/math&amp;gt; lehetne.)&lt;br /&gt;
# Most az AB élt adjuk hozzá, ez alapján &amp;lt;math&amp;gt;y \ge 1&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Most a BC élt adjuk hozzá, ez alapján &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;, így végül &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b)&#039;&#039;&#039; Kruskal algoritmus - Éleket nagyság szerint sorrendbe rakjuk, és növekvő sorrendben felvesszük a fához az éleket, vigyázva, hogy ne csináljunk kört.&lt;br /&gt;
&lt;br /&gt;
1 súlyú - AB, BE, ED&lt;br /&gt;
&lt;br /&gt;
2 súlyú - AE&lt;br /&gt;
&lt;br /&gt;
3 súlyú - BC, AD, EC (és DC, ha &amp;lt;math&amp;gt;y = 3&amp;lt;/math&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Az összes megoldás:&lt;br /&gt;
&lt;br /&gt;
#Az 1 súlyú éleket &amp;lt;math&amp;gt;3! = 6&amp;lt;/math&amp;gt; féleképpen veheti fel az algoritmus (nem lehet belőlük kört csinálni, így itt nincsen para).&lt;br /&gt;
#Utána megpróbálná felvenni az AE élt, de azzal egy kört kapna, így nem veszi fel. Az AD éllel szintén így járna (~ezeket kéne pirosra színezni, ha olyan lenne a feladat).&lt;br /&gt;
#Maradtak a BC, EC és DC oldalak.&lt;br /&gt;
##Ha &amp;lt;math&amp;gt;y = 3&amp;lt;/math&amp;gt;, akkor ezeket szintén 6 féleképpen veheti fel, tehát összesen 36 féleképpen futhat az algoritmus.&lt;br /&gt;
##Ha &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;, akkor a DC oldal kiesik, a maradék 2 élt 2 féleképpen veheti fel, így 12 féleképpen futhat az algoritmus.}}&lt;br /&gt;
&lt;br /&gt;
===7. Feladat=== (Van megoldás)&lt;br /&gt;
Létezik-e olyan X eldöntési probléma, amire X&amp;lt;big&amp;gt;∉&amp;lt;/big&amp;gt;NP és X&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;SAT egyszerre fennáll? &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Eldöntési probléma osztályok? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:bonyolultsag_elmelet.JPG|390px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;problémák&#039;&#039;&#039;nak lehet több típusú több bemenete, és több típusú több kimenete. Ezeket átfogalmazzuk olyanra, hogy a kimenete egyetlen bit legyen (IGEN / NEM), mert ezen algoritmusok felhasználásával is teljesen jól lehet dolgozni, ugyanakkor könnyebb őket nehézség / bonyolultság szerint osztályozni. Az ilyen 1 bites kimenetű problémákat nevezzük &#039;&#039;&#039;eldöntési problémák&#039;&#039;&#039;nak. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az eldöntési problémákat nehézség / bonyolultság szerint osztályokba soroljuk, ezen osztályok között olyan kapcsolatok vannak mint a halmazoknál; ez a fenti rajzon látszik.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;P osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre ismert olyan algoritmus, ami a bemenet polinomjával megadott idő alatt lefut. Vagyis ha a bemenet &#039;&#039;&#039;n&#039;&#039;&#039;, akkor az algoritmusra azt mondjuk, hogy nagy_ordó(valami), ahol a valami &#039;&#039;&#039;n&#039;&#039;&#039; egy polinomja, például n négyzet, n köb, három n négyzet meg négy meg nyolc n köb, és ilyesmik. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre (jelenleg) nem ismert polinom idejű (P-beli) algoritmus, de igen válasz esetén létezik hatékony tanúsítvány. Vagyis, adott egy nagy csomó bemenet és van egy kérdés. P-idő alatt nem tudjuk megmondani a választ, de ha valaki megsúgja hogy a válasz IGEN, akkor P-időben meg tudjuk mondani, hogy ez hülyeség vagy nem hülyeség. Ha azt súgják meg hogy NEM, akkor fogalmunk sincs, P-időben nem tudjuk eldönteni hogy hülyeség-e vagy sem. (&#039;&#039;Ha így lenne, vagyis igen és nem válasz esetén is P-időben ellenőrizni tudnánk a válasz helyességét, akkor az egész probléma P-beli lenne, hiszen megsúgjuk saját magunknak hogy NEM és ha helyes akkor NEM egyébként igen. Persze ha az IGEN-ről P-időben kiderül hogy hülyeség attól még lehet hogy IGEN, csak éppen nem az a konkrét ami meg lett súgva, hanem egy másik.&#039;&#039;) &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;coNP osztály&#039;&#039;&#039; lényegében ugyanaz mint az NP osztály, csak NEM válaszra. Vagyis (jelenleg) nem ismerünk rá P-beli algoritmust, de ha a válasz NEM, akkor P-időben (hatékonyan) ellenőrizni tudjuk, hogy ez-e a jó válasz vagy sem. Szintén, IGEN válasz esetén semmit sem tudunk mondani P-időben, a fenti okok miatt (ami a zárójelben van). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP nehéz&#039;&#039;&#039; osztályba tartozó eldöntési problémák közül bármelyik legalább olyan nehéz, mint bármelyik másik NP-beli eldöntési probléma. Itt jön képbe a Karp-redukció fogalma. Jó dolog sok NP nehéz problémát ismerni, mert akkor ha találunk egy problémát, akkor ha találunk olyan Karp-redukciót, ami azt mutatja, hogy ez a probléma visszavezethető egy közismert NP nehéz problémára, akkor a mi ismeretlen problémánk is NP nehéz lesz. Ez azért van, mert a Karp-redukció tranzitív művelet, továbbá a Karp-redukcónál használt f függvény P-beli, amit kétszer egymás után alkalmazva is még mindig P-beli lesz ez a dolog (az inputok átalakítása). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP teljes&#039;&#039;&#039; problémák azok, amik NP nehezek és NP-beliek is egyszerre. A fenti dolog ide is érvényes, vagyis jó dolog ha sok nevezetes NP teljes problémát ismerünk, mert ha egy ismeretlen problémához találunk egy olyan Karp-redukciót, ami alapján az ismeretlen problémánkat visszavezethetjük egy közismert NP teljes problémára, akkor az ismeretlen problémánkról is kiderült, hogy NP teljes. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Karp-redukció?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
Van egy olyan gépünk, ami kizárólag B problémát tudja megoldani. Nekünk viszont A problémánk van. Ekkor ha szerencsénk van, akkor fogunk találni egy olyan Karp-redukciót, hogy A&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;B. Ennek persze vannak feltételei. Az A eldöntési probléma inputját át kell alakítani B eldöntési probléma inputjává, és meg is kell adni ezt a függvényt, nevezzük el ezt a függvényt f függvénynek. Feltétel, hogy f függvény polinom időben kiszámolható legyen, és ezt be is kell bizonyítani. Továbbá azt is be kell bizonyítani, hogy amennyiben a normális inputra A azt válaszolná, hogy IGEN, akkor az f(normális input)-ra a B szintén ugyanezt válaszolná (és ugyanezt be kell bizonyítani NEM válaszra is). Magyarul a B dolgot megoldó gépet megerőszakoljuk hogy A problémát is hajlandó legyen megoldani. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebből következik néhány dolog. Például az, hogy B legalább olyan nehéz probléma, mint A. Ha például B NP-teljes, akkor A is az. Ha B NP-nehéz, akkor A is az. Ha B coNP-beli, akkor A is az. Ez miért van? Hát azért, mert polinom időben át lehet alakítani az A problémát B-vé. Ezt indirekten könnyen lehet bizonyítani. Indirekt tegyük fel, hogy annak ellenére hogy B probléma NP-teljes és létezik egy olyan Karp-redukció ami A problmémát átalakítja B-vé, szóval mindezek ellenére A probléma P-beli. Ekkor A problémát egy polinom idejű f függvénnyel simán átalakítjuk B problémává, erről szól ugye a Karp-redukció. Ezek után ha bármikor B problémát akarnánk megoldani, akkor az f-függvény fordítva végrehajtásával a B inputját átalakítjuk A inputjává, megoldjuk az A problémát polinom időben, és kész is. Ez ellentmondás mivel B-ről azt mondtuk hogy NP-teljes. A másik érdekesség, hogy ha például egy NP-teljes vagy NP-nehéz problémáról kiderülne hogy P-beli, akkor az összes NP-beliről kiderülne hogy P-beli, mivel az NP-nehéz definíciója az, hogy legalább olyan nehéz mint bármely tetszőleges NP-beli. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Még egy fontos megjegyzés a Karp-redukcióhoz: ugye A problémát akarjuk megoldani, de csak B-t megoldó gépünk van. Az egyik gyakorlaton elhangzott, és fontos tudni, hogy a B-t megoldó gépet az A eldöntési probléma megoldásához csak EGYSZER használhatjuk. Azért mert a Karp-redukció az ilyen.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;SAT probléma? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
A SAT probléma NP-teljes.&amp;lt;br&amp;gt;&lt;br /&gt;
forrás:http://www.cs.bme.hu/algel/12elo-2012.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;A feladat megoldása: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
Tétel: Ha X ≺ Y és Y ∈ NP,akkor X ∈ NP&amp;lt;br&amp;gt;&lt;br /&gt;
Tétel: A SAT probléma NP teljes, tehát része NP-nek.&amp;lt;br&amp;gt;&lt;br /&gt;
A fentiek alapján, mivel X&amp;lt;big&amp;gt;∉&amp;lt;/big&amp;gt;NP, a kérdéses X probléma nem létezhet.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===8. Feladat===&lt;br /&gt;
P-ben van vagy NP-teljes az alábbi eldöntési probléma:&amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Input:&#039;&#039;&#039; irányítatlan G gráf&amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Kérdés:&#039;&#039;&#039; Igaz-e, hogy G-ben vagy van Hamilton-út vagy G 3 színnel színezhető?&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Eldöntési probléma osztályok? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:bonyolultsag_elmelet.JPG|390px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;problémák&#039;&#039;&#039;nak lehet több típusú több bemenete, és több típusú több kimenete. Ezeket átfogalmazzuk olyanra, hogy a kimenete egyetlen bit legyen (IGEN / NEM), mert ezen algoritmusok felhasználásával is teljesen jól lehet dolgozni, ugyanakkor könnyebb őket nehézség / bonyolultság szerint osztályozni. Az ilyen 1 bites kimenetű problémákat nevezzük &#039;&#039;&#039;eldöntési problémák&#039;&#039;&#039;nak. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az eldöntési problémákat nehézség / bonyolultság szerint osztályokba soroljuk, ezen osztályok között olyan kapcsolatok vannak mint a halmazoknál; ez a fenti rajzon látszik.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;P osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre ismert olyan algoritmus, ami a bemenet polinomjával megadott idő alatt lefut. Vagyis ha a bemenet &#039;&#039;&#039;n&#039;&#039;&#039;, akkor az algoritmusra azt mondjuk, hogy nagy_ordó(valami), ahol a valami &#039;&#039;&#039;n&#039;&#039;&#039; egy polinomja, például n négyzet, n köb, három n négyzet meg négy meg nyolc n köb, és ilyesmik. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre (jelenleg) nem ismert polinom idejű (P-beli) algoritmus, de igen válasz esetén létezik hatékony tanúsítvány. Vagyis, adott egy nagy csomó bemenet és van egy kérdés. P-idő alatt nem tudjuk megmondani a választ, de ha valaki megsúgja hogy a válasz IGEN, akkor P-időben meg tudjuk mondani, hogy ez hülyeség vagy nem hülyeség. Ha azt súgják meg hogy NEM, akkor fogalmunk sincs, P-időben nem tudjuk eldönteni hogy hülyeség-e vagy sem. (&#039;&#039;Ha így lenne, vagyis igen és nem válasz esetén is P-időben ellenőrizni tudnánk a válasz helyességét, akkor az egész probléma P-beli lenne, hiszen megsúgjuk saját magunknak hogy NEM és ha helyes akkor NEM egyébként igen. Persze ha az IGEN-ről P-időben kiderül hogy hülyeség attól még lehet hogy IGEN, csak éppen nem az a konkrét ami meg lett súgva, hanem egy másik.&#039;&#039;) &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;coNP osztály&#039;&#039;&#039; lényegében ugyanaz mint az NP osztály, csak NEM válaszra. Vagyis (jelenleg) nem ismerünk rá P-beli algoritmust, de ha a válasz NEM, akkor P-időben (hatékonyan) ellenőrizni tudjuk, hogy ez-e a jó válasz vagy sem. Szintén, IGEN válasz esetén semmit sem tudunk mondani P-időben, a fenti okok miatt (ami a zárójelben van). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP nehéz&#039;&#039;&#039; osztályba tartozó eldöntési problémák közül bármelyik legalább olyan nehéz, mint bármelyik másik NP-beli eldöntési probléma. Itt jön képbe a Karp-redukció fogalma. Jó dolog sok NP nehéz problémát ismerni, mert akkor ha találunk egy problémát, akkor ha találunk olyan Karp-redukciót, ami azt mutatja, hogy ez a probléma visszavezethető egy közismert NP nehéz problémára, akkor a mi ismeretlen problémánk is NP nehéz lesz. Ez azért van, mert a Karp-redukció tranzitív művelet, továbbá a Karp-redukcónál használt f függvény P-beli, amit kétszer egymás után alkalmazva is még mindig P-beli lesz ez a dolog (az inputok átalakítása). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP teljes&#039;&#039;&#039; problémák azok, amik NP nehezek és NP-beliek is egyszerre. A fenti dolog ide is érvényes, vagyis jó dolog ha sok nevezetes NP teljes problémát ismerünk, mert ha egy ismeretlen problémához találunk egy olyan Karp-redukciót, ami alapján az ismeretlen problémánkat visszavezethetjük egy közismert NP teljes problémára, akkor az ismeretlen problémánkról is kiderült, hogy NP teljes. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Karp-redukció?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
Van egy olyan gépünk, ami kizárólag B problémát tudja megoldani. Nekünk viszont A problémánk van. Ekkor ha szerencsénk van, akkor fogunk találni egy olyan Karp-redukciót, hogy A&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;B. Ennek persze vannak feltételei. Az A eldöntési probléma inputját át kell alakítani B eldöntési probléma inputjává, és meg is kell adni ezt a függvényt, nevezzük el ezt a függvényt f függvénynek. Feltétel, hogy f függvény polinom időben kiszámolható legyen, és ezt be is kell bizonyítani. Továbbá azt is be kell bizonyítani, hogy amennyiben a normális inputra A azt válaszolná, hogy IGEN, akkor az f(normális input)-ra a B szintén ugyanezt válaszolná (és ugyanezt be kell bizonyítani NEM válaszra is). Magyarul a B dolgot megoldó gépet megerőszakoljuk hogy A problémát is hajlandó legyen megoldani. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebből következik néhány dolog. Például az, hogy B legalább olyan nehéz probléma, mint A. Ha például B NP-teljes, akkor A is az. Ha B NP-nehéz, akkor A is az. Ha B coNP-beli, akkor A is az. Ez miért van? Hát azért, mert polinom időben át lehet alakítani az A problémát B-vé. Ezt indirekten könnyen lehet bizonyítani. Indirekt tegyük fel, hogy annak ellenére hogy B probléma NP-teljes és létezik egy olyan Karp-redukció ami A problmémát átalakítja B-vé, szóval mindezek ellenére A probléma P-beli. Ekkor A problémát egy polinom idejű f függvénnyel simán átalakítjuk B problémává, erről szól ugye a Karp-redukció. Ezek után ha bármikor B problémát akarnánk megoldani, akkor az f-függvény fordítva végrehajtásával a B inputját átalakítjuk A inputjává, megoldjuk az A problémát polinom időben, és kész is. Ez ellentmondás mivel B-ről azt mondtuk hogy NP-teljes. A másik érdekesség, hogy ha például egy NP-teljes vagy NP-nehéz problémáról kiderülne hogy P-beli, akkor az összes NP-beliről kiderülne hogy P-beli, mivel az NP-nehéz definíciója az, hogy legalább olyan nehéz mint bármely tetszőleges NP-beli. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Még egy fontos megjegyzés a Karp-redukcióhoz: ugye A problémát akarjuk megoldani, de csak B-t megoldó gépünk van. Az egyik gyakorlaton elhangzott, és fontos tudni, hogy a B-t megoldó gépet az A eldöntési probléma megoldásához csak EGYSZER használhatjuk. Azért mert a Karp-redukció az ilyen.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;H-út? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;3 színnel színezhetőség problémája? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;A feladat megoldása: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Wtf1sh</name></author>
	</entry>
	<entry>
		<id>https://vik.wiki/index.php?title=Algoritmuselm%C3%A9let_-_Vizsga,_2013.06.06.&amp;diff=167672</id>
		<title>Algoritmuselmélet - Vizsga, 2013.06.06.</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Algoritmuselm%C3%A9let_-_Vizsga,_2013.06.06.&amp;diff=167672"/>
		<updated>2013-06-10T14:26:43Z</updated>

		<summary type="html">&lt;p&gt;Wtf1sh: /* 7. Feladat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==2013.06.06. vizsga megoldásai==&lt;br /&gt;
===1. Feladat (Van megoldás) ===&lt;br /&gt;
Ebben a feladatban a mélységi bejárással kapcsolatos kérdésekre kell válaszolni.&lt;br /&gt;
* &#039;&#039;&#039;(a)&#039;&#039;&#039; Adja meg a keresztél definícióját!&lt;br /&gt;
* &#039;&#039;&#039;(b)&#039;&#039;&#039; A mélységi bejárás során hogyan lehet a mélységi és a befejezési számok alapján felismerni a keresztéleket? &#039;&#039;Vizsgán megjegyzést fűztek hozzá: irányított gráfokra kell gondolni.&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;(c)&#039;&#039;&#039; Bizonyítsa be, hogy irányítatlan gráf mélységi bejárásánál nincsenek keresztélek!&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&#039;&#039;&#039;a)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Tekintsük a G irányított gráf egy mélységi bejárását és a kapott T mélységi feszítő erdőt. Ezen bejárás szerint G egy x → y éle keresztél, ha x és y nem leszármazottjai egymásnak.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
msz - mélységi szám&amp;lt;br&amp;gt;&lt;br /&gt;
bsz - befejezési szám&amp;lt;br&amp;gt;&lt;br /&gt;
Ha &amp;lt;math&amp;gt; (msz[y] &amp;lt; msz[x]) &amp;lt;/math&amp;gt; és &amp;lt;math&amp;gt;(bsz[y] &amp;gt; 0) &amp;lt;/math&amp;gt;, akkor az x →  y egy keresztél.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:keresztel_1.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;c)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
A &#039;&#039;&#039;b)&#039;&#039;&#039; rész alapján könnyen belátható. Ha lenne keresztél, az azt jelentené, hogy van olyan x → y él, amire fennáll, hogy &amp;lt;math&amp;gt; (msz[y] &amp;lt; msz[x]) &amp;lt;/math&amp;gt; és &amp;lt;math&amp;gt;(bsz[y] &amp;gt; 0) &amp;lt;/math&amp;gt;, vagyis y-ban előbb jártunk, mint x-ben, és y-nak van befejezési száma. Ennél fogva nem lehet keresztél, hiszen ha lenne, akkor y-ból eljuthattunk volna még x-be, mielőtt befejeztük volna.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Másképpen mondva:&#039;&#039;&#039; Nem fejezhettük volna be y-t anélkül, hogy ne jártunk volna x-ben.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:keresztel_2.PNG]]&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===2. Feladat (Van megoldás)===&lt;br /&gt;
Milyen műveletek vannak a nyitott címzésű hash-elésnél? Hogyan kell megvalósítani a keresést, ha a nyitott címzésű hashelésnél kvadratikus maradék próbát használunk? &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a nyitott címzésű hash-elés?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
lásd: https://wiki.sch.bme.hu/Hash_t%C3%B6mb &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a kvadratikus maradék próba, nyitott címzésű hash-elésnél?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Nyitott címzésű hash-elés műveletei:&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Új elem beszúrása, elem keresése, elem törlése.&amp;lt;br&amp;gt;&lt;br /&gt;
A törlés speciális jelzéssel történik.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Keresés megvalósítása nyitott címzésű hash-elés esetén kvadratikus maradék próbánál:&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
A kvadratikus maradék próba egy álvéletlen próba, ezért másodlagos csomósodáshoz vezethet.&amp;lt;br&amp;gt;&lt;br /&gt;
Legyen M egy 4k + 3 alakú prímszám, ahol k egy pozitív egész.&amp;lt;br&amp;gt;&lt;br /&gt;
Ekkor a próbasorozat legyen&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; 0,1^2,(-1)^2, 2^2,(-2)^2,..,\left ( \frac{M-1}{2} \right )^{2}, -\left ( \frac{M-1}{2} \right )^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===3. Feladat===&lt;br /&gt;
Adja meg az UNIÓ-HOLVAN adatszerkezet definícióját! (A fákkal való implementálást nem kell leírnia.) Mutassa meg, hogy mikor és hogyan használjuk az UNIÓ és a HOLVAN műveleteket a Kruskal algoritmusban! &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a Kruskal algoritmus?&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;UNIÓ-HOLVAN adatszerkezet definíciója: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mikor és hogyan használjuk az UNIÓ és a HOLVAN műveleteket a Kruskal algoritmusban:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===4. Feladat===&lt;br /&gt;
Pista bácsi fel akar ugrálni egy n hosszú, fekete illetve fehér fokokból álló csigalépcsőn. Legfeljebb k fokot tud ugrani, de arra vigyáznia kell, hogy páros (&amp;gt;=2) sok foknyi ugrás után páratlan sokat és páratlan sok után mindig páros (&amp;gt;=2) sokat ugorjon. Adjon O(nk) lépésszámú algoritmust, amely megmondja, hogy fel tud-e úgy ugrálni a csigalépcső tetejére, hogy csak egyféle színű lépcsőfokot használ. (A lépcső fokai rendszertelenül vannak színezve, a színezést ismerjük.) &lt;br /&gt;
&#039;&#039;Vizsgán megjegyzést fűztek hozzá: a talaj és a legteteje nem színes, csak a lépcsők; csak fölfele (előrefele) ugrál, visszafele nem. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===5. Feladat (Van megoldás)=== &lt;br /&gt;
A hátizsák probléma órán tanult algoritmusát futtattuk egy konkrét inputon, melyben 3 tárgy szerepel. Mi lehetett ez a konkrét input, ha az alábbi táblázat keletkezett?&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 0 &lt;br /&gt;
! 1 &lt;br /&gt;
! 2 &lt;br /&gt;
! 3 &lt;br /&gt;
! 4 &lt;br /&gt;
! 5 &lt;br /&gt;
! 6 &lt;br /&gt;
! 7 &lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
|-&lt;br /&gt;
| 2 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 5 &lt;br /&gt;
| 5 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 15 &lt;br /&gt;
| 15 &lt;br /&gt;
|-&lt;br /&gt;
| 3 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 5 &lt;br /&gt;
| 5 &lt;br /&gt;
| 13 &lt;br /&gt;
| 13 &lt;br /&gt;
| 18 &lt;br /&gt;
| 18 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
Az egyszerűség kedvéért a súly legyen kg, az érték pedig €.&lt;br /&gt;
&lt;br /&gt;
#Az első sor alapján az 1-es csomag értéke €10, súlya 4kg.&lt;br /&gt;
#A második sor alapján a 2-es csomag értéke €5, súlya 2kg.&lt;br /&gt;
#A 3. lépésben 2 lehetőségünk van, a 3. csomag értéke vagy 13-5=€8, vagy 13-0=€13.&lt;br /&gt;
##€8 nem lehet, mert akkor a súlya 2kg lenne, de akkor a [2,3] cellába 8 lenne, nem 5.&lt;br /&gt;
##Így csak a €13 jöhet szóba, súlya pedig 4kg, ami jó megoldás lesz.&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&#039;&#039;Avagy kicsit gépiesebb megoldás:&#039;&#039;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jelölje &amp;lt;math&amp;gt; T[s,cs]&amp;lt;/math&amp;gt; a táblázat &amp;lt;math&amp;gt;[s,cs]&amp;lt;/math&amp;gt; celláját, továbbá &amp;lt;math&amp;gt; V_3&amp;lt;/math&amp;gt; a 3. csomag értékét, &amp;lt;math&amp;gt; S_3&amp;lt;/math&amp;gt; pedig a súlyát.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Tudjuk, hogy &amp;lt;math&amp;gt; T[s,cs]=max\left \{ T[s,cs-1];V_i+T[s-S_i,cs-1] \right \}&amp;lt;/math&amp;gt;, ami ebben az esetben:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; T[4,3]=max\left \{ T[4,2];V_3+T[4-S_3,2] \right \} \rightarrow  13=max\left \{ 10;V_3+T[4-S_3,2] \right \}&amp;lt;/math&amp;gt;, amiből következik, hogy:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; 13=V_3+T[4-S_3,2] \rightarrow V_3 = 13-T[4-S_3,2]\Rightarrow\Rightarrow S_3=4, V_3=13&amp;lt;/math&amp;gt; (Átgondolható, hogy a 3. csomag súlya nem lehet 1,2 vagy 3kg).&lt;br /&gt;
}}&lt;br /&gt;
Tehát végeredményben a megoldás:&lt;br /&gt;
*1-es csomag (€10, 4kg)&lt;br /&gt;
*2-es csomag (€5, 2kg)&lt;br /&gt;
*3-as csomag (€13, 4kg)&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===6. Feladat (Van megoldás)===&lt;br /&gt;
Egy irányítatlan, élsúlyozott gráf az alábbi éllistával adott (zárójelben az élsúlyok):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A:B(1), D(3), E(2); B:A(1), C(3), D(y); D:A(3), C(y), E(x); E:A(2), B(1), D(x).&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;(a)&#039;&#039;&#039; Mi lehet x és y értéke, ha tudjuk, hogy az élsúlyok egész számok, és azt is tudjuk, hogy a B csúcsból indított Prim algoritmus az alábbi sorrendben vette be az értékeket: BE, ED, BA, BC. &#039;&#039;Vizsgán megjegyzést fűztek hozzá: az élsúlyok pozitív egész számok, a pozitív szót kifelejtették véletlenül.&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;(b)&#039;&#039;&#039; Mely éleket és milyen sorrendben választja ki a Kruskal algoritmus? (Ha több megoldás is van, akkor az összeset adja meg!)&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
[[File:2013_06_06_V2_6.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;a)&#039;&#039;&#039; Prim algoritmus - Ugyebár úgy dolgozik, hogy az aktuális fához a vele szomszédos élek közül a legkisebb súlyút veszi be. Prim: BE → ED → BA → BC&lt;br /&gt;
# A fához hozzáadjuk a BE élt.&lt;br /&gt;
# Most az ED élt választottuk. Ez alapján x értéke csak 1 lehet, így &amp;lt;math&amp;gt;x = 1&amp;lt;/math&amp;gt;. (Feladatból kihagyták, hogy pozitív egészekről van szó, amúgy &amp;lt;math&amp;gt;x \le 1&amp;lt;/math&amp;gt; lehetne.)&lt;br /&gt;
# Most az AB élt adjuk hozzá, ez alapján &amp;lt;math&amp;gt;y \ge 1&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Most a BC élt adjuk hozzá, ez alapján &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;, így végül &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b)&#039;&#039;&#039; Kruskal algoritmus - Éleket nagyság szerint sorrendbe rakjuk, és növekvő sorrendben felvesszük a fához az éleket, vigyázva, hogy ne csináljunk kört.&lt;br /&gt;
&lt;br /&gt;
1 súlyú - AB, BE, ED&lt;br /&gt;
&lt;br /&gt;
2 súlyú - AE&lt;br /&gt;
&lt;br /&gt;
3 súlyú - BC, AD, EC (és DC, ha &amp;lt;math&amp;gt;y = 3&amp;lt;/math&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Az összes megoldás:&lt;br /&gt;
&lt;br /&gt;
#Az 1 súlyú éleket &amp;lt;math&amp;gt;3! = 6&amp;lt;/math&amp;gt; féleképpen veheti fel az algoritmus (nem lehet belőlük kört csinálni, így itt nincsen para).&lt;br /&gt;
#Utána megpróbálná felvenni az AE élt, de azzal egy kört kapna, így nem veszi fel. Az AD éllel szintén így járna (~ezeket kéne pirosra színezni, ha olyan lenne a feladat).&lt;br /&gt;
#Maradtak a BC, EC és DC oldalak.&lt;br /&gt;
##Ha &amp;lt;math&amp;gt;y = 3&amp;lt;/math&amp;gt;, akkor ezeket szintén 6 féleképpen veheti fel, tehát összesen 36 féleképpen futhat az algoritmus.&lt;br /&gt;
##Ha &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;, akkor a DC oldal kiesik, a maradék 2 élt 2 féleképpen veheti fel, így 12 féleképpen futhat az algoritmus.}}&lt;br /&gt;
&lt;br /&gt;
===7. Feladat===&lt;br /&gt;
Létezik-e olyan X eldöntési probléma, amire X&amp;lt;big&amp;gt;∉&amp;lt;/big&amp;gt;NP és X&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;SAT egyszerre fennáll? &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Eldöntési probléma osztályok? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:bonyolultsag_elmelet.JPG|390px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;problémák&#039;&#039;&#039;nak lehet több típusú több bemenete, és több típusú több kimenete. Ezeket átfogalmazzuk olyanra, hogy a kimenete egyetlen bit legyen (IGEN / NEM), mert ezen algoritmusok felhasználásával is teljesen jól lehet dolgozni, ugyanakkor könnyebb őket nehézség / bonyolultság szerint osztályozni. Az ilyen 1 bites kimenetű problémákat nevezzük &#039;&#039;&#039;eldöntési problémák&#039;&#039;&#039;nak. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az eldöntési problémákat nehézség / bonyolultság szerint osztályokba soroljuk, ezen osztályok között olyan kapcsolatok vannak mint a halmazoknál; ez a fenti rajzon látszik.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;P osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre ismert olyan algoritmus, ami a bemenet polinomjával megadott idő alatt lefut. Vagyis ha a bemenet &#039;&#039;&#039;n&#039;&#039;&#039;, akkor az algoritmusra azt mondjuk, hogy nagy_ordó(valami), ahol a valami &#039;&#039;&#039;n&#039;&#039;&#039; egy polinomja, például n négyzet, n köb, három n négyzet meg négy meg nyolc n köb, és ilyesmik. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre (jelenleg) nem ismert polinom idejű (P-beli) algoritmus, de igen válasz esetén létezik hatékony tanúsítvány. Vagyis, adott egy nagy csomó bemenet és van egy kérdés. P-idő alatt nem tudjuk megmondani a választ, de ha valaki megsúgja hogy a válasz IGEN, akkor P-időben meg tudjuk mondani, hogy ez hülyeség vagy nem hülyeség. Ha azt súgják meg hogy NEM, akkor fogalmunk sincs, P-időben nem tudjuk eldönteni hogy hülyeség-e vagy sem. (&#039;&#039;Ha így lenne, vagyis igen és nem válasz esetén is P-időben ellenőrizni tudnánk a válasz helyességét, akkor az egész probléma P-beli lenne, hiszen megsúgjuk saját magunknak hogy NEM és ha helyes akkor NEM egyébként igen. Persze ha az IGEN-ről P-időben kiderül hogy hülyeség attól még lehet hogy IGEN, csak éppen nem az a konkrét ami meg lett súgva, hanem egy másik.&#039;&#039;) &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;coNP osztály&#039;&#039;&#039; lényegében ugyanaz mint az NP osztály, csak NEM válaszra. Vagyis (jelenleg) nem ismerünk rá P-beli algoritmust, de ha a válasz NEM, akkor P-időben (hatékonyan) ellenőrizni tudjuk, hogy ez-e a jó válasz vagy sem. Szintén, IGEN válasz esetén semmit sem tudunk mondani P-időben, a fenti okok miatt (ami a zárójelben van). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP nehéz&#039;&#039;&#039; osztályba tartozó eldöntési problémák közül bármelyik legalább olyan nehéz, mint bármelyik másik NP-beli eldöntési probléma. Itt jön képbe a Karp-redukció fogalma. Jó dolog sok NP nehéz problémát ismerni, mert akkor ha találunk egy problémát, akkor ha találunk olyan Karp-redukciót, ami azt mutatja, hogy ez a probléma visszavezethető egy közismert NP nehéz problémára, akkor a mi ismeretlen problémánk is NP nehéz lesz. Ez azért van, mert a Karp-redukció tranzitív művelet, továbbá a Karp-redukcónál használt f függvény P-beli, amit kétszer egymás után alkalmazva is még mindig P-beli lesz ez a dolog (az inputok átalakítása). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP teljes&#039;&#039;&#039; problémák azok, amik NP nehezek és NP-beliek is egyszerre. A fenti dolog ide is érvényes, vagyis jó dolog ha sok nevezetes NP teljes problémát ismerünk, mert ha egy ismeretlen problémához találunk egy olyan Karp-redukciót, ami alapján az ismeretlen problémánkat visszavezethetjük egy közismert NP teljes problémára, akkor az ismeretlen problémánkról is kiderült, hogy NP teljes. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Karp-redukció?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
Van egy olyan gépünk, ami kizárólag B problémát tudja megoldani. Nekünk viszont A problémánk van. Ekkor ha szerencsénk van, akkor fogunk találni egy olyan Karp-redukciót, hogy A&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;B. Ennek persze vannak feltételei. Az A eldöntési probléma inputját át kell alakítani B eldöntési probléma inputjává, és meg is kell adni ezt a függvényt, nevezzük el ezt a függvényt f függvénynek. Feltétel, hogy f függvény polinom időben kiszámolható legyen, és ezt be is kell bizonyítani. Továbbá azt is be kell bizonyítani, hogy amennyiben a normális inputra A azt válaszolná, hogy IGEN, akkor az f(normális input)-ra a B szintén ugyanezt válaszolná (és ugyanezt be kell bizonyítani NEM válaszra is). Magyarul a B dolgot megoldó gépet megerőszakoljuk hogy A problémát is hajlandó legyen megoldani. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebből következik néhány dolog. Például az, hogy B legalább olyan nehéz probléma, mint A. Ha például B NP-teljes, akkor A is az. Ha B NP-nehéz, akkor A is az. Ha B coNP-beli, akkor A is az. Ez miért van? Hát azért, mert polinom időben át lehet alakítani az A problémát B-vé. Ezt indirekten könnyen lehet bizonyítani. Indirekt tegyük fel, hogy annak ellenére hogy B probléma NP-teljes és létezik egy olyan Karp-redukció ami A problmémát átalakítja B-vé, szóval mindezek ellenére A probléma P-beli. Ekkor A problémát egy polinom idejű f függvénnyel simán átalakítjuk B problémává, erről szól ugye a Karp-redukció. Ezek után ha bármikor B problémát akarnánk megoldani, akkor az f-függvény fordítva végrehajtásával a B inputját átalakítjuk A inputjává, megoldjuk az A problémát polinom időben, és kész is. Ez ellentmondás mivel B-ről azt mondtuk hogy NP-teljes. A másik érdekesség, hogy ha például egy NP-teljes vagy NP-nehéz problémáról kiderülne hogy P-beli, akkor az összes NP-beliről kiderülne hogy P-beli, mivel az NP-nehéz definíciója az, hogy legalább olyan nehéz mint bármely tetszőleges NP-beli. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Még egy fontos megjegyzés a Karp-redukcióhoz: ugye A problémát akarjuk megoldani, de csak B-t megoldó gépünk van. Az egyik gyakorlaton elhangzott, és fontos tudni, hogy a B-t megoldó gépet az A eldöntési probléma megoldásához csak EGYSZER használhatjuk. Azért mert a Karp-redukció az ilyen.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;SAT probléma? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
A SAT probléma NP-teljes.&amp;lt;br&amp;gt;&lt;br /&gt;
forrás:http://www.cs.bme.hu/algel/12elo-2012.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;A feladat megoldása: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
Tétel: Ha X ≺ Y és Y ∈ NP,akkor X ∈ NP&lt;br /&gt;
Tétel: A SAT probléma NP teljes, tehát része NP-nek.&amp;lt;br&amp;gt;&lt;br /&gt;
A fentiek alapján, mivel X&amp;lt;big&amp;gt;∉&amp;lt;/big&amp;gt;NP, a kérdéses X probléma nem létezhet.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===8. Feladat===&lt;br /&gt;
P-ben van vagy NP-teljes az alábbi eldöntési probléma:&amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Input:&#039;&#039;&#039; irányítatlan G gráf&amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Kérdés:&#039;&#039;&#039; Igaz-e, hogy G-ben vagy van Hamilton-út vagy G 3 színnel színezhető?&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Eldöntési probléma osztályok? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:bonyolultsag_elmelet.JPG|390px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;problémák&#039;&#039;&#039;nak lehet több típusú több bemenete, és több típusú több kimenete. Ezeket átfogalmazzuk olyanra, hogy a kimenete egyetlen bit legyen (IGEN / NEM), mert ezen algoritmusok felhasználásával is teljesen jól lehet dolgozni, ugyanakkor könnyebb őket nehézség / bonyolultság szerint osztályozni. Az ilyen 1 bites kimenetű problémákat nevezzük &#039;&#039;&#039;eldöntési problémák&#039;&#039;&#039;nak. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az eldöntési problémákat nehézség / bonyolultság szerint osztályokba soroljuk, ezen osztályok között olyan kapcsolatok vannak mint a halmazoknál; ez a fenti rajzon látszik.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;P osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre ismert olyan algoritmus, ami a bemenet polinomjával megadott idő alatt lefut. Vagyis ha a bemenet &#039;&#039;&#039;n&#039;&#039;&#039;, akkor az algoritmusra azt mondjuk, hogy nagy_ordó(valami), ahol a valami &#039;&#039;&#039;n&#039;&#039;&#039; egy polinomja, például n négyzet, n köb, három n négyzet meg négy meg nyolc n köb, és ilyesmik. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre (jelenleg) nem ismert polinom idejű (P-beli) algoritmus, de igen válasz esetén létezik hatékony tanúsítvány. Vagyis, adott egy nagy csomó bemenet és van egy kérdés. P-idő alatt nem tudjuk megmondani a választ, de ha valaki megsúgja hogy a válasz IGEN, akkor P-időben meg tudjuk mondani, hogy ez hülyeség vagy nem hülyeség. Ha azt súgják meg hogy NEM, akkor fogalmunk sincs, P-időben nem tudjuk eldönteni hogy hülyeség-e vagy sem. (&#039;&#039;Ha így lenne, vagyis igen és nem válasz esetén is P-időben ellenőrizni tudnánk a válasz helyességét, akkor az egész probléma P-beli lenne, hiszen megsúgjuk saját magunknak hogy NEM és ha helyes akkor NEM egyébként igen. Persze ha az IGEN-ről P-időben kiderül hogy hülyeség attól még lehet hogy IGEN, csak éppen nem az a konkrét ami meg lett súgva, hanem egy másik.&#039;&#039;) &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;coNP osztály&#039;&#039;&#039; lényegében ugyanaz mint az NP osztály, csak NEM válaszra. Vagyis (jelenleg) nem ismerünk rá P-beli algoritmust, de ha a válasz NEM, akkor P-időben (hatékonyan) ellenőrizni tudjuk, hogy ez-e a jó válasz vagy sem. Szintén, IGEN válasz esetén semmit sem tudunk mondani P-időben, a fenti okok miatt (ami a zárójelben van). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP nehéz&#039;&#039;&#039; osztályba tartozó eldöntési problémák közül bármelyik legalább olyan nehéz, mint bármelyik másik NP-beli eldöntési probléma. Itt jön képbe a Karp-redukció fogalma. Jó dolog sok NP nehéz problémát ismerni, mert akkor ha találunk egy problémát, akkor ha találunk olyan Karp-redukciót, ami azt mutatja, hogy ez a probléma visszavezethető egy közismert NP nehéz problémára, akkor a mi ismeretlen problémánk is NP nehéz lesz. Ez azért van, mert a Karp-redukció tranzitív művelet, továbbá a Karp-redukcónál használt f függvény P-beli, amit kétszer egymás után alkalmazva is még mindig P-beli lesz ez a dolog (az inputok átalakítása). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP teljes&#039;&#039;&#039; problémák azok, amik NP nehezek és NP-beliek is egyszerre. A fenti dolog ide is érvényes, vagyis jó dolog ha sok nevezetes NP teljes problémát ismerünk, mert ha egy ismeretlen problémához találunk egy olyan Karp-redukciót, ami alapján az ismeretlen problémánkat visszavezethetjük egy közismert NP teljes problémára, akkor az ismeretlen problémánkról is kiderült, hogy NP teljes. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Karp-redukció?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
Van egy olyan gépünk, ami kizárólag B problémát tudja megoldani. Nekünk viszont A problémánk van. Ekkor ha szerencsénk van, akkor fogunk találni egy olyan Karp-redukciót, hogy A&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;B. Ennek persze vannak feltételei. Az A eldöntési probléma inputját át kell alakítani B eldöntési probléma inputjává, és meg is kell adni ezt a függvényt, nevezzük el ezt a függvényt f függvénynek. Feltétel, hogy f függvény polinom időben kiszámolható legyen, és ezt be is kell bizonyítani. Továbbá azt is be kell bizonyítani, hogy amennyiben a normális inputra A azt válaszolná, hogy IGEN, akkor az f(normális input)-ra a B szintén ugyanezt válaszolná (és ugyanezt be kell bizonyítani NEM válaszra is). Magyarul a B dolgot megoldó gépet megerőszakoljuk hogy A problémát is hajlandó legyen megoldani. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebből következik néhány dolog. Például az, hogy B legalább olyan nehéz probléma, mint A. Ha például B NP-teljes, akkor A is az. Ha B NP-nehéz, akkor A is az. Ha B coNP-beli, akkor A is az. Ez miért van? Hát azért, mert polinom időben át lehet alakítani az A problémát B-vé. Ezt indirekten könnyen lehet bizonyítani. Indirekt tegyük fel, hogy annak ellenére hogy B probléma NP-teljes és létezik egy olyan Karp-redukció ami A problmémát átalakítja B-vé, szóval mindezek ellenére A probléma P-beli. Ekkor A problémát egy polinom idejű f függvénnyel simán átalakítjuk B problémává, erről szól ugye a Karp-redukció. Ezek után ha bármikor B problémát akarnánk megoldani, akkor az f-függvény fordítva végrehajtásával a B inputját átalakítjuk A inputjává, megoldjuk az A problémát polinom időben, és kész is. Ez ellentmondás mivel B-ről azt mondtuk hogy NP-teljes. A másik érdekesség, hogy ha például egy NP-teljes vagy NP-nehéz problémáról kiderülne hogy P-beli, akkor az összes NP-beliről kiderülne hogy P-beli, mivel az NP-nehéz definíciója az, hogy legalább olyan nehéz mint bármely tetszőleges NP-beli. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Még egy fontos megjegyzés a Karp-redukcióhoz: ugye A problémát akarjuk megoldani, de csak B-t megoldó gépünk van. Az egyik gyakorlaton elhangzott, és fontos tudni, hogy a B-t megoldó gépet az A eldöntési probléma megoldásához csak EGYSZER használhatjuk. Azért mert a Karp-redukció az ilyen.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;H-út? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;3 színnel színezhetőség problémája? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;A feladat megoldása: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Wtf1sh</name></author>
	</entry>
	<entry>
		<id>https://vik.wiki/index.php?title=Algoritmuselm%C3%A9let_-_Vizsga,_2013.06.06.&amp;diff=167671</id>
		<title>Algoritmuselmélet - Vizsga, 2013.06.06.</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Algoritmuselm%C3%A9let_-_Vizsga,_2013.06.06.&amp;diff=167671"/>
		<updated>2013-06-10T14:20:20Z</updated>

		<summary type="html">&lt;p&gt;Wtf1sh: /* 7. Feladat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==2013.06.06. vizsga megoldásai==&lt;br /&gt;
===1. Feladat (Van megoldás) ===&lt;br /&gt;
Ebben a feladatban a mélységi bejárással kapcsolatos kérdésekre kell válaszolni.&lt;br /&gt;
* &#039;&#039;&#039;(a)&#039;&#039;&#039; Adja meg a keresztél definícióját!&lt;br /&gt;
* &#039;&#039;&#039;(b)&#039;&#039;&#039; A mélységi bejárás során hogyan lehet a mélységi és a befejezési számok alapján felismerni a keresztéleket? &#039;&#039;Vizsgán megjegyzést fűztek hozzá: irányított gráfokra kell gondolni.&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;(c)&#039;&#039;&#039; Bizonyítsa be, hogy irányítatlan gráf mélységi bejárásánál nincsenek keresztélek!&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&#039;&#039;&#039;a)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Tekintsük a G irányított gráf egy mélységi bejárását és a kapott T mélységi feszítő erdőt. Ezen bejárás szerint G egy x → y éle keresztél, ha x és y nem leszármazottjai egymásnak.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
msz - mélységi szám&amp;lt;br&amp;gt;&lt;br /&gt;
bsz - befejezési szám&amp;lt;br&amp;gt;&lt;br /&gt;
Ha &amp;lt;math&amp;gt; (msz[y] &amp;lt; msz[x]) &amp;lt;/math&amp;gt; és &amp;lt;math&amp;gt;(bsz[y] &amp;gt; 0) &amp;lt;/math&amp;gt;, akkor az x →  y egy keresztél.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:keresztel_1.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;c)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
A &#039;&#039;&#039;b)&#039;&#039;&#039; rész alapján könnyen belátható. Ha lenne keresztél, az azt jelentené, hogy van olyan x → y él, amire fennáll, hogy &amp;lt;math&amp;gt; (msz[y] &amp;lt; msz[x]) &amp;lt;/math&amp;gt; és &amp;lt;math&amp;gt;(bsz[y] &amp;gt; 0) &amp;lt;/math&amp;gt;, vagyis y-ban előbb jártunk, mint x-ben, és y-nak van befejezési száma. Ennél fogva nem lehet keresztél, hiszen ha lenne, akkor y-ból eljuthattunk volna még x-be, mielőtt befejeztük volna.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Másképpen mondva:&#039;&#039;&#039; Nem fejezhettük volna be y-t anélkül, hogy ne jártunk volna x-ben.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:keresztel_2.PNG]]&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===2. Feladat (Van megoldás)===&lt;br /&gt;
Milyen műveletek vannak a nyitott címzésű hash-elésnél? Hogyan kell megvalósítani a keresést, ha a nyitott címzésű hashelésnél kvadratikus maradék próbát használunk? &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a nyitott címzésű hash-elés?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
lásd: https://wiki.sch.bme.hu/Hash_t%C3%B6mb &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a kvadratikus maradék próba, nyitott címzésű hash-elésnél?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Nyitott címzésű hash-elés műveletei:&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Új elem beszúrása, elem keresése, elem törlése.&amp;lt;br&amp;gt;&lt;br /&gt;
A törlés speciális jelzéssel történik.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Keresés megvalósítása nyitott címzésű hash-elés esetén kvadratikus maradék próbánál:&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
A kvadratikus maradék próba egy álvéletlen próba, ezért másodlagos csomósodáshoz vezethet.&amp;lt;br&amp;gt;&lt;br /&gt;
Legyen M egy 4k + 3 alakú prímszám, ahol k egy pozitív egész.&amp;lt;br&amp;gt;&lt;br /&gt;
Ekkor a próbasorozat legyen&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; 0,1^2,(-1)^2, 2^2,(-2)^2,..,\left ( \frac{M-1}{2} \right )^{2}, -\left ( \frac{M-1}{2} \right )^{2} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===3. Feladat===&lt;br /&gt;
Adja meg az UNIÓ-HOLVAN adatszerkezet definícióját! (A fákkal való implementálást nem kell leírnia.) Mutassa meg, hogy mikor és hogyan használjuk az UNIÓ és a HOLVAN műveleteket a Kruskal algoritmusban! &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a Kruskal algoritmus?&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;UNIÓ-HOLVAN adatszerkezet definíciója: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mikor és hogyan használjuk az UNIÓ és a HOLVAN műveleteket a Kruskal algoritmusban:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===4. Feladat===&lt;br /&gt;
Pista bácsi fel akar ugrálni egy n hosszú, fekete illetve fehér fokokból álló csigalépcsőn. Legfeljebb k fokot tud ugrani, de arra vigyáznia kell, hogy páros (&amp;gt;=2) sok foknyi ugrás után páratlan sokat és páratlan sok után mindig páros (&amp;gt;=2) sokat ugorjon. Adjon O(nk) lépésszámú algoritmust, amely megmondja, hogy fel tud-e úgy ugrálni a csigalépcső tetejére, hogy csak egyféle színű lépcsőfokot használ. (A lépcső fokai rendszertelenül vannak színezve, a színezést ismerjük.) &lt;br /&gt;
&#039;&#039;Vizsgán megjegyzést fűztek hozzá: a talaj és a legteteje nem színes, csak a lépcsők; csak fölfele (előrefele) ugrál, visszafele nem. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===5. Feladat (Van megoldás)=== &lt;br /&gt;
A hátizsák probléma órán tanult algoritmusát futtattuk egy konkrét inputon, melyben 3 tárgy szerepel. Mi lehetett ez a konkrét input, ha az alábbi táblázat keletkezett?&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 0 &lt;br /&gt;
! 1 &lt;br /&gt;
! 2 &lt;br /&gt;
! 3 &lt;br /&gt;
! 4 &lt;br /&gt;
! 5 &lt;br /&gt;
! 6 &lt;br /&gt;
! 7 &lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
|-&lt;br /&gt;
| 2 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 5 &lt;br /&gt;
| 5 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 15 &lt;br /&gt;
| 15 &lt;br /&gt;
|-&lt;br /&gt;
| 3 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 5 &lt;br /&gt;
| 5 &lt;br /&gt;
| 13 &lt;br /&gt;
| 13 &lt;br /&gt;
| 18 &lt;br /&gt;
| 18 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
Az egyszerűség kedvéért a súly legyen kg, az érték pedig €.&lt;br /&gt;
&lt;br /&gt;
#Az első sor alapján az 1-es csomag értéke €10, súlya 4kg.&lt;br /&gt;
#A második sor alapján a 2-es csomag értéke €5, súlya 2kg.&lt;br /&gt;
#A 3. lépésben 2 lehetőségünk van, a 3. csomag értéke vagy 13-5=€8, vagy 13-0=€13.&lt;br /&gt;
##€8 nem lehet, mert akkor a súlya 2kg lenne, de akkor a [2,3] cellába 8 lenne, nem 5.&lt;br /&gt;
##Így csak a €13 jöhet szóba, súlya pedig 4kg, ami jó megoldás lesz.&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&#039;&#039;Avagy kicsit gépiesebb megoldás:&#039;&#039;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jelölje &amp;lt;math&amp;gt; T[s,cs]&amp;lt;/math&amp;gt; a táblázat &amp;lt;math&amp;gt;[s,cs]&amp;lt;/math&amp;gt; celláját, továbbá &amp;lt;math&amp;gt; V_3&amp;lt;/math&amp;gt; a 3. csomag értékét, &amp;lt;math&amp;gt; S_3&amp;lt;/math&amp;gt; pedig a súlyát.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Tudjuk, hogy &amp;lt;math&amp;gt; T[s,cs]=max\left \{ T[s,cs-1];V_i+T[s-S_i,cs-1] \right \}&amp;lt;/math&amp;gt;, ami ebben az esetben:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; T[4,3]=max\left \{ T[4,2];V_3+T[4-S_3,2] \right \} \rightarrow  13=max\left \{ 10;V_3+T[4-S_3,2] \right \}&amp;lt;/math&amp;gt;, amiből következik, hogy:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; 13=V_3+T[4-S_3,2] \rightarrow V_3 = 13-T[4-S_3,2]\Rightarrow\Rightarrow S_3=4, V_3=13&amp;lt;/math&amp;gt; (Átgondolható, hogy a 3. csomag súlya nem lehet 1,2 vagy 3kg).&lt;br /&gt;
}}&lt;br /&gt;
Tehát végeredményben a megoldás:&lt;br /&gt;
*1-es csomag (€10, 4kg)&lt;br /&gt;
*2-es csomag (€5, 2kg)&lt;br /&gt;
*3-as csomag (€13, 4kg)&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===6. Feladat (Van megoldás)===&lt;br /&gt;
Egy irányítatlan, élsúlyozott gráf az alábbi éllistával adott (zárójelben az élsúlyok):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A:B(1), D(3), E(2); B:A(1), C(3), D(y); D:A(3), C(y), E(x); E:A(2), B(1), D(x).&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;(a)&#039;&#039;&#039; Mi lehet x és y értéke, ha tudjuk, hogy az élsúlyok egész számok, és azt is tudjuk, hogy a B csúcsból indított Prim algoritmus az alábbi sorrendben vette be az értékeket: BE, ED, BA, BC. &#039;&#039;Vizsgán megjegyzést fűztek hozzá: az élsúlyok pozitív egész számok, a pozitív szót kifelejtették véletlenül.&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;(b)&#039;&#039;&#039; Mely éleket és milyen sorrendben választja ki a Kruskal algoritmus? (Ha több megoldás is van, akkor az összeset adja meg!)&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
[[File:2013_06_06_V2_6.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;a)&#039;&#039;&#039; Prim algoritmus - Ugyebár úgy dolgozik, hogy az aktuális fához a vele szomszédos élek közül a legkisebb súlyút veszi be. Prim: BE → ED → BA → BC&lt;br /&gt;
# A fához hozzáadjuk a BE élt.&lt;br /&gt;
# Most az ED élt választottuk. Ez alapján x értéke csak 1 lehet, így &amp;lt;math&amp;gt;x = 1&amp;lt;/math&amp;gt;. (Feladatból kihagyták, hogy pozitív egészekről van szó, amúgy &amp;lt;math&amp;gt;x \le 1&amp;lt;/math&amp;gt; lehetne.)&lt;br /&gt;
# Most az AB élt adjuk hozzá, ez alapján &amp;lt;math&amp;gt;y \ge 1&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Most a BC élt adjuk hozzá, ez alapján &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;, így végül &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b)&#039;&#039;&#039; Kruskal algoritmus - Éleket nagyság szerint sorrendbe rakjuk, és növekvő sorrendben felvesszük a fához az éleket, vigyázva, hogy ne csináljunk kört.&lt;br /&gt;
&lt;br /&gt;
1 súlyú - AB, BE, ED&lt;br /&gt;
&lt;br /&gt;
2 súlyú - AE&lt;br /&gt;
&lt;br /&gt;
3 súlyú - BC, AD, EC (és DC, ha &amp;lt;math&amp;gt;y = 3&amp;lt;/math&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Az összes megoldás:&lt;br /&gt;
&lt;br /&gt;
#Az 1 súlyú éleket &amp;lt;math&amp;gt;3! = 6&amp;lt;/math&amp;gt; féleképpen veheti fel az algoritmus (nem lehet belőlük kört csinálni, így itt nincsen para).&lt;br /&gt;
#Utána megpróbálná felvenni az AE élt, de azzal egy kört kapna, így nem veszi fel. Az AD éllel szintén így járna (~ezeket kéne pirosra színezni, ha olyan lenne a feladat).&lt;br /&gt;
#Maradtak a BC, EC és DC oldalak.&lt;br /&gt;
##Ha &amp;lt;math&amp;gt;y = 3&amp;lt;/math&amp;gt;, akkor ezeket szintén 6 féleképpen veheti fel, tehát összesen 36 féleképpen futhat az algoritmus.&lt;br /&gt;
##Ha &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;, akkor a DC oldal kiesik, a maradék 2 élt 2 féleképpen veheti fel, így 12 féleképpen futhat az algoritmus.}}&lt;br /&gt;
&lt;br /&gt;
===7. Feladat===&lt;br /&gt;
Létezik-e olyan X eldöntési probléma, amire X&amp;lt;big&amp;gt;∉&amp;lt;/big&amp;gt;NP és X&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;SAT egyszerre fennáll? &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Eldöntési probléma osztályok? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:bonyolultsag_elmelet.JPG|390px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;problémák&#039;&#039;&#039;nak lehet több típusú több bemenete, és több típusú több kimenete. Ezeket átfogalmazzuk olyanra, hogy a kimenete egyetlen bit legyen (IGEN / NEM), mert ezen algoritmusok felhasználásával is teljesen jól lehet dolgozni, ugyanakkor könnyebb őket nehézség / bonyolultság szerint osztályozni. Az ilyen 1 bites kimenetű problémákat nevezzük &#039;&#039;&#039;eldöntési problémák&#039;&#039;&#039;nak. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az eldöntési problémákat nehézség / bonyolultság szerint osztályokba soroljuk, ezen osztályok között olyan kapcsolatok vannak mint a halmazoknál; ez a fenti rajzon látszik.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;P osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre ismert olyan algoritmus, ami a bemenet polinomjával megadott idő alatt lefut. Vagyis ha a bemenet &#039;&#039;&#039;n&#039;&#039;&#039;, akkor az algoritmusra azt mondjuk, hogy nagy_ordó(valami), ahol a valami &#039;&#039;&#039;n&#039;&#039;&#039; egy polinomja, például n négyzet, n köb, három n négyzet meg négy meg nyolc n köb, és ilyesmik. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre (jelenleg) nem ismert polinom idejű (P-beli) algoritmus, de igen válasz esetén létezik hatékony tanúsítvány. Vagyis, adott egy nagy csomó bemenet és van egy kérdés. P-idő alatt nem tudjuk megmondani a választ, de ha valaki megsúgja hogy a válasz IGEN, akkor P-időben meg tudjuk mondani, hogy ez hülyeség vagy nem hülyeség. Ha azt súgják meg hogy NEM, akkor fogalmunk sincs, P-időben nem tudjuk eldönteni hogy hülyeség-e vagy sem. (&#039;&#039;Ha így lenne, vagyis igen és nem válasz esetén is P-időben ellenőrizni tudnánk a válasz helyességét, akkor az egész probléma P-beli lenne, hiszen megsúgjuk saját magunknak hogy NEM és ha helyes akkor NEM egyébként igen. Persze ha az IGEN-ről P-időben kiderül hogy hülyeség attól még lehet hogy IGEN, csak éppen nem az a konkrét ami meg lett súgva, hanem egy másik.&#039;&#039;) &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;coNP osztály&#039;&#039;&#039; lényegében ugyanaz mint az NP osztály, csak NEM válaszra. Vagyis (jelenleg) nem ismerünk rá P-beli algoritmust, de ha a válasz NEM, akkor P-időben (hatékonyan) ellenőrizni tudjuk, hogy ez-e a jó válasz vagy sem. Szintén, IGEN válasz esetén semmit sem tudunk mondani P-időben, a fenti okok miatt (ami a zárójelben van). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP nehéz&#039;&#039;&#039; osztályba tartozó eldöntési problémák közül bármelyik legalább olyan nehéz, mint bármelyik másik NP-beli eldöntési probléma. Itt jön képbe a Karp-redukció fogalma. Jó dolog sok NP nehéz problémát ismerni, mert akkor ha találunk egy problémát, akkor ha találunk olyan Karp-redukciót, ami azt mutatja, hogy ez a probléma visszavezethető egy közismert NP nehéz problémára, akkor a mi ismeretlen problémánk is NP nehéz lesz. Ez azért van, mert a Karp-redukció tranzitív művelet, továbbá a Karp-redukcónál használt f függvény P-beli, amit kétszer egymás után alkalmazva is még mindig P-beli lesz ez a dolog (az inputok átalakítása). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP teljes&#039;&#039;&#039; problémák azok, amik NP nehezek és NP-beliek is egyszerre. A fenti dolog ide is érvényes, vagyis jó dolog ha sok nevezetes NP teljes problémát ismerünk, mert ha egy ismeretlen problémához találunk egy olyan Karp-redukciót, ami alapján az ismeretlen problémánkat visszavezethetjük egy közismert NP teljes problémára, akkor az ismeretlen problémánkról is kiderült, hogy NP teljes. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Karp-redukció?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
Van egy olyan gépünk, ami kizárólag B problémát tudja megoldani. Nekünk viszont A problémánk van. Ekkor ha szerencsénk van, akkor fogunk találni egy olyan Karp-redukciót, hogy A&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;B. Ennek persze vannak feltételei. Az A eldöntési probléma inputját át kell alakítani B eldöntési probléma inputjává, és meg is kell adni ezt a függvényt, nevezzük el ezt a függvényt f függvénynek. Feltétel, hogy f függvény polinom időben kiszámolható legyen, és ezt be is kell bizonyítani. Továbbá azt is be kell bizonyítani, hogy amennyiben a normális inputra A azt válaszolná, hogy IGEN, akkor az f(normális input)-ra a B szintén ugyanezt válaszolná (és ugyanezt be kell bizonyítani NEM válaszra is). Magyarul a B dolgot megoldó gépet megerőszakoljuk hogy A problémát is hajlandó legyen megoldani. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebből következik néhány dolog. Például az, hogy B legalább olyan nehéz probléma, mint A. Ha például B NP-teljes, akkor A is az. Ha B NP-nehéz, akkor A is az. Ha B coNP-beli, akkor A is az. Ez miért van? Hát azért, mert polinom időben át lehet alakítani az A problémát B-vé. Ezt indirekten könnyen lehet bizonyítani. Indirekt tegyük fel, hogy annak ellenére hogy B probléma NP-teljes és létezik egy olyan Karp-redukció ami A problmémát átalakítja B-vé, szóval mindezek ellenére A probléma P-beli. Ekkor A problémát egy polinom idejű f függvénnyel simán átalakítjuk B problémává, erről szól ugye a Karp-redukció. Ezek után ha bármikor B problémát akarnánk megoldani, akkor az f-függvény fordítva végrehajtásával a B inputját átalakítjuk A inputjává, megoldjuk az A problémát polinom időben, és kész is. Ez ellentmondás mivel B-ről azt mondtuk hogy NP-teljes. A másik érdekesség, hogy ha például egy NP-teljes vagy NP-nehéz problémáról kiderülne hogy P-beli, akkor az összes NP-beliről kiderülne hogy P-beli, mivel az NP-nehéz definíciója az, hogy legalább olyan nehéz mint bármely tetszőleges NP-beli. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Még egy fontos megjegyzés a Karp-redukcióhoz: ugye A problémát akarjuk megoldani, de csak B-t megoldó gépünk van. Az egyik gyakorlaton elhangzott, és fontos tudni, hogy a B-t megoldó gépet az A eldöntési probléma megoldásához csak EGYSZER használhatjuk. Azért mert a Karp-redukció az ilyen.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;SAT probléma? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
A SAT probléma NP-teljes.&amp;lt;br&amp;gt;&lt;br /&gt;
forrás:http://www.cs.bme.hu/algel/12elo-2012.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;A feladat megoldása: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
Tétel: Ha X -&amp;lt; Y és Y NP beli,akkor X is NP (-&amp;lt; a Karp redukciót jelenti) &amp;lt;br&amp;gt;&lt;br /&gt;
Tétel: A SAT probléma NP teljes, tehát része NP-nek.&amp;lt;br&amp;gt;&lt;br /&gt;
A fentiek alapján, mivel X&amp;lt;big&amp;gt;∉&amp;lt;/big&amp;gt;NP, a kérdéses X probléma nem létezhet.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===8. Feladat===&lt;br /&gt;
P-ben van vagy NP-teljes az alábbi eldöntési probléma:&amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Input:&#039;&#039;&#039; irányítatlan G gráf&amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Kérdés:&#039;&#039;&#039; Igaz-e, hogy G-ben vagy van Hamilton-út vagy G 3 színnel színezhető?&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Eldöntési probléma osztályok? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:bonyolultsag_elmelet.JPG|390px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;problémák&#039;&#039;&#039;nak lehet több típusú több bemenete, és több típusú több kimenete. Ezeket átfogalmazzuk olyanra, hogy a kimenete egyetlen bit legyen (IGEN / NEM), mert ezen algoritmusok felhasználásával is teljesen jól lehet dolgozni, ugyanakkor könnyebb őket nehézség / bonyolultság szerint osztályozni. Az ilyen 1 bites kimenetű problémákat nevezzük &#039;&#039;&#039;eldöntési problémák&#039;&#039;&#039;nak. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az eldöntési problémákat nehézség / bonyolultság szerint osztályokba soroljuk, ezen osztályok között olyan kapcsolatok vannak mint a halmazoknál; ez a fenti rajzon látszik.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;P osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre ismert olyan algoritmus, ami a bemenet polinomjával megadott idő alatt lefut. Vagyis ha a bemenet &#039;&#039;&#039;n&#039;&#039;&#039;, akkor az algoritmusra azt mondjuk, hogy nagy_ordó(valami), ahol a valami &#039;&#039;&#039;n&#039;&#039;&#039; egy polinomja, például n négyzet, n köb, három n négyzet meg négy meg nyolc n köb, és ilyesmik. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre (jelenleg) nem ismert polinom idejű (P-beli) algoritmus, de igen válasz esetén létezik hatékony tanúsítvány. Vagyis, adott egy nagy csomó bemenet és van egy kérdés. P-idő alatt nem tudjuk megmondani a választ, de ha valaki megsúgja hogy a válasz IGEN, akkor P-időben meg tudjuk mondani, hogy ez hülyeség vagy nem hülyeség. Ha azt súgják meg hogy NEM, akkor fogalmunk sincs, P-időben nem tudjuk eldönteni hogy hülyeség-e vagy sem. (&#039;&#039;Ha így lenne, vagyis igen és nem válasz esetén is P-időben ellenőrizni tudnánk a válasz helyességét, akkor az egész probléma P-beli lenne, hiszen megsúgjuk saját magunknak hogy NEM és ha helyes akkor NEM egyébként igen. Persze ha az IGEN-ről P-időben kiderül hogy hülyeség attól még lehet hogy IGEN, csak éppen nem az a konkrét ami meg lett súgva, hanem egy másik.&#039;&#039;) &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;coNP osztály&#039;&#039;&#039; lényegében ugyanaz mint az NP osztály, csak NEM válaszra. Vagyis (jelenleg) nem ismerünk rá P-beli algoritmust, de ha a válasz NEM, akkor P-időben (hatékonyan) ellenőrizni tudjuk, hogy ez-e a jó válasz vagy sem. Szintén, IGEN válasz esetén semmit sem tudunk mondani P-időben, a fenti okok miatt (ami a zárójelben van). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP nehéz&#039;&#039;&#039; osztályba tartozó eldöntési problémák közül bármelyik legalább olyan nehéz, mint bármelyik másik NP-beli eldöntési probléma. Itt jön képbe a Karp-redukció fogalma. Jó dolog sok NP nehéz problémát ismerni, mert akkor ha találunk egy problémát, akkor ha találunk olyan Karp-redukciót, ami azt mutatja, hogy ez a probléma visszavezethető egy közismert NP nehéz problémára, akkor a mi ismeretlen problémánk is NP nehéz lesz. Ez azért van, mert a Karp-redukció tranzitív művelet, továbbá a Karp-redukcónál használt f függvény P-beli, amit kétszer egymás után alkalmazva is még mindig P-beli lesz ez a dolog (az inputok átalakítása). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP teljes&#039;&#039;&#039; problémák azok, amik NP nehezek és NP-beliek is egyszerre. A fenti dolog ide is érvényes, vagyis jó dolog ha sok nevezetes NP teljes problémát ismerünk, mert ha egy ismeretlen problémához találunk egy olyan Karp-redukciót, ami alapján az ismeretlen problémánkat visszavezethetjük egy közismert NP teljes problémára, akkor az ismeretlen problémánkról is kiderült, hogy NP teljes. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Karp-redukció?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
Van egy olyan gépünk, ami kizárólag B problémát tudja megoldani. Nekünk viszont A problémánk van. Ekkor ha szerencsénk van, akkor fogunk találni egy olyan Karp-redukciót, hogy A&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;B. Ennek persze vannak feltételei. Az A eldöntési probléma inputját át kell alakítani B eldöntési probléma inputjává, és meg is kell adni ezt a függvényt, nevezzük el ezt a függvényt f függvénynek. Feltétel, hogy f függvény polinom időben kiszámolható legyen, és ezt be is kell bizonyítani. Továbbá azt is be kell bizonyítani, hogy amennyiben a normális inputra A azt válaszolná, hogy IGEN, akkor az f(normális input)-ra a B szintén ugyanezt válaszolná (és ugyanezt be kell bizonyítani NEM válaszra is). Magyarul a B dolgot megoldó gépet megerőszakoljuk hogy A problémát is hajlandó legyen megoldani. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebből következik néhány dolog. Például az, hogy B legalább olyan nehéz probléma, mint A. Ha például B NP-teljes, akkor A is az. Ha B NP-nehéz, akkor A is az. Ha B coNP-beli, akkor A is az. Ez miért van? Hát azért, mert polinom időben át lehet alakítani az A problémát B-vé. Ezt indirekten könnyen lehet bizonyítani. Indirekt tegyük fel, hogy annak ellenére hogy B probléma NP-teljes és létezik egy olyan Karp-redukció ami A problmémát átalakítja B-vé, szóval mindezek ellenére A probléma P-beli. Ekkor A problémát egy polinom idejű f függvénnyel simán átalakítjuk B problémává, erről szól ugye a Karp-redukció. Ezek után ha bármikor B problémát akarnánk megoldani, akkor az f-függvény fordítva végrehajtásával a B inputját átalakítjuk A inputjává, megoldjuk az A problémát polinom időben, és kész is. Ez ellentmondás mivel B-ről azt mondtuk hogy NP-teljes. A másik érdekesség, hogy ha például egy NP-teljes vagy NP-nehéz problémáról kiderülne hogy P-beli, akkor az összes NP-beliről kiderülne hogy P-beli, mivel az NP-nehéz definíciója az, hogy legalább olyan nehéz mint bármely tetszőleges NP-beli. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Még egy fontos megjegyzés a Karp-redukcióhoz: ugye A problémát akarjuk megoldani, de csak B-t megoldó gépünk van. Az egyik gyakorlaton elhangzott, és fontos tudni, hogy a B-t megoldó gépet az A eldöntési probléma megoldásához csak EGYSZER használhatjuk. Azért mert a Karp-redukció az ilyen.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;H-út? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;3 színnel színezhetőség problémája? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;A feladat megoldása: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Wtf1sh</name></author>
	</entry>
	<entry>
		<id>https://vik.wiki/index.php?title=Algoritmuselm%C3%A9let_-_Vizsga,_2013.06.06.&amp;diff=167665</id>
		<title>Algoritmuselmélet - Vizsga, 2013.06.06.</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Algoritmuselm%C3%A9let_-_Vizsga,_2013.06.06.&amp;diff=167665"/>
		<updated>2013-06-10T09:02:04Z</updated>

		<summary type="html">&lt;p&gt;Wtf1sh: /* 2. Feladat(Megoldva) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==2013.06.06. vizsga megoldásai==&lt;br /&gt;
===1. Feladat (Van megoldás) ===&lt;br /&gt;
Ebben a feladatban a mélységi bejárással kapcsolatos kérdésekre kell válaszolni.&lt;br /&gt;
* &#039;&#039;&#039;(a)&#039;&#039;&#039; Adja meg a keresztél definícióját!&lt;br /&gt;
* &#039;&#039;&#039;(b)&#039;&#039;&#039; A mélységi bejárás során hogyan lehet a mélységi és a befejezési számok alapján felismerni a keresztéleket? &#039;&#039;Vizsgán megjegyzést fűztek hozzá: irányított gráfokra kell gondolni.&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;(c)&#039;&#039;&#039; Bizonyítsa be, hogy irányítatlan gráf mélységi bejárásánál nincsenek keresztélek!&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&#039;&#039;&#039;a)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Tekintsük a G irányított gráf egy mélységi bejárását és a kapott T mélységi feszítő erdőt. Ezen bejárás szerint G egy x → y éle keresztél, ha x és y nem leszármazottjai egymásnak.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
msz - mélységi szám&amp;lt;br&amp;gt;&lt;br /&gt;
bsz - befejezési szám&amp;lt;br&amp;gt;&lt;br /&gt;
Ha &amp;lt;math&amp;gt; (msz[y] &amp;lt; msz[x]) &amp;lt;/math&amp;gt; és &amp;lt;math&amp;gt;(bsz[y] &amp;gt; 0) &amp;lt;/math&amp;gt;, akkor az x →  y egy keresztél.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:keresztel_1.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;c)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
A &#039;&#039;&#039;b)&#039;&#039;&#039; rész alapján könnyen belátható. Ha lenne keresztél, az azt jelentené, hogy van olyan x → y él, amire fennáll, hogy &amp;lt;math&amp;gt; (msz[y] &amp;lt; msz[x]) &amp;lt;/math&amp;gt; és &amp;lt;math&amp;gt;(bsz[y] &amp;gt; 0) &amp;lt;/math&amp;gt;, vagyis y-ban előbb jártunk, mint x-ben, és y-nak van befejezési száma. Ennél fogva nem lehet keresztél, hiszen ha lenne, akkor y-ból eljuthattunk volna még x-be, mielőtt befejeztük volna.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Másképpen mondva:&#039;&#039;&#039; Nem fejezhettük volna be y-t anélkül, hogy ne jártunk volna x-ben.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:keresztel_2.PNG]]&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===2. Feladat(Van megoldás)===&lt;br /&gt;
Milyen műveletek vannak a nyitott címzésű hash-elésnél? Hogyan kell megvalósítani a keresést, ha a nyitott címzésű hashelésnél kvadratikus maradék próbát használunk? &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a nyitott címzésű hash-elés?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
lásd: https://wiki.sch.bme.hu/Hash_t%C3%B6mb &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a kvadratikus maradék próba, nyitott címzésű hash-elésnél?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Nyitott címzésű hash-elés műveletei:&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Új elem beszúrása, elem keresése, elem törlése.&amp;lt;br&amp;gt;&lt;br /&gt;
A törlés speciális jelzéssel történik.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Keresés megvalósítása nyitott címzésű hash-elés esetén kvadratikus maradék próbánál:&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
A kvadratikus maradék próba egy álvéletlen próba, ezért másodlagos csomósodáshoz vezethet.&amp;lt;br&amp;gt;&lt;br /&gt;
Legyen M egy 4k + 3 alakú prímszám, ahol k egy egész.&amp;lt;br&amp;gt;&lt;br /&gt;
Ekkor a próbasorozat legyen&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; 0,1^2,(-1)^2, 2^2,(-2)^2,..,((M-1)/2)^2,-((M-1)/2)^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===3. Feladat===&lt;br /&gt;
Adja meg az UNIÓ-HOLVAN adatszerkezet definícióját! (A fákkal való implementálást nem kell leírnia.) Mutassa meg, hogy mikor és hogyan használjuk az UNIÓ és a HOLVAN műveleteket a Kruskal algoritmusban! &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a Kruskal algoritmus?&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;UNIÓ-HOLVAN adatszerkezet definíciója: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mikor és hogyan használjuk az UNIÓ és a HOLVAN műveleteket a Kruskal algoritmusban:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===4. Feladat===&lt;br /&gt;
Pista bácsi fel akar ugrálni egy n hosszú, fekete illetve fehér fokokból álló csigalépcsőn. Legfeljebb k fokot tud ugrani, de arra vigyáznia kell, hogy páros (&amp;gt;=2) sok foknyi ugrás után páratlan sokat és páratlan sok után mindig páros (&amp;gt;=2) sokat ugorjon. Adjon O(nk) lépésszámú algoritmust, amely megmondja, hogy fel tud-e úgy ugrálni a csigalépcső tetejére, hogy csak egyféle színű lépcsőfokot használ. (A lépcső fokai rendszertelenül vannak színezve, a színezést ismerjük.) &lt;br /&gt;
&#039;&#039;Vizsgán megjegyzést fűztek hozzá: a talaj és a legteteje nem színes, csak a lépcsők; csak fölfele (előrefele) ugrál, visszafele nem. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===5. Feladat (Van megoldás)=== &lt;br /&gt;
A hátizsák probléma órán tanult algoritmusát futtattuk egy konkrét inputon, melyben 3 tárgy szerepel. Mi lehetett ez a konkrét input, ha az alábbi táblázat keletkezett?&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 0 &lt;br /&gt;
! 1 &lt;br /&gt;
! 2 &lt;br /&gt;
! 3 &lt;br /&gt;
! 4 &lt;br /&gt;
! 5 &lt;br /&gt;
! 6 &lt;br /&gt;
! 7 &lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
|-&lt;br /&gt;
| 2 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 5 &lt;br /&gt;
| 5 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 15 &lt;br /&gt;
| 15 &lt;br /&gt;
|-&lt;br /&gt;
| 3 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 5 &lt;br /&gt;
| 5 &lt;br /&gt;
| 13 &lt;br /&gt;
| 13 &lt;br /&gt;
| 18 &lt;br /&gt;
| 18 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
Az egyszerűség kedvéért a súly legyen kg, az érték pedig €.&lt;br /&gt;
&lt;br /&gt;
#Az első sor alapján az 1-es csomag értéke €10, súlya 4kg.&lt;br /&gt;
#A második sor alapján a 2-es csomag értéke €5, súlya 2kg.&lt;br /&gt;
#A 3. lépésben 2 lehetőségünk van, a 3. csomag értéke vagy 13-5=€8, vagy 13-0=€13.&lt;br /&gt;
##€8 nem lehet, mert akkor a súlya 2kg lenne, de akkor a [2,3] cellába 8 lenne, nem 5.&lt;br /&gt;
##Így csak a €13 jöhet szóba, súlya pedig 4kg, ami jó megoldás lesz.&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&#039;&#039;Avagy kicsit gépiesebb megoldás:&#039;&#039;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jelölje &amp;lt;math&amp;gt; T[s,cs]&amp;lt;/math&amp;gt; a táblázat &amp;lt;math&amp;gt;[s,cs]&amp;lt;/math&amp;gt; celláját, továbbá &amp;lt;math&amp;gt; V_3&amp;lt;/math&amp;gt; a 3. csomag értékét, &amp;lt;math&amp;gt; S_3&amp;lt;/math&amp;gt; pedig a súlyát.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Tudjuk, hogy &amp;lt;math&amp;gt; T[s,cs]=max\left \{ T[s,cs-1];V_i+T[s-S_i,cs-1] \right \}&amp;lt;/math&amp;gt;, ami ebben az esetben:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; T[4,3]=max\left \{ T[4,2];V_3+T[4-S_3,2] \right \} \rightarrow  13=max\left \{ 10;V_3+T[4-S_3,2] \right \}&amp;lt;/math&amp;gt;, amiből következik, hogy:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; 13=V_3+T[4-S_3,2] \rightarrow V_3 = 13-T[4-S_3,2]\Rightarrow\Rightarrow S_3=4, V_3=13&amp;lt;/math&amp;gt; (Átgondolható, hogy a 3. csomag súlya nem lehet 1,2 vagy 3kg).&lt;br /&gt;
}}&lt;br /&gt;
Tehát végeredményben a megoldás:&lt;br /&gt;
*1-es csomag (€10, 4kg)&lt;br /&gt;
*2-es csomag (€5, 2kg)&lt;br /&gt;
*3-as csomag (€13, 4kg)&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===6. Feladat (Van megoldás)===&lt;br /&gt;
Egy irányítatlan, élsúlyozott gráf az alábbi éllistával adott (zárójelben az élsúlyok):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A:B(1), D(3), E(2); B:A(1), C(3), D(y); D:A(3), C(y), E(x); E:A(2), B(1), D(x).&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;(a)&#039;&#039;&#039; Mi lehet x és y értéke, ha tudjuk, hogy az élsúlyok egész számok, és azt is tudjuk, hogy a B csúcsból indított Prim algoritmus az alábbi sorrendben vette be az értékeket: BE, ED, BA, BC. &#039;&#039;Vizsgán megjegyzést fűztek hozzá: az élsúlyok pozitív egész számok, a pozitív szót kifelejtették véletlenül.&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;(b)&#039;&#039;&#039; Mely éleket és milyen sorrendben választja ki a Kruskal algoritmus? (Ha több megoldás is van, akkor az összeset adja meg!)&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
[[File:2013_06_06_V2_6.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;a)&#039;&#039;&#039; Prim algoritmus - Ugyebár úgy dolgozik, hogy az aktuális fához a vele szomszédos élek közül a legkisebb súlyút veszi be. Prim: BE → ED → BA → BC&lt;br /&gt;
# A fához hozzáadjuk a BE élt.&lt;br /&gt;
# Most az ED élt választottuk. Ez alapján x értéke csak 1 lehet, így &amp;lt;math&amp;gt;x = 1&amp;lt;/math&amp;gt;. (Feladatból kihagyták, hogy pozitív egészekről van szó, amúgy &amp;lt;math&amp;gt;x \le 1&amp;lt;/math&amp;gt; lehetne.)&lt;br /&gt;
# Most az AB élt adjuk hozzá, ez alapján &amp;lt;math&amp;gt;y \ge 1&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Most a BC élt adjuk hozzá, ez alapján &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;, így végül &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b)&#039;&#039;&#039; Kruskal algoritmus - Éleket nagyság szerint sorrendbe rakjuk, és növekvő sorrendben felvesszük a fához az éleket, vigyázva, hogy ne csináljunk kört.&lt;br /&gt;
&lt;br /&gt;
1 súlyú - AB, BE, ED&lt;br /&gt;
&lt;br /&gt;
2 súlyú - AE&lt;br /&gt;
&lt;br /&gt;
3 súlyú - BC, AD, EC (és DC, ha &amp;lt;math&amp;gt;y = 3&amp;lt;/math&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Az összes megoldás:&lt;br /&gt;
&lt;br /&gt;
#Az 1 súlyú éleket &amp;lt;math&amp;gt;3! = 6&amp;lt;/math&amp;gt; féleképpen veheti fel az algoritmus (nem lehet belőlük kört csinálni, így itt nincsen para).&lt;br /&gt;
#Utána megpróbálná felvenni az AE élt, de azzal egy kört kapna, így nem veszi fel. Az AD éllel szintén így járna (~ezeket kéne pirosra színezni, ha olyan lenne a feladat).&lt;br /&gt;
#Maradtak a BC, EC és DC oldalak.&lt;br /&gt;
##Ha &amp;lt;math&amp;gt;y = 3&amp;lt;/math&amp;gt;, akkor ezeket szintén 6 féleképpen veheti fel, tehát összesen 36 féleképpen futhat az algoritmus.&lt;br /&gt;
##Ha &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;, akkor a DC oldal kiesik, a maradék 2 élt 2 féleképpen veheti fel, így 12 féleképpen futhat az algoritmus.}}&lt;br /&gt;
&lt;br /&gt;
===7. Feladat===&lt;br /&gt;
Létezik-e olyan X eldöntési probléma, amire X&amp;lt;big&amp;gt;∉&amp;lt;/big&amp;gt;NP és X&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;SAT egyszerre fennáll? &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Eldöntési probléma osztályok? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:bonyolultsag_elmelet.JPG|390px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;problémák&#039;&#039;&#039;nak lehet több típusú több bemenete, és több típusú több kimenete. Ezeket átfogalmazzuk olyanra, hogy a kimenete egyetlen bit legyen (IGEN / NEM), mert ezen algoritmusok felhasználásával is teljesen jól lehet dolgozni, ugyanakkor könnyebb őket nehézség / bonyolultság szerint osztályozni. Az ilyen 1 bites kimenetű problémákat nevezzük &#039;&#039;&#039;eldöntési problémák&#039;&#039;&#039;nak. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az eldöntési problémákat nehézség / bonyolultság szerint osztályokba soroljuk, ezen osztályok között olyan kapcsolatok vannak mint a halmazoknál; ez a fenti rajzon látszik.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;P osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre ismert olyan algoritmus, ami a bemenet polinomjával megadott idő alatt lefut. Vagyis ha a bemenet &#039;&#039;&#039;n&#039;&#039;&#039;, akkor az algoritmusra azt mondjuk, hogy nagy_ordó(valami), ahol a valami &#039;&#039;&#039;n&#039;&#039;&#039; egy polinomja, például n négyzet, n köb, három n négyzet meg négy meg nyolc n köb, és ilyesmik. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre (jelenleg) nem ismert polinom idejű (P-beli) algoritmus, de igen válasz esetén létezik hatékony tanúsítvány. Vagyis, adott egy nagy csomó bemenet és van egy kérdés. P-idő alatt nem tudjuk megmondani a választ, de ha valaki megsúgja hogy a válasz IGEN, akkor P-időben meg tudjuk mondani, hogy ez hülyeség vagy nem hülyeség. Ha azt súgják meg hogy NEM, akkor fogalmunk sincs, P-időben nem tudjuk eldönteni hogy hülyeség-e vagy sem. (&#039;&#039;Ha így lenne, vagyis igen és nem válasz esetén is P-időben ellenőrizni tudnánk a válasz helyességét, akkor az egész probléma P-beli lenne, hiszen megsúgjuk saját magunknak hogy NEM és ha helyes akkor NEM egyébként igen. Persze ha az IGEN-ről P-időben kiderül hogy hülyeség attól még lehet hogy IGEN, csak éppen nem az a konkrét ami meg lett súgva, hanem egy másik.&#039;&#039;) &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;coNP osztály&#039;&#039;&#039; lényegében ugyanaz mint az NP osztály, csak NEM válaszra. Vagyis (jelenleg) nem ismerünk rá P-beli algoritmust, de ha a válasz NEM, akkor P-időben (hatékonyan) ellenőrizni tudjuk, hogy ez-e a jó válasz vagy sem. Szintén, IGEN válasz esetén semmit sem tudunk mondani P-időben, a fenti okok miatt (ami a zárójelben van). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP nehéz&#039;&#039;&#039; osztályba tartozó eldöntési problémák közül bármelyik legalább olyan nehéz, mint bármelyik másik NP-beli eldöntési probléma. Itt jön képbe a Karp-redukció fogalma. Jó dolog sok NP nehéz problémát ismerni, mert akkor ha találunk egy problémát, akkor ha találunk olyan Karp-redukciót, ami azt mutatja, hogy ez a probléma visszavezethető egy közismert NP nehéz problémára, akkor a mi ismeretlen problémánk is NP nehéz lesz. Ez azért van, mert a Karp-redukció tranzitív művelet, továbbá a Karp-redukcónál használt f függvény P-beli, amit kétszer egymás után alkalmazva is még mindig P-beli lesz ez a dolog (az inputok átalakítása). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP teljes&#039;&#039;&#039; problémák azok, amik NP nehezek és NP-beliek is egyszerre. A fenti dolog ide is érvényes, vagyis jó dolog ha sok nevezetes NP teljes problémát ismerünk, mert ha egy ismeretlen problémához találunk egy olyan Karp-redukciót, ami alapján az ismeretlen problémánkat visszavezethetjük egy közismert NP teljes problémára, akkor az ismeretlen problémánkról is kiderült, hogy NP teljes. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Karp-redukció?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
Van egy olyan gépünk, ami kizárólag B problémát tudja megoldani. Nekünk viszont A problémánk van. Ekkor ha szerencsénk van, akkor fogunk találni egy olyan Karp-redukciót, hogy A&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;B. Ennek persze vannak feltételei. Az A eldöntési probléma inputját át kell alakítani B eldöntési probléma inputjává, és meg is kell adni ezt a függvényt, nevezzük el ezt a függvényt f függvénynek. Feltétel, hogy f függvény polinom időben kiszámolható legyen, és ezt be is kell bizonyítani. Továbbá azt is be kell bizonyítani, hogy amennyiben a normális inputra A azt válaszolná, hogy IGEN, akkor az f(normális input)-ra a B szintén ugyanezt válaszolná (és ugyanezt be kell bizonyítani NEM válaszra is). Magyarul a B dolgot megoldó gépet megerőszakoljuk hogy A problémát is hajlandó legyen megoldani. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebből következik néhány dolog. Például az, hogy B legalább olyan nehéz probléma, mint A. Ha például B NP-teljes, akkor A is az. Ha B NP-nehéz, akkor A is az. Ha B coNP-beli, akkor A is az. Ez miért van? Hát azért, mert polinom időben át lehet alakítani az A problémát B-vé. Ezt indirekten könnyen lehet bizonyítani. Indirekt tegyük fel, hogy annak ellenére hogy B probléma NP-teljes és létezik egy olyan Karp-redukció ami A problmémát átalakítja B-vé, szóval mindezek ellenére A probléma P-beli. Ekkor A problémát egy polinom idejű f függvénnyel simán átalakítjuk B problémává, erről szól ugye a Karp-redukció. Ezek után ha bármikor B problémát akarnánk megoldani, akkor az f-függvény fordítva végrehajtásával a B inputját átalakítjuk A inputjává, megoldjuk az A problémát polinom időben, és kész is. Ez ellentmondás mivel B-ről azt mondtuk hogy NP-teljes. A másik érdekesség, hogy ha például egy NP-teljes vagy NP-nehéz problémáról kiderülne hogy P-beli, akkor az összes NP-beliről kiderülne hogy P-beli, mivel az NP-nehéz definíciója az, hogy legalább olyan nehéz mint bármely tetszőleges NP-beli. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Még egy fontos megjegyzés a Karp-redukcióhoz: ugye A problémát akarjuk megoldani, de csak B-t megoldó gépünk van. Az egyik gyakorlaton elhangzott, és fontos tudni, hogy a B-t megoldó gépet az A eldöntési probléma megoldásához csak EGYSZER használhatjuk. Azért mert a Karp-redukció az ilyen.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;SAT probléma? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;A feladat megoldása: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===8. Feladat===&lt;br /&gt;
P-ben van vagy NP-teljes az alábbi eldöntési probléma:&amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Input:&#039;&#039;&#039; irányítatlan G gráf&amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Kérdés:&#039;&#039;&#039; Igaz-e, hogy G-ben vagy van Hamilton-út vagy G 3 színnel színezhető?&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Eldöntési probléma osztályok? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:bonyolultsag_elmelet.JPG|390px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;problémák&#039;&#039;&#039;nak lehet több típusú több bemenete, és több típusú több kimenete. Ezeket átfogalmazzuk olyanra, hogy a kimenete egyetlen bit legyen (IGEN / NEM), mert ezen algoritmusok felhasználásával is teljesen jól lehet dolgozni, ugyanakkor könnyebb őket nehézség / bonyolultság szerint osztályozni. Az ilyen 1 bites kimenetű problémákat nevezzük &#039;&#039;&#039;eldöntési problémák&#039;&#039;&#039;nak. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az eldöntési problémákat nehézség / bonyolultság szerint osztályokba soroljuk, ezen osztályok között olyan kapcsolatok vannak mint a halmazoknál; ez a fenti rajzon látszik.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;P osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre ismert olyan algoritmus, ami a bemenet polinomjával megadott idő alatt lefut. Vagyis ha a bemenet &#039;&#039;&#039;n&#039;&#039;&#039;, akkor az algoritmusra azt mondjuk, hogy nagy_ordó(valami), ahol a valami &#039;&#039;&#039;n&#039;&#039;&#039; egy polinomja, például n négyzet, n köb, három n négyzet meg négy meg nyolc n köb, és ilyesmik. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre (jelenleg) nem ismert polinom idejű (P-beli) algoritmus, de igen válasz esetén létezik hatékony tanúsítvány. Vagyis, adott egy nagy csomó bemenet és van egy kérdés. P-idő alatt nem tudjuk megmondani a választ, de ha valaki megsúgja hogy a válasz IGEN, akkor P-időben meg tudjuk mondani, hogy ez hülyeség vagy nem hülyeség. Ha azt súgják meg hogy NEM, akkor fogalmunk sincs, P-időben nem tudjuk eldönteni hogy hülyeség-e vagy sem. (&#039;&#039;Ha így lenne, vagyis igen és nem válasz esetén is P-időben ellenőrizni tudnánk a válasz helyességét, akkor az egész probléma P-beli lenne, hiszen megsúgjuk saját magunknak hogy NEM és ha helyes akkor NEM egyébként igen. Persze ha az IGEN-ről P-időben kiderül hogy hülyeség attól még lehet hogy IGEN, csak éppen nem az a konkrét ami meg lett súgva, hanem egy másik.&#039;&#039;) &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;coNP osztály&#039;&#039;&#039; lényegében ugyanaz mint az NP osztály, csak NEM válaszra. Vagyis (jelenleg) nem ismerünk rá P-beli algoritmust, de ha a válasz NEM, akkor P-időben (hatékonyan) ellenőrizni tudjuk, hogy ez-e a jó válasz vagy sem. Szintén, IGEN válasz esetén semmit sem tudunk mondani P-időben, a fenti okok miatt (ami a zárójelben van). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP nehéz&#039;&#039;&#039; osztályba tartozó eldöntési problémák közül bármelyik legalább olyan nehéz, mint bármelyik másik NP-beli eldöntési probléma. Itt jön képbe a Karp-redukció fogalma. Jó dolog sok NP nehéz problémát ismerni, mert akkor ha találunk egy problémát, akkor ha találunk olyan Karp-redukciót, ami azt mutatja, hogy ez a probléma visszavezethető egy közismert NP nehéz problémára, akkor a mi ismeretlen problémánk is NP nehéz lesz. Ez azért van, mert a Karp-redukció tranzitív művelet, továbbá a Karp-redukcónál használt f függvény P-beli, amit kétszer egymás után alkalmazva is még mindig P-beli lesz ez a dolog (az inputok átalakítása). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP teljes&#039;&#039;&#039; problémák azok, amik NP nehezek és NP-beliek is egyszerre. A fenti dolog ide is érvényes, vagyis jó dolog ha sok nevezetes NP teljes problémát ismerünk, mert ha egy ismeretlen problémához találunk egy olyan Karp-redukciót, ami alapján az ismeretlen problémánkat visszavezethetjük egy közismert NP teljes problémára, akkor az ismeretlen problémánkról is kiderült, hogy NP teljes. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Karp-redukció?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
Van egy olyan gépünk, ami kizárólag B problémát tudja megoldani. Nekünk viszont A problémánk van. Ekkor ha szerencsénk van, akkor fogunk találni egy olyan Karp-redukciót, hogy A&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;B. Ennek persze vannak feltételei. Az A eldöntési probléma inputját át kell alakítani B eldöntési probléma inputjává, és meg is kell adni ezt a függvényt, nevezzük el ezt a függvényt f függvénynek. Feltétel, hogy f függvény polinom időben kiszámolható legyen, és ezt be is kell bizonyítani. Továbbá azt is be kell bizonyítani, hogy amennyiben a normális inputra A azt válaszolná, hogy IGEN, akkor az f(normális input)-ra a B szintén ugyanezt válaszolná (és ugyanezt be kell bizonyítani NEM válaszra is). Magyarul a B dolgot megoldó gépet megerőszakoljuk hogy A problémát is hajlandó legyen megoldani. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebből következik néhány dolog. Például az, hogy B legalább olyan nehéz probléma, mint A. Ha például B NP-teljes, akkor A is az. Ha B NP-nehéz, akkor A is az. Ha B coNP-beli, akkor A is az. Ez miért van? Hát azért, mert polinom időben át lehet alakítani az A problémát B-vé. Ezt indirekten könnyen lehet bizonyítani. Indirekt tegyük fel, hogy annak ellenére hogy B probléma NP-teljes és létezik egy olyan Karp-redukció ami A problmémát átalakítja B-vé, szóval mindezek ellenére A probléma P-beli. Ekkor A problémát egy polinom idejű f függvénnyel simán átalakítjuk B problémává, erről szól ugye a Karp-redukció. Ezek után ha bármikor B problémát akarnánk megoldani, akkor az f-függvény fordítva végrehajtásával a B inputját átalakítjuk A inputjává, megoldjuk az A problémát polinom időben, és kész is. Ez ellentmondás mivel B-ről azt mondtuk hogy NP-teljes. A másik érdekesség, hogy ha például egy NP-teljes vagy NP-nehéz problémáról kiderülne hogy P-beli, akkor az összes NP-beliről kiderülne hogy P-beli, mivel az NP-nehéz definíciója az, hogy legalább olyan nehéz mint bármely tetszőleges NP-beli. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Még egy fontos megjegyzés a Karp-redukcióhoz: ugye A problémát akarjuk megoldani, de csak B-t megoldó gépünk van. Az egyik gyakorlaton elhangzott, és fontos tudni, hogy a B-t megoldó gépet az A eldöntési probléma megoldásához csak EGYSZER használhatjuk. Azért mert a Karp-redukció az ilyen.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;H-út? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;3 színnel színezhetőség problémája? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;A feladat megoldása: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Wtf1sh</name></author>
	</entry>
	<entry>
		<id>https://vik.wiki/index.php?title=Algoritmuselm%C3%A9let_-_Vizsga,_2013.06.06.&amp;diff=167664</id>
		<title>Algoritmuselmélet - Vizsga, 2013.06.06.</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Algoritmuselm%C3%A9let_-_Vizsga,_2013.06.06.&amp;diff=167664"/>
		<updated>2013-06-10T09:01:44Z</updated>

		<summary type="html">&lt;p&gt;Wtf1sh: /* 1. Feladat (Van megoldás) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==2013.06.06. vizsga megoldásai==&lt;br /&gt;
===1. Feladat (Van megoldás) ===&lt;br /&gt;
Ebben a feladatban a mélységi bejárással kapcsolatos kérdésekre kell válaszolni.&lt;br /&gt;
* &#039;&#039;&#039;(a)&#039;&#039;&#039; Adja meg a keresztél definícióját!&lt;br /&gt;
* &#039;&#039;&#039;(b)&#039;&#039;&#039; A mélységi bejárás során hogyan lehet a mélységi és a befejezési számok alapján felismerni a keresztéleket? &#039;&#039;Vizsgán megjegyzést fűztek hozzá: irányított gráfokra kell gondolni.&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;(c)&#039;&#039;&#039; Bizonyítsa be, hogy irányítatlan gráf mélységi bejárásánál nincsenek keresztélek!&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&#039;&#039;&#039;a)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Tekintsük a G irányított gráf egy mélységi bejárását és a kapott T mélységi feszítő erdőt. Ezen bejárás szerint G egy x → y éle keresztél, ha x és y nem leszármazottjai egymásnak.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
msz - mélységi szám&amp;lt;br&amp;gt;&lt;br /&gt;
bsz - befejezési szám&amp;lt;br&amp;gt;&lt;br /&gt;
Ha &amp;lt;math&amp;gt; (msz[y] &amp;lt; msz[x]) &amp;lt;/math&amp;gt; és &amp;lt;math&amp;gt;(bsz[y] &amp;gt; 0) &amp;lt;/math&amp;gt;, akkor az x →  y egy keresztél.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:keresztel_1.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;c)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
A &#039;&#039;&#039;b)&#039;&#039;&#039; rész alapján könnyen belátható. Ha lenne keresztél, az azt jelentené, hogy van olyan x → y él, amire fennáll, hogy &amp;lt;math&amp;gt; (msz[y] &amp;lt; msz[x]) &amp;lt;/math&amp;gt; és &amp;lt;math&amp;gt;(bsz[y] &amp;gt; 0) &amp;lt;/math&amp;gt;, vagyis y-ban előbb jártunk, mint x-ben, és y-nak van befejezési száma. Ennél fogva nem lehet keresztél, hiszen ha lenne, akkor y-ból eljuthattunk volna még x-be, mielőtt befejeztük volna.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Másképpen mondva:&#039;&#039;&#039; Nem fejezhettük volna be y-t anélkül, hogy ne jártunk volna x-ben.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:keresztel_2.PNG]]&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===2. Feladat(Megoldva)===&lt;br /&gt;
Milyen műveletek vannak a nyitott címzésű hash-elésnél? Hogyan kell megvalósítani a keresést, ha a nyitott címzésű hashelésnél kvadratikus maradék próbát használunk? &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a nyitott címzésű hash-elés?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
lásd: https://wiki.sch.bme.hu/Hash_t%C3%B6mb &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a kvadratikus maradék próba, nyitott címzésű hash-elésnél?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Nyitott címzésű hash-elés műveletei:&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Új elem beszúrása, elem keresése, elem törlése.&amp;lt;br&amp;gt;&lt;br /&gt;
A törlés speciális jelzéssel történik.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Keresés megvalósítása nyitott címzésű hash-elés esetén kvadratikus maradék próbánál:&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
A kvadratikus maradék próba egy álvéletlen próba, ezért másodlagos csomósodáshoz vezethet.&amp;lt;br&amp;gt;&lt;br /&gt;
Legyen M egy 4k + 3 alakú prímszám, ahol k egy egész.&amp;lt;br&amp;gt;&lt;br /&gt;
Ekkor a próbasorozat legyen&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; 0,1^2,(-1)^2, 2^2,(-2)^2,..,((M-1)/2)^2,-((M-1)/2)^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===3. Feladat===&lt;br /&gt;
Adja meg az UNIÓ-HOLVAN adatszerkezet definícióját! (A fákkal való implementálást nem kell leírnia.) Mutassa meg, hogy mikor és hogyan használjuk az UNIÓ és a HOLVAN műveleteket a Kruskal algoritmusban! &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a Kruskal algoritmus?&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;UNIÓ-HOLVAN adatszerkezet definíciója: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mikor és hogyan használjuk az UNIÓ és a HOLVAN műveleteket a Kruskal algoritmusban:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===4. Feladat===&lt;br /&gt;
Pista bácsi fel akar ugrálni egy n hosszú, fekete illetve fehér fokokból álló csigalépcsőn. Legfeljebb k fokot tud ugrani, de arra vigyáznia kell, hogy páros (&amp;gt;=2) sok foknyi ugrás után páratlan sokat és páratlan sok után mindig páros (&amp;gt;=2) sokat ugorjon. Adjon O(nk) lépésszámú algoritmust, amely megmondja, hogy fel tud-e úgy ugrálni a csigalépcső tetejére, hogy csak egyféle színű lépcsőfokot használ. (A lépcső fokai rendszertelenül vannak színezve, a színezést ismerjük.) &lt;br /&gt;
&#039;&#039;Vizsgán megjegyzést fűztek hozzá: a talaj és a legteteje nem színes, csak a lépcsők; csak fölfele (előrefele) ugrál, visszafele nem. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===5. Feladat (Van megoldás)=== &lt;br /&gt;
A hátizsák probléma órán tanult algoritmusát futtattuk egy konkrét inputon, melyben 3 tárgy szerepel. Mi lehetett ez a konkrét input, ha az alábbi táblázat keletkezett?&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 0 &lt;br /&gt;
! 1 &lt;br /&gt;
! 2 &lt;br /&gt;
! 3 &lt;br /&gt;
! 4 &lt;br /&gt;
! 5 &lt;br /&gt;
! 6 &lt;br /&gt;
! 7 &lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
|-&lt;br /&gt;
| 2 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 5 &lt;br /&gt;
| 5 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 15 &lt;br /&gt;
| 15 &lt;br /&gt;
|-&lt;br /&gt;
| 3 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 5 &lt;br /&gt;
| 5 &lt;br /&gt;
| 13 &lt;br /&gt;
| 13 &lt;br /&gt;
| 18 &lt;br /&gt;
| 18 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
Az egyszerűség kedvéért a súly legyen kg, az érték pedig €.&lt;br /&gt;
&lt;br /&gt;
#Az első sor alapján az 1-es csomag értéke €10, súlya 4kg.&lt;br /&gt;
#A második sor alapján a 2-es csomag értéke €5, súlya 2kg.&lt;br /&gt;
#A 3. lépésben 2 lehetőségünk van, a 3. csomag értéke vagy 13-5=€8, vagy 13-0=€13.&lt;br /&gt;
##€8 nem lehet, mert akkor a súlya 2kg lenne, de akkor a [2,3] cellába 8 lenne, nem 5.&lt;br /&gt;
##Így csak a €13 jöhet szóba, súlya pedig 4kg, ami jó megoldás lesz.&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&#039;&#039;Avagy kicsit gépiesebb megoldás:&#039;&#039;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jelölje &amp;lt;math&amp;gt; T[s,cs]&amp;lt;/math&amp;gt; a táblázat &amp;lt;math&amp;gt;[s,cs]&amp;lt;/math&amp;gt; celláját, továbbá &amp;lt;math&amp;gt; V_3&amp;lt;/math&amp;gt; a 3. csomag értékét, &amp;lt;math&amp;gt; S_3&amp;lt;/math&amp;gt; pedig a súlyát.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Tudjuk, hogy &amp;lt;math&amp;gt; T[s,cs]=max\left \{ T[s,cs-1];V_i+T[s-S_i,cs-1] \right \}&amp;lt;/math&amp;gt;, ami ebben az esetben:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; T[4,3]=max\left \{ T[4,2];V_3+T[4-S_3,2] \right \} \rightarrow  13=max\left \{ 10;V_3+T[4-S_3,2] \right \}&amp;lt;/math&amp;gt;, amiből következik, hogy:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; 13=V_3+T[4-S_3,2] \rightarrow V_3 = 13-T[4-S_3,2]\Rightarrow\Rightarrow S_3=4, V_3=13&amp;lt;/math&amp;gt; (Átgondolható, hogy a 3. csomag súlya nem lehet 1,2 vagy 3kg).&lt;br /&gt;
}}&lt;br /&gt;
Tehát végeredményben a megoldás:&lt;br /&gt;
*1-es csomag (€10, 4kg)&lt;br /&gt;
*2-es csomag (€5, 2kg)&lt;br /&gt;
*3-as csomag (€13, 4kg)&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===6. Feladat (Van megoldás)===&lt;br /&gt;
Egy irányítatlan, élsúlyozott gráf az alábbi éllistával adott (zárójelben az élsúlyok):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A:B(1), D(3), E(2); B:A(1), C(3), D(y); D:A(3), C(y), E(x); E:A(2), B(1), D(x).&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;(a)&#039;&#039;&#039; Mi lehet x és y értéke, ha tudjuk, hogy az élsúlyok egész számok, és azt is tudjuk, hogy a B csúcsból indított Prim algoritmus az alábbi sorrendben vette be az értékeket: BE, ED, BA, BC. &#039;&#039;Vizsgán megjegyzést fűztek hozzá: az élsúlyok pozitív egész számok, a pozitív szót kifelejtették véletlenül.&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;(b)&#039;&#039;&#039; Mely éleket és milyen sorrendben választja ki a Kruskal algoritmus? (Ha több megoldás is van, akkor az összeset adja meg!)&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
[[File:2013_06_06_V2_6.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;a)&#039;&#039;&#039; Prim algoritmus - Ugyebár úgy dolgozik, hogy az aktuális fához a vele szomszédos élek közül a legkisebb súlyút veszi be. Prim: BE → ED → BA → BC&lt;br /&gt;
# A fához hozzáadjuk a BE élt.&lt;br /&gt;
# Most az ED élt választottuk. Ez alapján x értéke csak 1 lehet, így &amp;lt;math&amp;gt;x = 1&amp;lt;/math&amp;gt;. (Feladatból kihagyták, hogy pozitív egészekről van szó, amúgy &amp;lt;math&amp;gt;x \le 1&amp;lt;/math&amp;gt; lehetne.)&lt;br /&gt;
# Most az AB élt adjuk hozzá, ez alapján &amp;lt;math&amp;gt;y \ge 1&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Most a BC élt adjuk hozzá, ez alapján &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;, így végül &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b)&#039;&#039;&#039; Kruskal algoritmus - Éleket nagyság szerint sorrendbe rakjuk, és növekvő sorrendben felvesszük a fához az éleket, vigyázva, hogy ne csináljunk kört.&lt;br /&gt;
&lt;br /&gt;
1 súlyú - AB, BE, ED&lt;br /&gt;
&lt;br /&gt;
2 súlyú - AE&lt;br /&gt;
&lt;br /&gt;
3 súlyú - BC, AD, EC (és DC, ha &amp;lt;math&amp;gt;y = 3&amp;lt;/math&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Az összes megoldás:&lt;br /&gt;
&lt;br /&gt;
#Az 1 súlyú éleket &amp;lt;math&amp;gt;3! = 6&amp;lt;/math&amp;gt; féleképpen veheti fel az algoritmus (nem lehet belőlük kört csinálni, így itt nincsen para).&lt;br /&gt;
#Utána megpróbálná felvenni az AE élt, de azzal egy kört kapna, így nem veszi fel. Az AD éllel szintén így járna (~ezeket kéne pirosra színezni, ha olyan lenne a feladat).&lt;br /&gt;
#Maradtak a BC, EC és DC oldalak.&lt;br /&gt;
##Ha &amp;lt;math&amp;gt;y = 3&amp;lt;/math&amp;gt;, akkor ezeket szintén 6 féleképpen veheti fel, tehát összesen 36 féleképpen futhat az algoritmus.&lt;br /&gt;
##Ha &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;, akkor a DC oldal kiesik, a maradék 2 élt 2 féleképpen veheti fel, így 12 féleképpen futhat az algoritmus.}}&lt;br /&gt;
&lt;br /&gt;
===7. Feladat===&lt;br /&gt;
Létezik-e olyan X eldöntési probléma, amire X&amp;lt;big&amp;gt;∉&amp;lt;/big&amp;gt;NP és X&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;SAT egyszerre fennáll? &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Eldöntési probléma osztályok? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:bonyolultsag_elmelet.JPG|390px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;problémák&#039;&#039;&#039;nak lehet több típusú több bemenete, és több típusú több kimenete. Ezeket átfogalmazzuk olyanra, hogy a kimenete egyetlen bit legyen (IGEN / NEM), mert ezen algoritmusok felhasználásával is teljesen jól lehet dolgozni, ugyanakkor könnyebb őket nehézség / bonyolultság szerint osztályozni. Az ilyen 1 bites kimenetű problémákat nevezzük &#039;&#039;&#039;eldöntési problémák&#039;&#039;&#039;nak. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az eldöntési problémákat nehézség / bonyolultság szerint osztályokba soroljuk, ezen osztályok között olyan kapcsolatok vannak mint a halmazoknál; ez a fenti rajzon látszik.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;P osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre ismert olyan algoritmus, ami a bemenet polinomjával megadott idő alatt lefut. Vagyis ha a bemenet &#039;&#039;&#039;n&#039;&#039;&#039;, akkor az algoritmusra azt mondjuk, hogy nagy_ordó(valami), ahol a valami &#039;&#039;&#039;n&#039;&#039;&#039; egy polinomja, például n négyzet, n köb, három n négyzet meg négy meg nyolc n köb, és ilyesmik. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre (jelenleg) nem ismert polinom idejű (P-beli) algoritmus, de igen válasz esetén létezik hatékony tanúsítvány. Vagyis, adott egy nagy csomó bemenet és van egy kérdés. P-idő alatt nem tudjuk megmondani a választ, de ha valaki megsúgja hogy a válasz IGEN, akkor P-időben meg tudjuk mondani, hogy ez hülyeség vagy nem hülyeség. Ha azt súgják meg hogy NEM, akkor fogalmunk sincs, P-időben nem tudjuk eldönteni hogy hülyeség-e vagy sem. (&#039;&#039;Ha így lenne, vagyis igen és nem válasz esetén is P-időben ellenőrizni tudnánk a válasz helyességét, akkor az egész probléma P-beli lenne, hiszen megsúgjuk saját magunknak hogy NEM és ha helyes akkor NEM egyébként igen. Persze ha az IGEN-ről P-időben kiderül hogy hülyeség attól még lehet hogy IGEN, csak éppen nem az a konkrét ami meg lett súgva, hanem egy másik.&#039;&#039;) &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;coNP osztály&#039;&#039;&#039; lényegében ugyanaz mint az NP osztály, csak NEM válaszra. Vagyis (jelenleg) nem ismerünk rá P-beli algoritmust, de ha a válasz NEM, akkor P-időben (hatékonyan) ellenőrizni tudjuk, hogy ez-e a jó válasz vagy sem. Szintén, IGEN válasz esetén semmit sem tudunk mondani P-időben, a fenti okok miatt (ami a zárójelben van). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP nehéz&#039;&#039;&#039; osztályba tartozó eldöntési problémák közül bármelyik legalább olyan nehéz, mint bármelyik másik NP-beli eldöntési probléma. Itt jön képbe a Karp-redukció fogalma. Jó dolog sok NP nehéz problémát ismerni, mert akkor ha találunk egy problémát, akkor ha találunk olyan Karp-redukciót, ami azt mutatja, hogy ez a probléma visszavezethető egy közismert NP nehéz problémára, akkor a mi ismeretlen problémánk is NP nehéz lesz. Ez azért van, mert a Karp-redukció tranzitív művelet, továbbá a Karp-redukcónál használt f függvény P-beli, amit kétszer egymás után alkalmazva is még mindig P-beli lesz ez a dolog (az inputok átalakítása). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP teljes&#039;&#039;&#039; problémák azok, amik NP nehezek és NP-beliek is egyszerre. A fenti dolog ide is érvényes, vagyis jó dolog ha sok nevezetes NP teljes problémát ismerünk, mert ha egy ismeretlen problémához találunk egy olyan Karp-redukciót, ami alapján az ismeretlen problémánkat visszavezethetjük egy közismert NP teljes problémára, akkor az ismeretlen problémánkról is kiderült, hogy NP teljes. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Karp-redukció?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
Van egy olyan gépünk, ami kizárólag B problémát tudja megoldani. Nekünk viszont A problémánk van. Ekkor ha szerencsénk van, akkor fogunk találni egy olyan Karp-redukciót, hogy A&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;B. Ennek persze vannak feltételei. Az A eldöntési probléma inputját át kell alakítani B eldöntési probléma inputjává, és meg is kell adni ezt a függvényt, nevezzük el ezt a függvényt f függvénynek. Feltétel, hogy f függvény polinom időben kiszámolható legyen, és ezt be is kell bizonyítani. Továbbá azt is be kell bizonyítani, hogy amennyiben a normális inputra A azt válaszolná, hogy IGEN, akkor az f(normális input)-ra a B szintén ugyanezt válaszolná (és ugyanezt be kell bizonyítani NEM válaszra is). Magyarul a B dolgot megoldó gépet megerőszakoljuk hogy A problémát is hajlandó legyen megoldani. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebből következik néhány dolog. Például az, hogy B legalább olyan nehéz probléma, mint A. Ha például B NP-teljes, akkor A is az. Ha B NP-nehéz, akkor A is az. Ha B coNP-beli, akkor A is az. Ez miért van? Hát azért, mert polinom időben át lehet alakítani az A problémát B-vé. Ezt indirekten könnyen lehet bizonyítani. Indirekt tegyük fel, hogy annak ellenére hogy B probléma NP-teljes és létezik egy olyan Karp-redukció ami A problmémát átalakítja B-vé, szóval mindezek ellenére A probléma P-beli. Ekkor A problémát egy polinom idejű f függvénnyel simán átalakítjuk B problémává, erről szól ugye a Karp-redukció. Ezek után ha bármikor B problémát akarnánk megoldani, akkor az f-függvény fordítva végrehajtásával a B inputját átalakítjuk A inputjává, megoldjuk az A problémát polinom időben, és kész is. Ez ellentmondás mivel B-ről azt mondtuk hogy NP-teljes. A másik érdekesség, hogy ha például egy NP-teljes vagy NP-nehéz problémáról kiderülne hogy P-beli, akkor az összes NP-beliről kiderülne hogy P-beli, mivel az NP-nehéz definíciója az, hogy legalább olyan nehéz mint bármely tetszőleges NP-beli. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Még egy fontos megjegyzés a Karp-redukcióhoz: ugye A problémát akarjuk megoldani, de csak B-t megoldó gépünk van. Az egyik gyakorlaton elhangzott, és fontos tudni, hogy a B-t megoldó gépet az A eldöntési probléma megoldásához csak EGYSZER használhatjuk. Azért mert a Karp-redukció az ilyen.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;SAT probléma? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;A feladat megoldása: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===8. Feladat===&lt;br /&gt;
P-ben van vagy NP-teljes az alábbi eldöntési probléma:&amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Input:&#039;&#039;&#039; irányítatlan G gráf&amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Kérdés:&#039;&#039;&#039; Igaz-e, hogy G-ben vagy van Hamilton-út vagy G 3 színnel színezhető?&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Eldöntési probléma osztályok? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:bonyolultsag_elmelet.JPG|390px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;problémák&#039;&#039;&#039;nak lehet több típusú több bemenete, és több típusú több kimenete. Ezeket átfogalmazzuk olyanra, hogy a kimenete egyetlen bit legyen (IGEN / NEM), mert ezen algoritmusok felhasználásával is teljesen jól lehet dolgozni, ugyanakkor könnyebb őket nehézség / bonyolultság szerint osztályozni. Az ilyen 1 bites kimenetű problémákat nevezzük &#039;&#039;&#039;eldöntési problémák&#039;&#039;&#039;nak. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az eldöntési problémákat nehézség / bonyolultság szerint osztályokba soroljuk, ezen osztályok között olyan kapcsolatok vannak mint a halmazoknál; ez a fenti rajzon látszik.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;P osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre ismert olyan algoritmus, ami a bemenet polinomjával megadott idő alatt lefut. Vagyis ha a bemenet &#039;&#039;&#039;n&#039;&#039;&#039;, akkor az algoritmusra azt mondjuk, hogy nagy_ordó(valami), ahol a valami &#039;&#039;&#039;n&#039;&#039;&#039; egy polinomja, például n négyzet, n köb, három n négyzet meg négy meg nyolc n köb, és ilyesmik. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre (jelenleg) nem ismert polinom idejű (P-beli) algoritmus, de igen válasz esetén létezik hatékony tanúsítvány. Vagyis, adott egy nagy csomó bemenet és van egy kérdés. P-idő alatt nem tudjuk megmondani a választ, de ha valaki megsúgja hogy a válasz IGEN, akkor P-időben meg tudjuk mondani, hogy ez hülyeség vagy nem hülyeség. Ha azt súgják meg hogy NEM, akkor fogalmunk sincs, P-időben nem tudjuk eldönteni hogy hülyeség-e vagy sem. (&#039;&#039;Ha így lenne, vagyis igen és nem válasz esetén is P-időben ellenőrizni tudnánk a válasz helyességét, akkor az egész probléma P-beli lenne, hiszen megsúgjuk saját magunknak hogy NEM és ha helyes akkor NEM egyébként igen. Persze ha az IGEN-ről P-időben kiderül hogy hülyeség attól még lehet hogy IGEN, csak éppen nem az a konkrét ami meg lett súgva, hanem egy másik.&#039;&#039;) &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;coNP osztály&#039;&#039;&#039; lényegében ugyanaz mint az NP osztály, csak NEM válaszra. Vagyis (jelenleg) nem ismerünk rá P-beli algoritmust, de ha a válasz NEM, akkor P-időben (hatékonyan) ellenőrizni tudjuk, hogy ez-e a jó válasz vagy sem. Szintén, IGEN válasz esetén semmit sem tudunk mondani P-időben, a fenti okok miatt (ami a zárójelben van). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP nehéz&#039;&#039;&#039; osztályba tartozó eldöntési problémák közül bármelyik legalább olyan nehéz, mint bármelyik másik NP-beli eldöntési probléma. Itt jön képbe a Karp-redukció fogalma. Jó dolog sok NP nehéz problémát ismerni, mert akkor ha találunk egy problémát, akkor ha találunk olyan Karp-redukciót, ami azt mutatja, hogy ez a probléma visszavezethető egy közismert NP nehéz problémára, akkor a mi ismeretlen problémánk is NP nehéz lesz. Ez azért van, mert a Karp-redukció tranzitív művelet, továbbá a Karp-redukcónál használt f függvény P-beli, amit kétszer egymás után alkalmazva is még mindig P-beli lesz ez a dolog (az inputok átalakítása). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP teljes&#039;&#039;&#039; problémák azok, amik NP nehezek és NP-beliek is egyszerre. A fenti dolog ide is érvényes, vagyis jó dolog ha sok nevezetes NP teljes problémát ismerünk, mert ha egy ismeretlen problémához találunk egy olyan Karp-redukciót, ami alapján az ismeretlen problémánkat visszavezethetjük egy közismert NP teljes problémára, akkor az ismeretlen problémánkról is kiderült, hogy NP teljes. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Karp-redukció?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
Van egy olyan gépünk, ami kizárólag B problémát tudja megoldani. Nekünk viszont A problémánk van. Ekkor ha szerencsénk van, akkor fogunk találni egy olyan Karp-redukciót, hogy A&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;B. Ennek persze vannak feltételei. Az A eldöntési probléma inputját át kell alakítani B eldöntési probléma inputjává, és meg is kell adni ezt a függvényt, nevezzük el ezt a függvényt f függvénynek. Feltétel, hogy f függvény polinom időben kiszámolható legyen, és ezt be is kell bizonyítani. Továbbá azt is be kell bizonyítani, hogy amennyiben a normális inputra A azt válaszolná, hogy IGEN, akkor az f(normális input)-ra a B szintén ugyanezt válaszolná (és ugyanezt be kell bizonyítani NEM válaszra is). Magyarul a B dolgot megoldó gépet megerőszakoljuk hogy A problémát is hajlandó legyen megoldani. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebből következik néhány dolog. Például az, hogy B legalább olyan nehéz probléma, mint A. Ha például B NP-teljes, akkor A is az. Ha B NP-nehéz, akkor A is az. Ha B coNP-beli, akkor A is az. Ez miért van? Hát azért, mert polinom időben át lehet alakítani az A problémát B-vé. Ezt indirekten könnyen lehet bizonyítani. Indirekt tegyük fel, hogy annak ellenére hogy B probléma NP-teljes és létezik egy olyan Karp-redukció ami A problmémát átalakítja B-vé, szóval mindezek ellenére A probléma P-beli. Ekkor A problémát egy polinom idejű f függvénnyel simán átalakítjuk B problémává, erről szól ugye a Karp-redukció. Ezek után ha bármikor B problémát akarnánk megoldani, akkor az f-függvény fordítva végrehajtásával a B inputját átalakítjuk A inputjává, megoldjuk az A problémát polinom időben, és kész is. Ez ellentmondás mivel B-ről azt mondtuk hogy NP-teljes. A másik érdekesség, hogy ha például egy NP-teljes vagy NP-nehéz problémáról kiderülne hogy P-beli, akkor az összes NP-beliről kiderülne hogy P-beli, mivel az NP-nehéz definíciója az, hogy legalább olyan nehéz mint bármely tetszőleges NP-beli. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Még egy fontos megjegyzés a Karp-redukcióhoz: ugye A problémát akarjuk megoldani, de csak B-t megoldó gépünk van. Az egyik gyakorlaton elhangzott, és fontos tudni, hogy a B-t megoldó gépet az A eldöntési probléma megoldásához csak EGYSZER használhatjuk. Azért mert a Karp-redukció az ilyen.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;H-út? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;3 színnel színezhetőség problémája? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;A feladat megoldása: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Wtf1sh</name></author>
	</entry>
	<entry>
		<id>https://vik.wiki/index.php?title=Algoritmuselm%C3%A9let_-_Vizsga,_2013.06.06.&amp;diff=167663</id>
		<title>Algoritmuselmélet - Vizsga, 2013.06.06.</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Algoritmuselm%C3%A9let_-_Vizsga,_2013.06.06.&amp;diff=167663"/>
		<updated>2013-06-10T09:01:13Z</updated>

		<summary type="html">&lt;p&gt;Wtf1sh: /* 2. Feladat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==2013.06.06. vizsga megoldásai==&lt;br /&gt;
===1. Feladat (Van megoldás) ===&lt;br /&gt;
Ebben a feladatban a mélységi bejárással kapcsolatos kérdésekre kell válaszolni.&lt;br /&gt;
* &#039;&#039;&#039;(a)&#039;&#039;&#039; Adja meg a keresztél definícióját!&lt;br /&gt;
* &#039;&#039;&#039;(b)&#039;&#039;&#039; A mélységi bejárás során hogyan lehet a mélységi és a befejezési számok alapján felismerni a keresztéleket? &#039;&#039;Vizsgán megjegyzést fűztek hozzá: irányított gráfokra kell gondolni.&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;(c)&#039;&#039;&#039; Bizonyítsa be, hogy irányítatlan gráf mélységi bejárásánál nincsenek keresztélek!&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&#039;&#039;&#039;a)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Tekintsük a G irányított gráf egy mélységi bejárását és a kapott T mélységi feszítő erdőt. Ezen bejárás szerint G egy x → y éle keresztél, ha x és y nem leszármazottjai egymásnak.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
msz - mélységi szám&amp;lt;br&amp;gt;&lt;br /&gt;
bsz - befejezési szám&amp;lt;br&amp;gt;&lt;br /&gt;
Ha &amp;lt;math&amp;gt; (msz[y] &amp;lt; msz[x]) &amp;lt;/math&amp;gt; és &amp;lt;math&amp;gt;(bsz[y] &amp;gt; 0) &amp;lt;/math&amp;gt;, akkor az x →  y egy keresztél.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:keresztel_1.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;c)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
A &#039;&#039;&#039;b)&#039;&#039;&#039; rész alapján könnyen belátható. Ha lenne keresztél, az azt jelentené, hogy van olyan x → y él, amire fennáll, hogy &amp;lt;math&amp;gt; (msz[y] &amp;lt; msz[x]) &amp;lt;/math&amp;gt; és &amp;lt;math&amp;gt;(bsz[y] &amp;gt; 0) &amp;lt;/math&amp;gt;, vagyis y-ban előbb jártunk, mint x-ben, és y-nak van befejezési száma. Ennél fogva nem lehet keresztél, hiszen ha lenne, akkor y-ból eljuthattunk volna még x-be, mielőtt befejeztük volna.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Másképpen mondva:&#039;&#039;&#039; Nem fejezhettük volna be y-t anélkül, hogy ne jártunk volna x-ben.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:keresztel_2.PNG]]&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===2. Feladat===(Megoldva)&lt;br /&gt;
Milyen műveletek vannak a nyitott címzésű hash-elésnél? Hogyan kell megvalósítani a keresést, ha a nyitott címzésű hashelésnél kvadratikus maradék próbát használunk? &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a nyitott címzésű hash-elés?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
lásd: https://wiki.sch.bme.hu/Hash_t%C3%B6mb &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a kvadratikus maradék próba, nyitott címzésű hash-elésnél?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Nyitott címzésű hash-elés műveletei:&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Új elem beszúrása, elem keresése, elem törlése.&amp;lt;br&amp;gt;&lt;br /&gt;
A törlés speciális jelzéssel történik.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Keresés megvalósítása nyitott címzésű hash-elés esetén kvadratikus maradék próbánál:&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
A kvadratikus maradék próba egy álvéletlen próba, ezért másodlagos csomósodáshoz vezethet.&amp;lt;br&amp;gt;&lt;br /&gt;
Legyen M egy 4k + 3 alakú prímszám, ahol k egy egész.&amp;lt;br&amp;gt;&lt;br /&gt;
Ekkor a próbasorozat legyen&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; 0,1^2,(-1)^2, 2^2,(-2)^2,..,((M-1)/2)^2,-((M-1)/2)^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===3. Feladat===&lt;br /&gt;
Adja meg az UNIÓ-HOLVAN adatszerkezet definícióját! (A fákkal való implementálást nem kell leírnia.) Mutassa meg, hogy mikor és hogyan használjuk az UNIÓ és a HOLVAN műveleteket a Kruskal algoritmusban! &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a Kruskal algoritmus?&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;UNIÓ-HOLVAN adatszerkezet definíciója: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mikor és hogyan használjuk az UNIÓ és a HOLVAN műveleteket a Kruskal algoritmusban:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===4. Feladat===&lt;br /&gt;
Pista bácsi fel akar ugrálni egy n hosszú, fekete illetve fehér fokokból álló csigalépcsőn. Legfeljebb k fokot tud ugrani, de arra vigyáznia kell, hogy páros (&amp;gt;=2) sok foknyi ugrás után páratlan sokat és páratlan sok után mindig páros (&amp;gt;=2) sokat ugorjon. Adjon O(nk) lépésszámú algoritmust, amely megmondja, hogy fel tud-e úgy ugrálni a csigalépcső tetejére, hogy csak egyféle színű lépcsőfokot használ. (A lépcső fokai rendszertelenül vannak színezve, a színezést ismerjük.) &lt;br /&gt;
&#039;&#039;Vizsgán megjegyzést fűztek hozzá: a talaj és a legteteje nem színes, csak a lépcsők; csak fölfele (előrefele) ugrál, visszafele nem. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===5. Feladat (Van megoldás)=== &lt;br /&gt;
A hátizsák probléma órán tanult algoritmusát futtattuk egy konkrét inputon, melyben 3 tárgy szerepel. Mi lehetett ez a konkrét input, ha az alábbi táblázat keletkezett?&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 0 &lt;br /&gt;
! 1 &lt;br /&gt;
! 2 &lt;br /&gt;
! 3 &lt;br /&gt;
! 4 &lt;br /&gt;
! 5 &lt;br /&gt;
! 6 &lt;br /&gt;
! 7 &lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
|-&lt;br /&gt;
| 2 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 5 &lt;br /&gt;
| 5 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 15 &lt;br /&gt;
| 15 &lt;br /&gt;
|-&lt;br /&gt;
| 3 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 5 &lt;br /&gt;
| 5 &lt;br /&gt;
| 13 &lt;br /&gt;
| 13 &lt;br /&gt;
| 18 &lt;br /&gt;
| 18 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
Az egyszerűség kedvéért a súly legyen kg, az érték pedig €.&lt;br /&gt;
&lt;br /&gt;
#Az első sor alapján az 1-es csomag értéke €10, súlya 4kg.&lt;br /&gt;
#A második sor alapján a 2-es csomag értéke €5, súlya 2kg.&lt;br /&gt;
#A 3. lépésben 2 lehetőségünk van, a 3. csomag értéke vagy 13-5=€8, vagy 13-0=€13.&lt;br /&gt;
##€8 nem lehet, mert akkor a súlya 2kg lenne, de akkor a [2,3] cellába 8 lenne, nem 5.&lt;br /&gt;
##Így csak a €13 jöhet szóba, súlya pedig 4kg, ami jó megoldás lesz.&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&#039;&#039;Avagy kicsit gépiesebb megoldás:&#039;&#039;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jelölje &amp;lt;math&amp;gt; T[s,cs]&amp;lt;/math&amp;gt; a táblázat &amp;lt;math&amp;gt;[s,cs]&amp;lt;/math&amp;gt; celláját, továbbá &amp;lt;math&amp;gt; V_3&amp;lt;/math&amp;gt; a 3. csomag értékét, &amp;lt;math&amp;gt; S_3&amp;lt;/math&amp;gt; pedig a súlyát.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Tudjuk, hogy &amp;lt;math&amp;gt; T[s,cs]=max\left \{ T[s,cs-1];V_i+T[s-S_i,cs-1] \right \}&amp;lt;/math&amp;gt;, ami ebben az esetben:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; T[4,3]=max\left \{ T[4,2];V_3+T[4-S_3,2] \right \} \rightarrow  13=max\left \{ 10;V_3+T[4-S_3,2] \right \}&amp;lt;/math&amp;gt;, amiből következik, hogy:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; 13=V_3+T[4-S_3,2] \rightarrow V_3 = 13-T[4-S_3,2]\Rightarrow\Rightarrow S_3=4, V_3=13&amp;lt;/math&amp;gt; (Átgondolható, hogy a 3. csomag súlya nem lehet 1,2 vagy 3kg).&lt;br /&gt;
}}&lt;br /&gt;
Tehát végeredményben a megoldás:&lt;br /&gt;
*1-es csomag (€10, 4kg)&lt;br /&gt;
*2-es csomag (€5, 2kg)&lt;br /&gt;
*3-as csomag (€13, 4kg)&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===6. Feladat (Van megoldás)===&lt;br /&gt;
Egy irányítatlan, élsúlyozott gráf az alábbi éllistával adott (zárójelben az élsúlyok):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A:B(1), D(3), E(2); B:A(1), C(3), D(y); D:A(3), C(y), E(x); E:A(2), B(1), D(x).&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;(a)&#039;&#039;&#039; Mi lehet x és y értéke, ha tudjuk, hogy az élsúlyok egész számok, és azt is tudjuk, hogy a B csúcsból indított Prim algoritmus az alábbi sorrendben vette be az értékeket: BE, ED, BA, BC. &#039;&#039;Vizsgán megjegyzést fűztek hozzá: az élsúlyok pozitív egész számok, a pozitív szót kifelejtették véletlenül.&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;(b)&#039;&#039;&#039; Mely éleket és milyen sorrendben választja ki a Kruskal algoritmus? (Ha több megoldás is van, akkor az összeset adja meg!)&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
[[File:2013_06_06_V2_6.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;a)&#039;&#039;&#039; Prim algoritmus - Ugyebár úgy dolgozik, hogy az aktuális fához a vele szomszédos élek közül a legkisebb súlyút veszi be. Prim: BE → ED → BA → BC&lt;br /&gt;
# A fához hozzáadjuk a BE élt.&lt;br /&gt;
# Most az ED élt választottuk. Ez alapján x értéke csak 1 lehet, így &amp;lt;math&amp;gt;x = 1&amp;lt;/math&amp;gt;. (Feladatból kihagyták, hogy pozitív egészekről van szó, amúgy &amp;lt;math&amp;gt;x \le 1&amp;lt;/math&amp;gt; lehetne.)&lt;br /&gt;
# Most az AB élt adjuk hozzá, ez alapján &amp;lt;math&amp;gt;y \ge 1&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Most a BC élt adjuk hozzá, ez alapján &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;, így végül &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b)&#039;&#039;&#039; Kruskal algoritmus - Éleket nagyság szerint sorrendbe rakjuk, és növekvő sorrendben felvesszük a fához az éleket, vigyázva, hogy ne csináljunk kört.&lt;br /&gt;
&lt;br /&gt;
1 súlyú - AB, BE, ED&lt;br /&gt;
&lt;br /&gt;
2 súlyú - AE&lt;br /&gt;
&lt;br /&gt;
3 súlyú - BC, AD, EC (és DC, ha &amp;lt;math&amp;gt;y = 3&amp;lt;/math&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Az összes megoldás:&lt;br /&gt;
&lt;br /&gt;
#Az 1 súlyú éleket &amp;lt;math&amp;gt;3! = 6&amp;lt;/math&amp;gt; féleképpen veheti fel az algoritmus (nem lehet belőlük kört csinálni, így itt nincsen para).&lt;br /&gt;
#Utána megpróbálná felvenni az AE élt, de azzal egy kört kapna, így nem veszi fel. Az AD éllel szintén így járna (~ezeket kéne pirosra színezni, ha olyan lenne a feladat).&lt;br /&gt;
#Maradtak a BC, EC és DC oldalak.&lt;br /&gt;
##Ha &amp;lt;math&amp;gt;y = 3&amp;lt;/math&amp;gt;, akkor ezeket szintén 6 féleképpen veheti fel, tehát összesen 36 féleképpen futhat az algoritmus.&lt;br /&gt;
##Ha &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;, akkor a DC oldal kiesik, a maradék 2 élt 2 féleképpen veheti fel, így 12 féleképpen futhat az algoritmus.}}&lt;br /&gt;
&lt;br /&gt;
===7. Feladat===&lt;br /&gt;
Létezik-e olyan X eldöntési probléma, amire X&amp;lt;big&amp;gt;∉&amp;lt;/big&amp;gt;NP és X&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;SAT egyszerre fennáll? &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Eldöntési probléma osztályok? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:bonyolultsag_elmelet.JPG|390px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;problémák&#039;&#039;&#039;nak lehet több típusú több bemenete, és több típusú több kimenete. Ezeket átfogalmazzuk olyanra, hogy a kimenete egyetlen bit legyen (IGEN / NEM), mert ezen algoritmusok felhasználásával is teljesen jól lehet dolgozni, ugyanakkor könnyebb őket nehézség / bonyolultság szerint osztályozni. Az ilyen 1 bites kimenetű problémákat nevezzük &#039;&#039;&#039;eldöntési problémák&#039;&#039;&#039;nak. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az eldöntési problémákat nehézség / bonyolultság szerint osztályokba soroljuk, ezen osztályok között olyan kapcsolatok vannak mint a halmazoknál; ez a fenti rajzon látszik.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;P osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre ismert olyan algoritmus, ami a bemenet polinomjával megadott idő alatt lefut. Vagyis ha a bemenet &#039;&#039;&#039;n&#039;&#039;&#039;, akkor az algoritmusra azt mondjuk, hogy nagy_ordó(valami), ahol a valami &#039;&#039;&#039;n&#039;&#039;&#039; egy polinomja, például n négyzet, n köb, három n négyzet meg négy meg nyolc n köb, és ilyesmik. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre (jelenleg) nem ismert polinom idejű (P-beli) algoritmus, de igen válasz esetén létezik hatékony tanúsítvány. Vagyis, adott egy nagy csomó bemenet és van egy kérdés. P-idő alatt nem tudjuk megmondani a választ, de ha valaki megsúgja hogy a válasz IGEN, akkor P-időben meg tudjuk mondani, hogy ez hülyeség vagy nem hülyeség. Ha azt súgják meg hogy NEM, akkor fogalmunk sincs, P-időben nem tudjuk eldönteni hogy hülyeség-e vagy sem. (&#039;&#039;Ha így lenne, vagyis igen és nem válasz esetén is P-időben ellenőrizni tudnánk a válasz helyességét, akkor az egész probléma P-beli lenne, hiszen megsúgjuk saját magunknak hogy NEM és ha helyes akkor NEM egyébként igen. Persze ha az IGEN-ről P-időben kiderül hogy hülyeség attól még lehet hogy IGEN, csak éppen nem az a konkrét ami meg lett súgva, hanem egy másik.&#039;&#039;) &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;coNP osztály&#039;&#039;&#039; lényegében ugyanaz mint az NP osztály, csak NEM válaszra. Vagyis (jelenleg) nem ismerünk rá P-beli algoritmust, de ha a válasz NEM, akkor P-időben (hatékonyan) ellenőrizni tudjuk, hogy ez-e a jó válasz vagy sem. Szintén, IGEN válasz esetén semmit sem tudunk mondani P-időben, a fenti okok miatt (ami a zárójelben van). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP nehéz&#039;&#039;&#039; osztályba tartozó eldöntési problémák közül bármelyik legalább olyan nehéz, mint bármelyik másik NP-beli eldöntési probléma. Itt jön képbe a Karp-redukció fogalma. Jó dolog sok NP nehéz problémát ismerni, mert akkor ha találunk egy problémát, akkor ha találunk olyan Karp-redukciót, ami azt mutatja, hogy ez a probléma visszavezethető egy közismert NP nehéz problémára, akkor a mi ismeretlen problémánk is NP nehéz lesz. Ez azért van, mert a Karp-redukció tranzitív művelet, továbbá a Karp-redukcónál használt f függvény P-beli, amit kétszer egymás után alkalmazva is még mindig P-beli lesz ez a dolog (az inputok átalakítása). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP teljes&#039;&#039;&#039; problémák azok, amik NP nehezek és NP-beliek is egyszerre. A fenti dolog ide is érvényes, vagyis jó dolog ha sok nevezetes NP teljes problémát ismerünk, mert ha egy ismeretlen problémához találunk egy olyan Karp-redukciót, ami alapján az ismeretlen problémánkat visszavezethetjük egy közismert NP teljes problémára, akkor az ismeretlen problémánkról is kiderült, hogy NP teljes. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Karp-redukció?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
Van egy olyan gépünk, ami kizárólag B problémát tudja megoldani. Nekünk viszont A problémánk van. Ekkor ha szerencsénk van, akkor fogunk találni egy olyan Karp-redukciót, hogy A&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;B. Ennek persze vannak feltételei. Az A eldöntési probléma inputját át kell alakítani B eldöntési probléma inputjává, és meg is kell adni ezt a függvényt, nevezzük el ezt a függvényt f függvénynek. Feltétel, hogy f függvény polinom időben kiszámolható legyen, és ezt be is kell bizonyítani. Továbbá azt is be kell bizonyítani, hogy amennyiben a normális inputra A azt válaszolná, hogy IGEN, akkor az f(normális input)-ra a B szintén ugyanezt válaszolná (és ugyanezt be kell bizonyítani NEM válaszra is). Magyarul a B dolgot megoldó gépet megerőszakoljuk hogy A problémát is hajlandó legyen megoldani. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebből következik néhány dolog. Például az, hogy B legalább olyan nehéz probléma, mint A. Ha például B NP-teljes, akkor A is az. Ha B NP-nehéz, akkor A is az. Ha B coNP-beli, akkor A is az. Ez miért van? Hát azért, mert polinom időben át lehet alakítani az A problémát B-vé. Ezt indirekten könnyen lehet bizonyítani. Indirekt tegyük fel, hogy annak ellenére hogy B probléma NP-teljes és létezik egy olyan Karp-redukció ami A problmémát átalakítja B-vé, szóval mindezek ellenére A probléma P-beli. Ekkor A problémát egy polinom idejű f függvénnyel simán átalakítjuk B problémává, erről szól ugye a Karp-redukció. Ezek után ha bármikor B problémát akarnánk megoldani, akkor az f-függvény fordítva végrehajtásával a B inputját átalakítjuk A inputjává, megoldjuk az A problémát polinom időben, és kész is. Ez ellentmondás mivel B-ről azt mondtuk hogy NP-teljes. A másik érdekesség, hogy ha például egy NP-teljes vagy NP-nehéz problémáról kiderülne hogy P-beli, akkor az összes NP-beliről kiderülne hogy P-beli, mivel az NP-nehéz definíciója az, hogy legalább olyan nehéz mint bármely tetszőleges NP-beli. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Még egy fontos megjegyzés a Karp-redukcióhoz: ugye A problémát akarjuk megoldani, de csak B-t megoldó gépünk van. Az egyik gyakorlaton elhangzott, és fontos tudni, hogy a B-t megoldó gépet az A eldöntési probléma megoldásához csak EGYSZER használhatjuk. Azért mert a Karp-redukció az ilyen.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;SAT probléma? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;A feladat megoldása: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===8. Feladat===&lt;br /&gt;
P-ben van vagy NP-teljes az alábbi eldöntési probléma:&amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Input:&#039;&#039;&#039; irányítatlan G gráf&amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Kérdés:&#039;&#039;&#039; Igaz-e, hogy G-ben vagy van Hamilton-út vagy G 3 színnel színezhető?&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Eldöntési probléma osztályok? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:bonyolultsag_elmelet.JPG|390px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;problémák&#039;&#039;&#039;nak lehet több típusú több bemenete, és több típusú több kimenete. Ezeket átfogalmazzuk olyanra, hogy a kimenete egyetlen bit legyen (IGEN / NEM), mert ezen algoritmusok felhasználásával is teljesen jól lehet dolgozni, ugyanakkor könnyebb őket nehézség / bonyolultság szerint osztályozni. Az ilyen 1 bites kimenetű problémákat nevezzük &#039;&#039;&#039;eldöntési problémák&#039;&#039;&#039;nak. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az eldöntési problémákat nehézség / bonyolultság szerint osztályokba soroljuk, ezen osztályok között olyan kapcsolatok vannak mint a halmazoknál; ez a fenti rajzon látszik.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;P osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre ismert olyan algoritmus, ami a bemenet polinomjával megadott idő alatt lefut. Vagyis ha a bemenet &#039;&#039;&#039;n&#039;&#039;&#039;, akkor az algoritmusra azt mondjuk, hogy nagy_ordó(valami), ahol a valami &#039;&#039;&#039;n&#039;&#039;&#039; egy polinomja, például n négyzet, n köb, három n négyzet meg négy meg nyolc n köb, és ilyesmik. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre (jelenleg) nem ismert polinom idejű (P-beli) algoritmus, de igen válasz esetén létezik hatékony tanúsítvány. Vagyis, adott egy nagy csomó bemenet és van egy kérdés. P-idő alatt nem tudjuk megmondani a választ, de ha valaki megsúgja hogy a válasz IGEN, akkor P-időben meg tudjuk mondani, hogy ez hülyeség vagy nem hülyeség. Ha azt súgják meg hogy NEM, akkor fogalmunk sincs, P-időben nem tudjuk eldönteni hogy hülyeség-e vagy sem. (&#039;&#039;Ha így lenne, vagyis igen és nem válasz esetén is P-időben ellenőrizni tudnánk a válasz helyességét, akkor az egész probléma P-beli lenne, hiszen megsúgjuk saját magunknak hogy NEM és ha helyes akkor NEM egyébként igen. Persze ha az IGEN-ről P-időben kiderül hogy hülyeség attól még lehet hogy IGEN, csak éppen nem az a konkrét ami meg lett súgva, hanem egy másik.&#039;&#039;) &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;coNP osztály&#039;&#039;&#039; lényegében ugyanaz mint az NP osztály, csak NEM válaszra. Vagyis (jelenleg) nem ismerünk rá P-beli algoritmust, de ha a válasz NEM, akkor P-időben (hatékonyan) ellenőrizni tudjuk, hogy ez-e a jó válasz vagy sem. Szintén, IGEN válasz esetén semmit sem tudunk mondani P-időben, a fenti okok miatt (ami a zárójelben van). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP nehéz&#039;&#039;&#039; osztályba tartozó eldöntési problémák közül bármelyik legalább olyan nehéz, mint bármelyik másik NP-beli eldöntési probléma. Itt jön képbe a Karp-redukció fogalma. Jó dolog sok NP nehéz problémát ismerni, mert akkor ha találunk egy problémát, akkor ha találunk olyan Karp-redukciót, ami azt mutatja, hogy ez a probléma visszavezethető egy közismert NP nehéz problémára, akkor a mi ismeretlen problémánk is NP nehéz lesz. Ez azért van, mert a Karp-redukció tranzitív művelet, továbbá a Karp-redukcónál használt f függvény P-beli, amit kétszer egymás után alkalmazva is még mindig P-beli lesz ez a dolog (az inputok átalakítása). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP teljes&#039;&#039;&#039; problémák azok, amik NP nehezek és NP-beliek is egyszerre. A fenti dolog ide is érvényes, vagyis jó dolog ha sok nevezetes NP teljes problémát ismerünk, mert ha egy ismeretlen problémához találunk egy olyan Karp-redukciót, ami alapján az ismeretlen problémánkat visszavezethetjük egy közismert NP teljes problémára, akkor az ismeretlen problémánkról is kiderült, hogy NP teljes. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Karp-redukció?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
Van egy olyan gépünk, ami kizárólag B problémát tudja megoldani. Nekünk viszont A problémánk van. Ekkor ha szerencsénk van, akkor fogunk találni egy olyan Karp-redukciót, hogy A&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;B. Ennek persze vannak feltételei. Az A eldöntési probléma inputját át kell alakítani B eldöntési probléma inputjává, és meg is kell adni ezt a függvényt, nevezzük el ezt a függvényt f függvénynek. Feltétel, hogy f függvény polinom időben kiszámolható legyen, és ezt be is kell bizonyítani. Továbbá azt is be kell bizonyítani, hogy amennyiben a normális inputra A azt válaszolná, hogy IGEN, akkor az f(normális input)-ra a B szintén ugyanezt válaszolná (és ugyanezt be kell bizonyítani NEM válaszra is). Magyarul a B dolgot megoldó gépet megerőszakoljuk hogy A problémát is hajlandó legyen megoldani. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebből következik néhány dolog. Például az, hogy B legalább olyan nehéz probléma, mint A. Ha például B NP-teljes, akkor A is az. Ha B NP-nehéz, akkor A is az. Ha B coNP-beli, akkor A is az. Ez miért van? Hát azért, mert polinom időben át lehet alakítani az A problémát B-vé. Ezt indirekten könnyen lehet bizonyítani. Indirekt tegyük fel, hogy annak ellenére hogy B probléma NP-teljes és létezik egy olyan Karp-redukció ami A problmémát átalakítja B-vé, szóval mindezek ellenére A probléma P-beli. Ekkor A problémát egy polinom idejű f függvénnyel simán átalakítjuk B problémává, erről szól ugye a Karp-redukció. Ezek után ha bármikor B problémát akarnánk megoldani, akkor az f-függvény fordítva végrehajtásával a B inputját átalakítjuk A inputjává, megoldjuk az A problémát polinom időben, és kész is. Ez ellentmondás mivel B-ről azt mondtuk hogy NP-teljes. A másik érdekesség, hogy ha például egy NP-teljes vagy NP-nehéz problémáról kiderülne hogy P-beli, akkor az összes NP-beliről kiderülne hogy P-beli, mivel az NP-nehéz definíciója az, hogy legalább olyan nehéz mint bármely tetszőleges NP-beli. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Még egy fontos megjegyzés a Karp-redukcióhoz: ugye A problémát akarjuk megoldani, de csak B-t megoldó gépünk van. Az egyik gyakorlaton elhangzott, és fontos tudni, hogy a B-t megoldó gépet az A eldöntési probléma megoldásához csak EGYSZER használhatjuk. Azért mert a Karp-redukció az ilyen.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;H-út? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;3 színnel színezhetőség problémája? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;A feladat megoldása: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Wtf1sh</name></author>
	</entry>
	<entry>
		<id>https://vik.wiki/index.php?title=Algoritmuselm%C3%A9let_-_Vizsga,_2013.06.06.&amp;diff=167662</id>
		<title>Algoritmuselmélet - Vizsga, 2013.06.06.</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Algoritmuselm%C3%A9let_-_Vizsga,_2013.06.06.&amp;diff=167662"/>
		<updated>2013-06-10T09:00:33Z</updated>

		<summary type="html">&lt;p&gt;Wtf1sh: /* 2. Feladat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==2013.06.06. vizsga megoldásai==&lt;br /&gt;
===1. Feladat (Van megoldás) ===&lt;br /&gt;
Ebben a feladatban a mélységi bejárással kapcsolatos kérdésekre kell válaszolni.&lt;br /&gt;
* &#039;&#039;&#039;(a)&#039;&#039;&#039; Adja meg a keresztél definícióját!&lt;br /&gt;
* &#039;&#039;&#039;(b)&#039;&#039;&#039; A mélységi bejárás során hogyan lehet a mélységi és a befejezési számok alapján felismerni a keresztéleket? &#039;&#039;Vizsgán megjegyzést fűztek hozzá: irányított gráfokra kell gondolni.&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;(c)&#039;&#039;&#039; Bizonyítsa be, hogy irányítatlan gráf mélységi bejárásánál nincsenek keresztélek!&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&#039;&#039;&#039;a)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Tekintsük a G irányított gráf egy mélységi bejárását és a kapott T mélységi feszítő erdőt. Ezen bejárás szerint G egy x → y éle keresztél, ha x és y nem leszármazottjai egymásnak.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
msz - mélységi szám&amp;lt;br&amp;gt;&lt;br /&gt;
bsz - befejezési szám&amp;lt;br&amp;gt;&lt;br /&gt;
Ha &amp;lt;math&amp;gt; (msz[y] &amp;lt; msz[x]) &amp;lt;/math&amp;gt; és &amp;lt;math&amp;gt;(bsz[y] &amp;gt; 0) &amp;lt;/math&amp;gt;, akkor az x →  y egy keresztél.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:keresztel_1.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;c)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
A &#039;&#039;&#039;b)&#039;&#039;&#039; rész alapján könnyen belátható. Ha lenne keresztél, az azt jelentené, hogy van olyan x → y él, amire fennáll, hogy &amp;lt;math&amp;gt; (msz[y] &amp;lt; msz[x]) &amp;lt;/math&amp;gt; és &amp;lt;math&amp;gt;(bsz[y] &amp;gt; 0) &amp;lt;/math&amp;gt;, vagyis y-ban előbb jártunk, mint x-ben, és y-nak van befejezési száma. Ennél fogva nem lehet keresztél, hiszen ha lenne, akkor y-ból eljuthattunk volna még x-be, mielőtt befejeztük volna.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Másképpen mondva:&#039;&#039;&#039; Nem fejezhettük volna be y-t anélkül, hogy ne jártunk volna x-ben.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:keresztel_2.PNG]]&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===2. Feladat===&lt;br /&gt;
Milyen műveletek vannak a nyitott címzésű hash-elésnél? Hogyan kell megvalósítani a keresést, ha a nyitott címzésű hashelésnél kvadratikus maradék próbát használunk? &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a nyitott címzésű hash-elés?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
lásd: https://wiki.sch.bme.hu/Hash_t%C3%B6mb &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a kvadratikus maradék próba, nyitott címzésű hash-elésnél?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Nyitott címzésű hash-elés műveletei:&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Új elem beszúrása, elem keresése, elem törlése.&amp;lt;br&amp;gt;&lt;br /&gt;
A törlés speciális jelzéssel történik.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Keresés megvalósítása nyitott címzésű hash-elés esetén kvadratikus maradék próbánál:&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
A kvadratikus maradék próba egy álvéletlen próba, ezért másodlagos csomósodáshoz vezethet.&amp;lt;br&amp;gt;&lt;br /&gt;
Legyen M egy 4k + 3 alakú prímszám, ahol k egy egész.&amp;lt;br&amp;gt;&lt;br /&gt;
Ekkor a próbasorozat legyen&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; 0,1^2,(-1)^2, 2^2,(-2)^2,..,((M-1)/2)^2,-((M-1)/2)^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===3. Feladat===&lt;br /&gt;
Adja meg az UNIÓ-HOLVAN adatszerkezet definícióját! (A fákkal való implementálást nem kell leírnia.) Mutassa meg, hogy mikor és hogyan használjuk az UNIÓ és a HOLVAN műveleteket a Kruskal algoritmusban! &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a Kruskal algoritmus?&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;UNIÓ-HOLVAN adatszerkezet definíciója: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mikor és hogyan használjuk az UNIÓ és a HOLVAN műveleteket a Kruskal algoritmusban:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===4. Feladat===&lt;br /&gt;
Pista bácsi fel akar ugrálni egy n hosszú, fekete illetve fehér fokokból álló csigalépcsőn. Legfeljebb k fokot tud ugrani, de arra vigyáznia kell, hogy páros (&amp;gt;=2) sok foknyi ugrás után páratlan sokat és páratlan sok után mindig páros (&amp;gt;=2) sokat ugorjon. Adjon O(nk) lépésszámú algoritmust, amely megmondja, hogy fel tud-e úgy ugrálni a csigalépcső tetejére, hogy csak egyféle színű lépcsőfokot használ. (A lépcső fokai rendszertelenül vannak színezve, a színezést ismerjük.) &lt;br /&gt;
&#039;&#039;Vizsgán megjegyzést fűztek hozzá: a talaj és a legteteje nem színes, csak a lépcsők; csak fölfele (előrefele) ugrál, visszafele nem. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===5. Feladat (Van megoldás)=== &lt;br /&gt;
A hátizsák probléma órán tanult algoritmusát futtattuk egy konkrét inputon, melyben 3 tárgy szerepel. Mi lehetett ez a konkrét input, ha az alábbi táblázat keletkezett?&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 0 &lt;br /&gt;
! 1 &lt;br /&gt;
! 2 &lt;br /&gt;
! 3 &lt;br /&gt;
! 4 &lt;br /&gt;
! 5 &lt;br /&gt;
! 6 &lt;br /&gt;
! 7 &lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
|-&lt;br /&gt;
| 2 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 5 &lt;br /&gt;
| 5 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 15 &lt;br /&gt;
| 15 &lt;br /&gt;
|-&lt;br /&gt;
| 3 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 5 &lt;br /&gt;
| 5 &lt;br /&gt;
| 13 &lt;br /&gt;
| 13 &lt;br /&gt;
| 18 &lt;br /&gt;
| 18 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
Az egyszerűség kedvéért a súly legyen kg, az érték pedig €.&lt;br /&gt;
&lt;br /&gt;
#Az első sor alapján az 1-es csomag értéke €10, súlya 4kg.&lt;br /&gt;
#A második sor alapján a 2-es csomag értéke €5, súlya 2kg.&lt;br /&gt;
#A 3. lépésben 2 lehetőségünk van, a 3. csomag értéke vagy 13-5=€8, vagy 13-0=€13.&lt;br /&gt;
##€8 nem lehet, mert akkor a súlya 2kg lenne, de akkor a [2,3] cellába 8 lenne, nem 5.&lt;br /&gt;
##Így csak a €13 jöhet szóba, súlya pedig 4kg, ami jó megoldás lesz.&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&#039;&#039;Avagy kicsit gépiesebb megoldás:&#039;&#039;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jelölje &amp;lt;math&amp;gt; T[s,cs]&amp;lt;/math&amp;gt; a táblázat &amp;lt;math&amp;gt;[s,cs]&amp;lt;/math&amp;gt; celláját, továbbá &amp;lt;math&amp;gt; V_3&amp;lt;/math&amp;gt; a 3. csomag értékét, &amp;lt;math&amp;gt; S_3&amp;lt;/math&amp;gt; pedig a súlyát.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Tudjuk, hogy &amp;lt;math&amp;gt; T[s,cs]=max\left \{ T[s,cs-1];V_i+T[s-S_i,cs-1] \right \}&amp;lt;/math&amp;gt;, ami ebben az esetben:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; T[4,3]=max\left \{ T[4,2];V_3+T[4-S_3,2] \right \} \rightarrow  13=max\left \{ 10;V_3+T[4-S_3,2] \right \}&amp;lt;/math&amp;gt;, amiből következik, hogy:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; 13=V_3+T[4-S_3,2] \rightarrow V_3 = 13-T[4-S_3,2]\Rightarrow\Rightarrow S_3=4, V_3=13&amp;lt;/math&amp;gt; (Átgondolható, hogy a 3. csomag súlya nem lehet 1,2 vagy 3kg).&lt;br /&gt;
}}&lt;br /&gt;
Tehát végeredményben a megoldás:&lt;br /&gt;
*1-es csomag (€10, 4kg)&lt;br /&gt;
*2-es csomag (€5, 2kg)&lt;br /&gt;
*3-as csomag (€13, 4kg)&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===6. Feladat (Van megoldás)===&lt;br /&gt;
Egy irányítatlan, élsúlyozott gráf az alábbi éllistával adott (zárójelben az élsúlyok):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A:B(1), D(3), E(2); B:A(1), C(3), D(y); D:A(3), C(y), E(x); E:A(2), B(1), D(x).&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;(a)&#039;&#039;&#039; Mi lehet x és y értéke, ha tudjuk, hogy az élsúlyok egész számok, és azt is tudjuk, hogy a B csúcsból indított Prim algoritmus az alábbi sorrendben vette be az értékeket: BE, ED, BA, BC. &#039;&#039;Vizsgán megjegyzést fűztek hozzá: az élsúlyok pozitív egész számok, a pozitív szót kifelejtették véletlenül.&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;(b)&#039;&#039;&#039; Mely éleket és milyen sorrendben választja ki a Kruskal algoritmus? (Ha több megoldás is van, akkor az összeset adja meg!)&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
[[File:2013_06_06_V2_6.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;a)&#039;&#039;&#039; Prim algoritmus - Ugyebár úgy dolgozik, hogy az aktuális fához a vele szomszédos élek közül a legkisebb súlyút veszi be. Prim: BE → ED → BA → BC&lt;br /&gt;
# A fához hozzáadjuk a BE élt.&lt;br /&gt;
# Most az ED élt választottuk. Ez alapján x értéke csak 1 lehet, így &amp;lt;math&amp;gt;x = 1&amp;lt;/math&amp;gt;. (Feladatból kihagyták, hogy pozitív egészekről van szó, amúgy &amp;lt;math&amp;gt;x \le 1&amp;lt;/math&amp;gt; lehetne.)&lt;br /&gt;
# Most az AB élt adjuk hozzá, ez alapján &amp;lt;math&amp;gt;y \ge 1&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Most a BC élt adjuk hozzá, ez alapján &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;, így végül &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b)&#039;&#039;&#039; Kruskal algoritmus - Éleket nagyság szerint sorrendbe rakjuk, és növekvő sorrendben felvesszük a fához az éleket, vigyázva, hogy ne csináljunk kört.&lt;br /&gt;
&lt;br /&gt;
1 súlyú - AB, BE, ED&lt;br /&gt;
&lt;br /&gt;
2 súlyú - AE&lt;br /&gt;
&lt;br /&gt;
3 súlyú - BC, AD, EC (és DC, ha &amp;lt;math&amp;gt;y = 3&amp;lt;/math&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Az összes megoldás:&lt;br /&gt;
&lt;br /&gt;
#Az 1 súlyú éleket &amp;lt;math&amp;gt;3! = 6&amp;lt;/math&amp;gt; féleképpen veheti fel az algoritmus (nem lehet belőlük kört csinálni, így itt nincsen para).&lt;br /&gt;
#Utána megpróbálná felvenni az AE élt, de azzal egy kört kapna, így nem veszi fel. Az AD éllel szintén így járna (~ezeket kéne pirosra színezni, ha olyan lenne a feladat).&lt;br /&gt;
#Maradtak a BC, EC és DC oldalak.&lt;br /&gt;
##Ha &amp;lt;math&amp;gt;y = 3&amp;lt;/math&amp;gt;, akkor ezeket szintén 6 féleképpen veheti fel, tehát összesen 36 féleképpen futhat az algoritmus.&lt;br /&gt;
##Ha &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;, akkor a DC oldal kiesik, a maradék 2 élt 2 féleképpen veheti fel, így 12 féleképpen futhat az algoritmus.}}&lt;br /&gt;
&lt;br /&gt;
===7. Feladat===&lt;br /&gt;
Létezik-e olyan X eldöntési probléma, amire X&amp;lt;big&amp;gt;∉&amp;lt;/big&amp;gt;NP és X&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;SAT egyszerre fennáll? &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Eldöntési probléma osztályok? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:bonyolultsag_elmelet.JPG|390px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;problémák&#039;&#039;&#039;nak lehet több típusú több bemenete, és több típusú több kimenete. Ezeket átfogalmazzuk olyanra, hogy a kimenete egyetlen bit legyen (IGEN / NEM), mert ezen algoritmusok felhasználásával is teljesen jól lehet dolgozni, ugyanakkor könnyebb őket nehézség / bonyolultság szerint osztályozni. Az ilyen 1 bites kimenetű problémákat nevezzük &#039;&#039;&#039;eldöntési problémák&#039;&#039;&#039;nak. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az eldöntési problémákat nehézség / bonyolultság szerint osztályokba soroljuk, ezen osztályok között olyan kapcsolatok vannak mint a halmazoknál; ez a fenti rajzon látszik.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;P osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre ismert olyan algoritmus, ami a bemenet polinomjával megadott idő alatt lefut. Vagyis ha a bemenet &#039;&#039;&#039;n&#039;&#039;&#039;, akkor az algoritmusra azt mondjuk, hogy nagy_ordó(valami), ahol a valami &#039;&#039;&#039;n&#039;&#039;&#039; egy polinomja, például n négyzet, n köb, három n négyzet meg négy meg nyolc n köb, és ilyesmik. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre (jelenleg) nem ismert polinom idejű (P-beli) algoritmus, de igen válasz esetén létezik hatékony tanúsítvány. Vagyis, adott egy nagy csomó bemenet és van egy kérdés. P-idő alatt nem tudjuk megmondani a választ, de ha valaki megsúgja hogy a válasz IGEN, akkor P-időben meg tudjuk mondani, hogy ez hülyeség vagy nem hülyeség. Ha azt súgják meg hogy NEM, akkor fogalmunk sincs, P-időben nem tudjuk eldönteni hogy hülyeség-e vagy sem. (&#039;&#039;Ha így lenne, vagyis igen és nem válasz esetén is P-időben ellenőrizni tudnánk a válasz helyességét, akkor az egész probléma P-beli lenne, hiszen megsúgjuk saját magunknak hogy NEM és ha helyes akkor NEM egyébként igen. Persze ha az IGEN-ről P-időben kiderül hogy hülyeség attól még lehet hogy IGEN, csak éppen nem az a konkrét ami meg lett súgva, hanem egy másik.&#039;&#039;) &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;coNP osztály&#039;&#039;&#039; lényegében ugyanaz mint az NP osztály, csak NEM válaszra. Vagyis (jelenleg) nem ismerünk rá P-beli algoritmust, de ha a válasz NEM, akkor P-időben (hatékonyan) ellenőrizni tudjuk, hogy ez-e a jó válasz vagy sem. Szintén, IGEN válasz esetén semmit sem tudunk mondani P-időben, a fenti okok miatt (ami a zárójelben van). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP nehéz&#039;&#039;&#039; osztályba tartozó eldöntési problémák közül bármelyik legalább olyan nehéz, mint bármelyik másik NP-beli eldöntési probléma. Itt jön képbe a Karp-redukció fogalma. Jó dolog sok NP nehéz problémát ismerni, mert akkor ha találunk egy problémát, akkor ha találunk olyan Karp-redukciót, ami azt mutatja, hogy ez a probléma visszavezethető egy közismert NP nehéz problémára, akkor a mi ismeretlen problémánk is NP nehéz lesz. Ez azért van, mert a Karp-redukció tranzitív művelet, továbbá a Karp-redukcónál használt f függvény P-beli, amit kétszer egymás után alkalmazva is még mindig P-beli lesz ez a dolog (az inputok átalakítása). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP teljes&#039;&#039;&#039; problémák azok, amik NP nehezek és NP-beliek is egyszerre. A fenti dolog ide is érvényes, vagyis jó dolog ha sok nevezetes NP teljes problémát ismerünk, mert ha egy ismeretlen problémához találunk egy olyan Karp-redukciót, ami alapján az ismeretlen problémánkat visszavezethetjük egy közismert NP teljes problémára, akkor az ismeretlen problémánkról is kiderült, hogy NP teljes. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Karp-redukció?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
Van egy olyan gépünk, ami kizárólag B problémát tudja megoldani. Nekünk viszont A problémánk van. Ekkor ha szerencsénk van, akkor fogunk találni egy olyan Karp-redukciót, hogy A&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;B. Ennek persze vannak feltételei. Az A eldöntési probléma inputját át kell alakítani B eldöntési probléma inputjává, és meg is kell adni ezt a függvényt, nevezzük el ezt a függvényt f függvénynek. Feltétel, hogy f függvény polinom időben kiszámolható legyen, és ezt be is kell bizonyítani. Továbbá azt is be kell bizonyítani, hogy amennyiben a normális inputra A azt válaszolná, hogy IGEN, akkor az f(normális input)-ra a B szintén ugyanezt válaszolná (és ugyanezt be kell bizonyítani NEM válaszra is). Magyarul a B dolgot megoldó gépet megerőszakoljuk hogy A problémát is hajlandó legyen megoldani. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebből következik néhány dolog. Például az, hogy B legalább olyan nehéz probléma, mint A. Ha például B NP-teljes, akkor A is az. Ha B NP-nehéz, akkor A is az. Ha B coNP-beli, akkor A is az. Ez miért van? Hát azért, mert polinom időben át lehet alakítani az A problémát B-vé. Ezt indirekten könnyen lehet bizonyítani. Indirekt tegyük fel, hogy annak ellenére hogy B probléma NP-teljes és létezik egy olyan Karp-redukció ami A problmémát átalakítja B-vé, szóval mindezek ellenére A probléma P-beli. Ekkor A problémát egy polinom idejű f függvénnyel simán átalakítjuk B problémává, erről szól ugye a Karp-redukció. Ezek után ha bármikor B problémát akarnánk megoldani, akkor az f-függvény fordítva végrehajtásával a B inputját átalakítjuk A inputjává, megoldjuk az A problémát polinom időben, és kész is. Ez ellentmondás mivel B-ről azt mondtuk hogy NP-teljes. A másik érdekesség, hogy ha például egy NP-teljes vagy NP-nehéz problémáról kiderülne hogy P-beli, akkor az összes NP-beliről kiderülne hogy P-beli, mivel az NP-nehéz definíciója az, hogy legalább olyan nehéz mint bármely tetszőleges NP-beli. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Még egy fontos megjegyzés a Karp-redukcióhoz: ugye A problémát akarjuk megoldani, de csak B-t megoldó gépünk van. Az egyik gyakorlaton elhangzott, és fontos tudni, hogy a B-t megoldó gépet az A eldöntési probléma megoldásához csak EGYSZER használhatjuk. Azért mert a Karp-redukció az ilyen.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;SAT probléma? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;A feladat megoldása: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===8. Feladat===&lt;br /&gt;
P-ben van vagy NP-teljes az alábbi eldöntési probléma:&amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Input:&#039;&#039;&#039; irányítatlan G gráf&amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Kérdés:&#039;&#039;&#039; Igaz-e, hogy G-ben vagy van Hamilton-út vagy G 3 színnel színezhető?&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Eldöntési probléma osztályok? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:bonyolultsag_elmelet.JPG|390px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;problémák&#039;&#039;&#039;nak lehet több típusú több bemenete, és több típusú több kimenete. Ezeket átfogalmazzuk olyanra, hogy a kimenete egyetlen bit legyen (IGEN / NEM), mert ezen algoritmusok felhasználásával is teljesen jól lehet dolgozni, ugyanakkor könnyebb őket nehézség / bonyolultság szerint osztályozni. Az ilyen 1 bites kimenetű problémákat nevezzük &#039;&#039;&#039;eldöntési problémák&#039;&#039;&#039;nak. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az eldöntési problémákat nehézség / bonyolultság szerint osztályokba soroljuk, ezen osztályok között olyan kapcsolatok vannak mint a halmazoknál; ez a fenti rajzon látszik.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;P osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre ismert olyan algoritmus, ami a bemenet polinomjával megadott idő alatt lefut. Vagyis ha a bemenet &#039;&#039;&#039;n&#039;&#039;&#039;, akkor az algoritmusra azt mondjuk, hogy nagy_ordó(valami), ahol a valami &#039;&#039;&#039;n&#039;&#039;&#039; egy polinomja, például n négyzet, n köb, három n négyzet meg négy meg nyolc n köb, és ilyesmik. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre (jelenleg) nem ismert polinom idejű (P-beli) algoritmus, de igen válasz esetén létezik hatékony tanúsítvány. Vagyis, adott egy nagy csomó bemenet és van egy kérdés. P-idő alatt nem tudjuk megmondani a választ, de ha valaki megsúgja hogy a válasz IGEN, akkor P-időben meg tudjuk mondani, hogy ez hülyeség vagy nem hülyeség. Ha azt súgják meg hogy NEM, akkor fogalmunk sincs, P-időben nem tudjuk eldönteni hogy hülyeség-e vagy sem. (&#039;&#039;Ha így lenne, vagyis igen és nem válasz esetén is P-időben ellenőrizni tudnánk a válasz helyességét, akkor az egész probléma P-beli lenne, hiszen megsúgjuk saját magunknak hogy NEM és ha helyes akkor NEM egyébként igen. Persze ha az IGEN-ről P-időben kiderül hogy hülyeség attól még lehet hogy IGEN, csak éppen nem az a konkrét ami meg lett súgva, hanem egy másik.&#039;&#039;) &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;coNP osztály&#039;&#039;&#039; lényegében ugyanaz mint az NP osztály, csak NEM válaszra. Vagyis (jelenleg) nem ismerünk rá P-beli algoritmust, de ha a válasz NEM, akkor P-időben (hatékonyan) ellenőrizni tudjuk, hogy ez-e a jó válasz vagy sem. Szintén, IGEN válasz esetén semmit sem tudunk mondani P-időben, a fenti okok miatt (ami a zárójelben van). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP nehéz&#039;&#039;&#039; osztályba tartozó eldöntési problémák közül bármelyik legalább olyan nehéz, mint bármelyik másik NP-beli eldöntési probléma. Itt jön képbe a Karp-redukció fogalma. Jó dolog sok NP nehéz problémát ismerni, mert akkor ha találunk egy problémát, akkor ha találunk olyan Karp-redukciót, ami azt mutatja, hogy ez a probléma visszavezethető egy közismert NP nehéz problémára, akkor a mi ismeretlen problémánk is NP nehéz lesz. Ez azért van, mert a Karp-redukció tranzitív művelet, továbbá a Karp-redukcónál használt f függvény P-beli, amit kétszer egymás után alkalmazva is még mindig P-beli lesz ez a dolog (az inputok átalakítása). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP teljes&#039;&#039;&#039; problémák azok, amik NP nehezek és NP-beliek is egyszerre. A fenti dolog ide is érvényes, vagyis jó dolog ha sok nevezetes NP teljes problémát ismerünk, mert ha egy ismeretlen problémához találunk egy olyan Karp-redukciót, ami alapján az ismeretlen problémánkat visszavezethetjük egy közismert NP teljes problémára, akkor az ismeretlen problémánkról is kiderült, hogy NP teljes. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Karp-redukció?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
Van egy olyan gépünk, ami kizárólag B problémát tudja megoldani. Nekünk viszont A problémánk van. Ekkor ha szerencsénk van, akkor fogunk találni egy olyan Karp-redukciót, hogy A&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;B. Ennek persze vannak feltételei. Az A eldöntési probléma inputját át kell alakítani B eldöntési probléma inputjává, és meg is kell adni ezt a függvényt, nevezzük el ezt a függvényt f függvénynek. Feltétel, hogy f függvény polinom időben kiszámolható legyen, és ezt be is kell bizonyítani. Továbbá azt is be kell bizonyítani, hogy amennyiben a normális inputra A azt válaszolná, hogy IGEN, akkor az f(normális input)-ra a B szintén ugyanezt válaszolná (és ugyanezt be kell bizonyítani NEM válaszra is). Magyarul a B dolgot megoldó gépet megerőszakoljuk hogy A problémát is hajlandó legyen megoldani. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebből következik néhány dolog. Például az, hogy B legalább olyan nehéz probléma, mint A. Ha például B NP-teljes, akkor A is az. Ha B NP-nehéz, akkor A is az. Ha B coNP-beli, akkor A is az. Ez miért van? Hát azért, mert polinom időben át lehet alakítani az A problémát B-vé. Ezt indirekten könnyen lehet bizonyítani. Indirekt tegyük fel, hogy annak ellenére hogy B probléma NP-teljes és létezik egy olyan Karp-redukció ami A problmémát átalakítja B-vé, szóval mindezek ellenére A probléma P-beli. Ekkor A problémát egy polinom idejű f függvénnyel simán átalakítjuk B problémává, erről szól ugye a Karp-redukció. Ezek után ha bármikor B problémát akarnánk megoldani, akkor az f-függvény fordítva végrehajtásával a B inputját átalakítjuk A inputjává, megoldjuk az A problémát polinom időben, és kész is. Ez ellentmondás mivel B-ről azt mondtuk hogy NP-teljes. A másik érdekesség, hogy ha például egy NP-teljes vagy NP-nehéz problémáról kiderülne hogy P-beli, akkor az összes NP-beliről kiderülne hogy P-beli, mivel az NP-nehéz definíciója az, hogy legalább olyan nehéz mint bármely tetszőleges NP-beli. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Még egy fontos megjegyzés a Karp-redukcióhoz: ugye A problémát akarjuk megoldani, de csak B-t megoldó gépünk van. Az egyik gyakorlaton elhangzott, és fontos tudni, hogy a B-t megoldó gépet az A eldöntési probléma megoldásához csak EGYSZER használhatjuk. Azért mert a Karp-redukció az ilyen.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;H-út? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;3 színnel színezhetőség problémája? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;A feladat megoldása: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Wtf1sh</name></author>
	</entry>
	<entry>
		<id>https://vik.wiki/index.php?title=Algoritmuselm%C3%A9let_-_Vizsga,_2013.06.06.&amp;diff=167661</id>
		<title>Algoritmuselmélet - Vizsga, 2013.06.06.</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Algoritmuselm%C3%A9let_-_Vizsga,_2013.06.06.&amp;diff=167661"/>
		<updated>2013-06-10T08:44:35Z</updated>

		<summary type="html">&lt;p&gt;Wtf1sh: /* 2. Feladat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==2013.06.06. vizsga megoldásai==&lt;br /&gt;
===1. Feladat (Van megoldás) ===&lt;br /&gt;
Ebben a feladatban a mélységi bejárással kapcsolatos kérdésekre kell válaszolni.&lt;br /&gt;
* &#039;&#039;&#039;(a)&#039;&#039;&#039; Adja meg a keresztél definícióját!&lt;br /&gt;
* &#039;&#039;&#039;(b)&#039;&#039;&#039; A mélységi bejárás során hogyan lehet a mélységi és a befejezési számok alapján felismerni a keresztéleket? &#039;&#039;Vizsgán megjegyzést fűztek hozzá: irányított gráfokra kell gondolni.&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;(c)&#039;&#039;&#039; Bizonyítsa be, hogy irányítatlan gráf mélységi bejárásánál nincsenek keresztélek!&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&#039;&#039;&#039;a)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Tekintsük a G irányított gráf egy mélységi bejárását és a kapott T mélységi feszítő erdőt. Ezen bejárás szerint G egy x → y éle keresztél, ha x és y nem leszármazottjai egymásnak.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
msz - mélységi szám&amp;lt;br&amp;gt;&lt;br /&gt;
bsz - befejezési szám&amp;lt;br&amp;gt;&lt;br /&gt;
Ha &amp;lt;math&amp;gt; (msz[y] &amp;lt; msz[x]) &amp;lt;/math&amp;gt; és &amp;lt;math&amp;gt;(bsz[y] &amp;gt; 0) &amp;lt;/math&amp;gt;, akkor az x →  y egy keresztél.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:keresztel_1.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;c)&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
A &#039;&#039;&#039;b)&#039;&#039;&#039; rész alapján könnyen belátható. Ha lenne keresztél, az azt jelentené, hogy van olyan x → y él, amire fennáll, hogy &amp;lt;math&amp;gt; (msz[y] &amp;lt; msz[x]) &amp;lt;/math&amp;gt; és &amp;lt;math&amp;gt;(bsz[y] &amp;gt; 0) &amp;lt;/math&amp;gt;, vagyis y-ban előbb jártunk, mint x-ben, és y-nak van befejezési száma. Ennél fogva nem lehet keresztél, hiszen ha lenne, akkor y-ból eljuthattunk volna még x-be, mielőtt befejeztük volna.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Másképpen mondva:&#039;&#039;&#039; Nem fejezhettük volna be y-t anélkül, hogy ne jártunk volna x-ben.&amp;lt;br&amp;gt;&lt;br /&gt;
[[Fájl:keresztel_2.PNG]]&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===2. Feladat===&lt;br /&gt;
Milyen műveletek vannak a nyitott címzésű hash-elésnél? Hogyan kell megvalósítani a keresést, ha a nyitott címzésű hashelésnél kvadratikus maradék próbát használunk? &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a nyitott címzésű hash-elés?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
lásd: https://wiki.sch.bme.hu/Hash_t%C3%B6mb &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a kvadratikus maradék próba, nyitott címzésű hash-elésnél?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Nyitott címzésű hash-elés műveletei:&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Új elem beszúrása, elem keresése, elem törlése.&amp;lt;br&amp;gt;&lt;br /&gt;
A törlés speciális jelzéssel történik.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Keresés megvalósítása nyitott címzésű hash-elés esetén kvadratikus maradék próbánál:&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===3. Feladat===&lt;br /&gt;
Adja meg az UNIÓ-HOLVAN adatszerkezet definícióját! (A fákkal való implementálást nem kell leírnia.) Mutassa meg, hogy mikor és hogyan használjuk az UNIÓ és a HOLVAN műveleteket a Kruskal algoritmusban! &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mi az a Kruskal algoritmus?&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;UNIÓ-HOLVAN adatszerkezet definíciója: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mikor és hogyan használjuk az UNIÓ és a HOLVAN műveleteket a Kruskal algoritmusban:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===4. Feladat===&lt;br /&gt;
Pista bácsi fel akar ugrálni egy n hosszú, fekete illetve fehér fokokból álló csigalépcsőn. Legfeljebb k fokot tud ugrani, de arra vigyáznia kell, hogy páros (&amp;gt;=2) sok foknyi ugrás után páratlan sokat és páratlan sok után mindig páros (&amp;gt;=2) sokat ugorjon. Adjon O(nk) lépésszámú algoritmust, amely megmondja, hogy fel tud-e úgy ugrálni a csigalépcső tetejére, hogy csak egyféle színű lépcsőfokot használ. (A lépcső fokai rendszertelenül vannak színezve, a színezést ismerjük.) &lt;br /&gt;
&#039;&#039;Vizsgán megjegyzést fűztek hozzá: a talaj és a legteteje nem színes, csak a lépcsők; csak fölfele (előrefele) ugrál, visszafele nem. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
todo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===5. Feladat (Van megoldás)=== &lt;br /&gt;
A hátizsák probléma órán tanult algoritmusát futtattuk egy konkrét inputon, melyben 3 tárgy szerepel. Mi lehetett ez a konkrét input, ha az alábbi táblázat keletkezett?&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 0 &lt;br /&gt;
! 1 &lt;br /&gt;
! 2 &lt;br /&gt;
! 3 &lt;br /&gt;
! 4 &lt;br /&gt;
! 5 &lt;br /&gt;
! 6 &lt;br /&gt;
! 7 &lt;br /&gt;
|-&lt;br /&gt;
| 1 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
|-&lt;br /&gt;
| 2 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 5 &lt;br /&gt;
| 5 &lt;br /&gt;
| 10 &lt;br /&gt;
| 10 &lt;br /&gt;
| 15 &lt;br /&gt;
| 15 &lt;br /&gt;
|-&lt;br /&gt;
| 3 &lt;br /&gt;
| 0 &lt;br /&gt;
| 0 &lt;br /&gt;
| 5 &lt;br /&gt;
| 5 &lt;br /&gt;
| 13 &lt;br /&gt;
| 13 &lt;br /&gt;
| 18 &lt;br /&gt;
| 18 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
Az egyszerűség kedvéért a súly legyen kg, az érték pedig €.&lt;br /&gt;
&lt;br /&gt;
#Az első sor alapján az 1-es csomag értéke €10, súlya 4kg.&lt;br /&gt;
#A második sor alapján a 2-es csomag értéke €5, súlya 2kg.&lt;br /&gt;
#A 3. lépésben 2 lehetőségünk van, a 3. csomag értéke vagy 13-5=€8, vagy 13-0=€13.&lt;br /&gt;
##€8 nem lehet, mert akkor a súlya 2kg lenne, de akkor a [2,3] cellába 8 lenne, nem 5.&lt;br /&gt;
##Így csak a €13 jöhet szóba, súlya pedig 4kg, ami jó megoldás lesz.&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&#039;&#039;Avagy kicsit gépiesebb megoldás:&#039;&#039;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jelölje &amp;lt;math&amp;gt; T[s,cs]&amp;lt;/math&amp;gt; a táblázat &amp;lt;math&amp;gt;[s,cs]&amp;lt;/math&amp;gt; celláját, továbbá &amp;lt;math&amp;gt; V_3&amp;lt;/math&amp;gt; a 3. csomag értékét, &amp;lt;math&amp;gt; S_3&amp;lt;/math&amp;gt; pedig a súlyát.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Tudjuk, hogy &amp;lt;math&amp;gt; T[s,cs]=max\left \{ T[s,cs-1];V_i+T[s-S_i,cs-1] \right \}&amp;lt;/math&amp;gt;, ami ebben az esetben:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; T[4,3]=max\left \{ T[4,2];V_3+T[4-S_3,2] \right \} \rightarrow  13=max\left \{ 10;V_3+T[4-S_3,2] \right \}&amp;lt;/math&amp;gt;, amiből következik, hogy:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; 13=V_3+T[4-S_3,2] \rightarrow V_3 = 13-T[4-S_3,2]\Rightarrow\Rightarrow S_3=4, V_3=13&amp;lt;/math&amp;gt; (Átgondolható, hogy a 3. csomag súlya nem lehet 1,2 vagy 3kg).&lt;br /&gt;
}}&lt;br /&gt;
Tehát végeredményben a megoldás:&lt;br /&gt;
*1-es csomag (€10, 4kg)&lt;br /&gt;
*2-es csomag (€5, 2kg)&lt;br /&gt;
*3-as csomag (€13, 4kg)&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===6. Feladat (Van megoldás)===&lt;br /&gt;
Egy irányítatlan, élsúlyozott gráf az alábbi éllistával adott (zárójelben az élsúlyok):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A:B(1), D(3), E(2); B:A(1), C(3), D(y); D:A(3), C(y), E(x); E:A(2), B(1), D(x).&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;(a)&#039;&#039;&#039; Mi lehet x és y értéke, ha tudjuk, hogy az élsúlyok egész számok, és azt is tudjuk, hogy a B csúcsból indított Prim algoritmus az alábbi sorrendben vette be az értékeket: BE, ED, BA, BC. &#039;&#039;Vizsgán megjegyzést fűztek hozzá: az élsúlyok pozitív egész számok, a pozitív szót kifelejtették véletlenül.&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;(b)&#039;&#039;&#039; Mely éleket és milyen sorrendben választja ki a Kruskal algoritmus? (Ha több megoldás is van, akkor az összeset adja meg!)&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
[[File:2013_06_06_V2_6.png]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;a)&#039;&#039;&#039; Prim algoritmus - Ugyebár úgy dolgozik, hogy az aktuális fához a vele szomszédos élek közül a legkisebb súlyút veszi be. Prim: BE → ED → BA → BC&lt;br /&gt;
# A fához hozzáadjuk a BE élt.&lt;br /&gt;
# Most az ED élt választottuk. Ez alapján x értéke csak 1 lehet, így &amp;lt;math&amp;gt;x = 1&amp;lt;/math&amp;gt;. (Feladatból kihagyták, hogy pozitív egészekről van szó, amúgy &amp;lt;math&amp;gt;x \le 1&amp;lt;/math&amp;gt; lehetne.)&lt;br /&gt;
# Most az AB élt adjuk hozzá, ez alapján &amp;lt;math&amp;gt;y \ge 1&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Most a BC élt adjuk hozzá, ez alapján &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;, így végül &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b)&#039;&#039;&#039; Kruskal algoritmus - Éleket nagyság szerint sorrendbe rakjuk, és növekvő sorrendben felvesszük a fához az éleket, vigyázva, hogy ne csináljunk kört.&lt;br /&gt;
&lt;br /&gt;
1 súlyú - AB, BE, ED&lt;br /&gt;
&lt;br /&gt;
2 súlyú - AE&lt;br /&gt;
&lt;br /&gt;
3 súlyú - BC, AD, EC (és DC, ha &amp;lt;math&amp;gt;y = 3&amp;lt;/math&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Az összes megoldás:&lt;br /&gt;
&lt;br /&gt;
#Az 1 súlyú éleket &amp;lt;math&amp;gt;3! = 6&amp;lt;/math&amp;gt; féleképpen veheti fel az algoritmus (nem lehet belőlük kört csinálni, így itt nincsen para).&lt;br /&gt;
#Utána megpróbálná felvenni az AE élt, de azzal egy kört kapna, így nem veszi fel. Az AD éllel szintén így járna (~ezeket kéne pirosra színezni, ha olyan lenne a feladat).&lt;br /&gt;
#Maradtak a BC, EC és DC oldalak.&lt;br /&gt;
##Ha &amp;lt;math&amp;gt;y = 3&amp;lt;/math&amp;gt;, akkor ezeket szintén 6 féleképpen veheti fel, tehát összesen 36 féleképpen futhat az algoritmus.&lt;br /&gt;
##Ha &amp;lt;math&amp;gt;y \ge 3&amp;lt;/math&amp;gt;, akkor a DC oldal kiesik, a maradék 2 élt 2 féleképpen veheti fel, így 12 féleképpen futhat az algoritmus.}}&lt;br /&gt;
&lt;br /&gt;
===7. Feladat===&lt;br /&gt;
Létezik-e olyan X eldöntési probléma, amire X&amp;lt;big&amp;gt;∉&amp;lt;/big&amp;gt;NP és X&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;SAT egyszerre fennáll? &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Eldöntési probléma osztályok? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:bonyolultsag_elmelet.JPG|390px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;problémák&#039;&#039;&#039;nak lehet több típusú több bemenete, és több típusú több kimenete. Ezeket átfogalmazzuk olyanra, hogy a kimenete egyetlen bit legyen (IGEN / NEM), mert ezen algoritmusok felhasználásával is teljesen jól lehet dolgozni, ugyanakkor könnyebb őket nehézség / bonyolultság szerint osztályozni. Az ilyen 1 bites kimenetű problémákat nevezzük &#039;&#039;&#039;eldöntési problémák&#039;&#039;&#039;nak. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az eldöntési problémákat nehézség / bonyolultság szerint osztályokba soroljuk, ezen osztályok között olyan kapcsolatok vannak mint a halmazoknál; ez a fenti rajzon látszik.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;P osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre ismert olyan algoritmus, ami a bemenet polinomjával megadott idő alatt lefut. Vagyis ha a bemenet &#039;&#039;&#039;n&#039;&#039;&#039;, akkor az algoritmusra azt mondjuk, hogy nagy_ordó(valami), ahol a valami &#039;&#039;&#039;n&#039;&#039;&#039; egy polinomja, például n négyzet, n köb, három n négyzet meg négy meg nyolc n köb, és ilyesmik. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre (jelenleg) nem ismert polinom idejű (P-beli) algoritmus, de igen válasz esetén létezik hatékony tanúsítvány. Vagyis, adott egy nagy csomó bemenet és van egy kérdés. P-idő alatt nem tudjuk megmondani a választ, de ha valaki megsúgja hogy a válasz IGEN, akkor P-időben meg tudjuk mondani, hogy ez hülyeség vagy nem hülyeség. Ha azt súgják meg hogy NEM, akkor fogalmunk sincs, P-időben nem tudjuk eldönteni hogy hülyeség-e vagy sem. (&#039;&#039;Ha így lenne, vagyis igen és nem válasz esetén is P-időben ellenőrizni tudnánk a válasz helyességét, akkor az egész probléma P-beli lenne, hiszen megsúgjuk saját magunknak hogy NEM és ha helyes akkor NEM egyébként igen. Persze ha az IGEN-ről P-időben kiderül hogy hülyeség attól még lehet hogy IGEN, csak éppen nem az a konkrét ami meg lett súgva, hanem egy másik.&#039;&#039;) &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;coNP osztály&#039;&#039;&#039; lényegében ugyanaz mint az NP osztály, csak NEM válaszra. Vagyis (jelenleg) nem ismerünk rá P-beli algoritmust, de ha a válasz NEM, akkor P-időben (hatékonyan) ellenőrizni tudjuk, hogy ez-e a jó válasz vagy sem. Szintén, IGEN válasz esetén semmit sem tudunk mondani P-időben, a fenti okok miatt (ami a zárójelben van). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP nehéz&#039;&#039;&#039; osztályba tartozó eldöntési problémák közül bármelyik legalább olyan nehéz, mint bármelyik másik NP-beli eldöntési probléma. Itt jön képbe a Karp-redukció fogalma. Jó dolog sok NP nehéz problémát ismerni, mert akkor ha találunk egy problémát, akkor ha találunk olyan Karp-redukciót, ami azt mutatja, hogy ez a probléma visszavezethető egy közismert NP nehéz problémára, akkor a mi ismeretlen problémánk is NP nehéz lesz. Ez azért van, mert a Karp-redukció tranzitív művelet, továbbá a Karp-redukcónál használt f függvény P-beli, amit kétszer egymás után alkalmazva is még mindig P-beli lesz ez a dolog (az inputok átalakítása). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP teljes&#039;&#039;&#039; problémák azok, amik NP nehezek és NP-beliek is egyszerre. A fenti dolog ide is érvényes, vagyis jó dolog ha sok nevezetes NP teljes problémát ismerünk, mert ha egy ismeretlen problémához találunk egy olyan Karp-redukciót, ami alapján az ismeretlen problémánkat visszavezethetjük egy közismert NP teljes problémára, akkor az ismeretlen problémánkról is kiderült, hogy NP teljes. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Karp-redukció?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
Van egy olyan gépünk, ami kizárólag B problémát tudja megoldani. Nekünk viszont A problémánk van. Ekkor ha szerencsénk van, akkor fogunk találni egy olyan Karp-redukciót, hogy A&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;B. Ennek persze vannak feltételei. Az A eldöntési probléma inputját át kell alakítani B eldöntési probléma inputjává, és meg is kell adni ezt a függvényt, nevezzük el ezt a függvényt f függvénynek. Feltétel, hogy f függvény polinom időben kiszámolható legyen, és ezt be is kell bizonyítani. Továbbá azt is be kell bizonyítani, hogy amennyiben a normális inputra A azt válaszolná, hogy IGEN, akkor az f(normális input)-ra a B szintén ugyanezt válaszolná (és ugyanezt be kell bizonyítani NEM válaszra is). Magyarul a B dolgot megoldó gépet megerőszakoljuk hogy A problémát is hajlandó legyen megoldani. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebből következik néhány dolog. Például az, hogy B legalább olyan nehéz probléma, mint A. Ha például B NP-teljes, akkor A is az. Ha B NP-nehéz, akkor A is az. Ha B coNP-beli, akkor A is az. Ez miért van? Hát azért, mert polinom időben át lehet alakítani az A problémát B-vé. Ezt indirekten könnyen lehet bizonyítani. Indirekt tegyük fel, hogy annak ellenére hogy B probléma NP-teljes és létezik egy olyan Karp-redukció ami A problmémát átalakítja B-vé, szóval mindezek ellenére A probléma P-beli. Ekkor A problémát egy polinom idejű f függvénnyel simán átalakítjuk B problémává, erről szól ugye a Karp-redukció. Ezek után ha bármikor B problémát akarnánk megoldani, akkor az f-függvény fordítva végrehajtásával a B inputját átalakítjuk A inputjává, megoldjuk az A problémát polinom időben, és kész is. Ez ellentmondás mivel B-ről azt mondtuk hogy NP-teljes. A másik érdekesség, hogy ha például egy NP-teljes vagy NP-nehéz problémáról kiderülne hogy P-beli, akkor az összes NP-beliről kiderülne hogy P-beli, mivel az NP-nehéz definíciója az, hogy legalább olyan nehéz mint bármely tetszőleges NP-beli. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Még egy fontos megjegyzés a Karp-redukcióhoz: ugye A problémát akarjuk megoldani, de csak B-t megoldó gépünk van. Az egyik gyakorlaton elhangzott, és fontos tudni, hogy a B-t megoldó gépet az A eldöntési probléma megoldásához csak EGYSZER használhatjuk. Azért mert a Karp-redukció az ilyen.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;SAT probléma? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;A feladat megoldása: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===8. Feladat===&lt;br /&gt;
P-ben van vagy NP-teljes az alábbi eldöntési probléma:&amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Input:&#039;&#039;&#039; irányítatlan G gráf&amp;lt;br&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Kérdés:&#039;&#039;&#039; Igaz-e, hogy G-ben vagy van Hamilton-út vagy G 3 színnel színezhető?&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Megoldás&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&lt;br /&gt;
{{Rejtett&lt;br /&gt;
|mutatott=&amp;lt;big&amp;gt;&#039;&#039;&#039;Kiegészítések a feladat megértéséhez&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
|szöveg=&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Eldöntési probléma osztályok? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:bonyolultsag_elmelet.JPG|390px]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;problémák&#039;&#039;&#039;nak lehet több típusú több bemenete, és több típusú több kimenete. Ezeket átfogalmazzuk olyanra, hogy a kimenete egyetlen bit legyen (IGEN / NEM), mert ezen algoritmusok felhasználásával is teljesen jól lehet dolgozni, ugyanakkor könnyebb őket nehézség / bonyolultság szerint osztályozni. Az ilyen 1 bites kimenetű problémákat nevezzük &#039;&#039;&#039;eldöntési problémák&#039;&#039;&#039;nak. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az eldöntési problémákat nehézség / bonyolultság szerint osztályokba soroljuk, ezen osztályok között olyan kapcsolatok vannak mint a halmazoknál; ez a fenti rajzon látszik.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;P osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre ismert olyan algoritmus, ami a bemenet polinomjával megadott idő alatt lefut. Vagyis ha a bemenet &#039;&#039;&#039;n&#039;&#039;&#039;, akkor az algoritmusra azt mondjuk, hogy nagy_ordó(valami), ahol a valami &#039;&#039;&#039;n&#039;&#039;&#039; egy polinomja, például n négyzet, n köb, három n négyzet meg négy meg nyolc n köb, és ilyesmik. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP osztály&#039;&#039;&#039;ba olyan problémák tartoznak, amelyekre (jelenleg) nem ismert polinom idejű (P-beli) algoritmus, de igen válasz esetén létezik hatékony tanúsítvány. Vagyis, adott egy nagy csomó bemenet és van egy kérdés. P-idő alatt nem tudjuk megmondani a választ, de ha valaki megsúgja hogy a válasz IGEN, akkor P-időben meg tudjuk mondani, hogy ez hülyeség vagy nem hülyeség. Ha azt súgják meg hogy NEM, akkor fogalmunk sincs, P-időben nem tudjuk eldönteni hogy hülyeség-e vagy sem. (&#039;&#039;Ha így lenne, vagyis igen és nem válasz esetén is P-időben ellenőrizni tudnánk a válasz helyességét, akkor az egész probléma P-beli lenne, hiszen megsúgjuk saját magunknak hogy NEM és ha helyes akkor NEM egyébként igen. Persze ha az IGEN-ről P-időben kiderül hogy hülyeség attól még lehet hogy IGEN, csak éppen nem az a konkrét ami meg lett súgva, hanem egy másik.&#039;&#039;) &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;coNP osztály&#039;&#039;&#039; lényegében ugyanaz mint az NP osztály, csak NEM válaszra. Vagyis (jelenleg) nem ismerünk rá P-beli algoritmust, de ha a válasz NEM, akkor P-időben (hatékonyan) ellenőrizni tudjuk, hogy ez-e a jó válasz vagy sem. Szintén, IGEN válasz esetén semmit sem tudunk mondani P-időben, a fenti okok miatt (ami a zárójelben van). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP nehéz&#039;&#039;&#039; osztályba tartozó eldöntési problémák közül bármelyik legalább olyan nehéz, mint bármelyik másik NP-beli eldöntési probléma. Itt jön képbe a Karp-redukció fogalma. Jó dolog sok NP nehéz problémát ismerni, mert akkor ha találunk egy problémát, akkor ha találunk olyan Karp-redukciót, ami azt mutatja, hogy ez a probléma visszavezethető egy közismert NP nehéz problémára, akkor a mi ismeretlen problémánk is NP nehéz lesz. Ez azért van, mert a Karp-redukció tranzitív művelet, továbbá a Karp-redukcónál használt f függvény P-beli, amit kétszer egymás után alkalmazva is még mindig P-beli lesz ez a dolog (az inputok átalakítása). &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az &#039;&#039;&#039;NP teljes&#039;&#039;&#039; problémák azok, amik NP nehezek és NP-beliek is egyszerre. A fenti dolog ide is érvényes, vagyis jó dolog ha sok nevezetes NP teljes problémát ismerünk, mert ha egy ismeretlen problémához találunk egy olyan Karp-redukciót, ami alapján az ismeretlen problémánkat visszavezethetjük egy közismert NP teljes problémára, akkor az ismeretlen problémánkról is kiderült, hogy NP teljes. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;Karp-redukció?&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
Van egy olyan gépünk, ami kizárólag B problémát tudja megoldani. Nekünk viszont A problémánk van. Ekkor ha szerencsénk van, akkor fogunk találni egy olyan Karp-redukciót, hogy A&amp;lt;big&amp;gt;≺&amp;lt;/big&amp;gt;B. Ennek persze vannak feltételei. Az A eldöntési probléma inputját át kell alakítani B eldöntési probléma inputjává, és meg is kell adni ezt a függvényt, nevezzük el ezt a függvényt f függvénynek. Feltétel, hogy f függvény polinom időben kiszámolható legyen, és ezt be is kell bizonyítani. Továbbá azt is be kell bizonyítani, hogy amennyiben a normális inputra A azt válaszolná, hogy IGEN, akkor az f(normális input)-ra a B szintén ugyanezt válaszolná (és ugyanezt be kell bizonyítani NEM válaszra is). Magyarul a B dolgot megoldó gépet megerőszakoljuk hogy A problémát is hajlandó legyen megoldani. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ebből következik néhány dolog. Például az, hogy B legalább olyan nehéz probléma, mint A. Ha például B NP-teljes, akkor A is az. Ha B NP-nehéz, akkor A is az. Ha B coNP-beli, akkor A is az. Ez miért van? Hát azért, mert polinom időben át lehet alakítani az A problémát B-vé. Ezt indirekten könnyen lehet bizonyítani. Indirekt tegyük fel, hogy annak ellenére hogy B probléma NP-teljes és létezik egy olyan Karp-redukció ami A problmémát átalakítja B-vé, szóval mindezek ellenére A probléma P-beli. Ekkor A problémát egy polinom idejű f függvénnyel simán átalakítjuk B problémává, erről szól ugye a Karp-redukció. Ezek után ha bármikor B problémát akarnánk megoldani, akkor az f-függvény fordítva végrehajtásával a B inputját átalakítjuk A inputjává, megoldjuk az A problémát polinom időben, és kész is. Ez ellentmondás mivel B-ről azt mondtuk hogy NP-teljes. A másik érdekesség, hogy ha például egy NP-teljes vagy NP-nehéz problémáról kiderülne hogy P-beli, akkor az összes NP-beliről kiderülne hogy P-beli, mivel az NP-nehéz definíciója az, hogy legalább olyan nehéz mint bármely tetszőleges NP-beli. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Még egy fontos megjegyzés a Karp-redukcióhoz: ugye A problémát akarjuk megoldani, de csak B-t megoldó gépünk van. Az egyik gyakorlaton elhangzott, és fontos tudni, hogy a B-t megoldó gépet az A eldöntési probléma megoldásához csak EGYSZER használhatjuk. Azért mert a Karp-redukció az ilyen.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;H-út? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;3 színnel színezhetőség problémája? &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;A feladat megoldása: &#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
todo &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Wtf1sh</name></author>
	</entry>
</feed>