AlgElmeletiKerdesekKidolgozas

A VIK Wikiből

Ez az oldal a korábbi SCH wikiről lett áthozva.

Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.


  • Lehet, hogy rossz.
  • Lehet, hogy nem ezt akarják válasznak.

Cs. Cs. D., cc699 kukac hszk.bme.hu, 2009. január, v0.2

Írja le a piros-kék algoritmust a piros és kék szabályokkal együtt!

Az algoritmust minimális súlyú feszítőfák keresésére használják. A gráf éleit kiszínezzük pirosra, vagy kékre, úgy hogy közben a gráf végig takaros legyen. Végül, ha már minden élet kiszíneztünk, a kék élek összessége adja a keresett eredményt. f Takaros színezés: gráf éleinek színezésére az algoritmus minden szakaszában igaz, hogy van olyan minimális költségű feszítőfája, ami az összes kék élet tartalmazza, és egyetlen piros élet sem tartalmaz.

Az alábbi két szabályt tetszőlegesen alkalmazzuk addig, míg van színezetlen él a gráfban:

  • Kék szabály: Kiválasztunk egy olyan nem üres csúcshalmazt, amiből nem vezet ki kék él. Ezután egy legkisebb súlyú -ből kimenő (színtelen) élet fessünk kékre.
  • Piros szabály: Válasszunk -ben egy egyszerű kört, amiben nincs piros él. Ezután a legnagyobb súlyú színtelen élet fessük pirosra.

A szabályok alkalmazása után mindig takaros színezést kapunk, és mindig tudjuk folytatni az algoritmust addig, míg minden élet ki nem színezünk.

Tk. 153. oldal

Definiálja, hogy mikor nevezünk egy nyelvet NP-teljesnek, és adjon meg két ismerten NP-teljes nyelvet a definíciójukkal együtt!

Az nyelv NP-teljes, ha , és minden nyelv esetén létezik Karp-redukció.

3-SZÍN nyelv: A három színnel kiszínezhető gráfokból álló nyelv. NP-teljes, mert 3-SAT 3-SZIN, és 3-SAT NP-teljes.

H nyelv: A H Hamilton-kört tartalmazó gráfokból álló nyelv. NP-teljes, mert IH H és IH NP-terljes.

Tk. 271. oldal

Definiálja a közelítő algoritmus fogalmát maximalizálási problémákra! Írja le az általános gráfban maximális méretű párosítás keresésének problémájára adott 2-közelítő algoritmust, és bizonyítsa is be, hogy az adott algoritmus 2-közelítő!

TODO

Definiálja a 2-3 fákat. Írja le a BESZÚR művelet megvalósítását, és adja meg a lépésszámát is. Indoklás nem szükséges.

A 2-3 fa egy olyan keresőfa, amelyben a tárolni kívánt rekordok a fa leveleiben vannak, balról jobbra növekvő sorrendben. Egy belső csúcs kétféle lehet: 2 kulcsból és 3 mutatóból áll, vagy 1 kucsból és két mutatóból áll:

A kulcsokra fennáll, hogy , valamint minden kulcsa kisebb, mint , -ben a legkisebb kulcs, -ban a legkisebb kulcs.

A fa levelei a györkértől egyforma távolságra vannak.

BESZÚR: Először KERES(s,S)-t csinálunk, ha megtaláljuk -t, akkor végeztünk, ha nem akkor, ha a legalsó belső csúcs a kereső út mentén:

  • 1 kulcsú: A megfelelő helyre beszúrjuk az -t attól függően, hogy a másik két levélnél kisebb, nagyobb, vagy köztük van. A kulcsokat is eszerint módosítjuk.
  • 2 kulcsú: A csúcsvágás módszerét alkalmazzuk. A kétkulcsú rekordot szétbontjuk két darab egykulcsúra, kiegészítve -el. A keletkező új csúcsot be kell jegyeznünk a régi (szétvágott) csúcs apjába ugyanezzel a módszerrel. Ha esetleg ez a folyamat felgyűrűzik a gyökérig, akkor egy új gyökeret veszünk fel és a mutatókat a két szétvágott részfára állítjuk.

Tk. 67. oldal

Definiálja a Karp-redukciót, és bizonyítsa be, hogy ha és , akkor .

Az leképezés az nyelv Karp-redukciója az nyelvre, ha

  • Tetszőleges szóra akkor és csak akkor, ha .
  • , azaz (leképezés) polinom időben számolható.

-nek van Karp-redukciója -re.

A kérdésben gonoszul meg vannak cserélve az indexek :-)

A definíciót használva célunk az, hogy polinom időben felismerjük -t. Először kiszámoljuk -et. Definíció b pontja szerint, ennek időigénye max. . Ezután el kell döntenünk, hogy igaz-e? Mivel , ezért ez polinom idejű, vagyis összességében ideig tart. A definíció a pontja szerint annak az eldöntése, hogy azonos annak az eldöntésével, hogy , ezt pedig idő alatt eldöntöttük, vagyis .

Tk. 270. oldal

Definiálja az euklideszi utazóügynok problémát, és vázlatosan írja le a megoldására szolgáló közelítő algoritmust. Adja meg az algoritmus approximációs tényezőjét is. Indoklás nem szükséges.

Probléma: Adott egy pontú teljes gráf, és egy éleihez rendelt nem negatív súlyfüggvény. A súlyfüggvényre teljesül a háromszög-egyenlőtlenség, vagyis -re . Keressünk minimális összsúlyú Hamilton-kört! (Az ebből származó eldöntési probléma egyébként NP-teljes.)

Közelítő algoritmus:

  • Vegyük gráf minimális összsúlyú feszítőfáját\footnote{Kruskal vagy Prim módszerrel könnyen megy.}(), legyen az összsúlya .
  • Tegyük irányítottá a -t: élből élek lesznek. ()
  • Mivel -ben minden pontnak a ki-foka megegyezik a be-fokával, így van benne Euler-séta(kör).
  • Az Euler-séta pontjai legyenek: . Ennek összsúlya .
  • Ezután a Hamilton-kör-t az -tól kezdjük és felveszünk hozzá pontokat úgy, hogy olyan pontokat vegyünk fel, amik az Euler-sétában legelőrébb vannak (, ahol min.), de nem szerepelnek még a Hamilton-körben. Ha már nincs ilyen pont, akkor az -t mégegyszer hozzávéve zárjuk a kört.
  • A Hamilton-kör súlya legfeljebb annyi, mint az Euler-séta súlya (felhasználva a háromszög-egyenlőtlenséget), tehát . Bármely Hamilton-körből egy élet elhagyva Euler-sétát kapnánk, aminek a súlya min. , tehát 2-szeres szorzó erejéig közelíti az algoritmus az optimálist.

Tk. 308. oldal

Definiálja a piros-fekete fákat. Mi a kapcsolat egy csúcs magassága és fekete magassága között? Állításait bizonyítsa is be!

A piros-fekete fa egy bináris fa, amelyre igazak az alábbi szabályok:

  • levél csúcsnak két fia van
  • elemeket a belső csúcsokban tárolunk, nem a levelekben
  • keresőfa tulajdonság érvényesül
  • csúcs piros vagy fekete
  • a gyökér és a levelek feketék
  • egy piros csúcs mindkét gyereke fekete
  • csúcsra, az összes -ből levélbe vezető úton ugyanannyi fekete csúcs van.

Legyen a csúcs magassága, vagyis, hogy hány élből áll a -ből levélbe vezető leghosszabb út (lefelé), ha levél, akkor .

Legyen a csúcs fekete magassága, vagyis, hogy -ből levélbe vezető utakon hány fekete csúcsot látunk (-t kivéve).

Ekkor csúcsra teljesül, hogy

Bizonyítás: triv. igaz, valamint mivel piros csúcsok gyerekei feketék, és a levelek is feketék, a csúcsok legalább fele fekete.

Írja le a mélységi bejárás algoritmusát. (A pontok kétféle számozása és az élek osztályozása nem kell.) Mennyi az algoritmus lépésszáma mátrixos, illetve éllistás megadás esetén és miért?

Először addig megyünk előre az élek mentén, amíg olyan pontba nem érkezünk, ahonnan már nem tudunk még meg nem látogatott pontba menni. Ekkor visszalépünk az utolsó előtti pontra, és az ő szomszédait járjuk be, ha ott is végeztünk, akkor még egyet visszalépünk, s.í.t. Egy pontot akkor nevezünk befejezettnek, ha már minden szomszédját meglátogattuk. Ha a kezdőpontot is bejefeztük, akkor bejártuk a gráfot, vagy legalábbis egy komponensét.

Pszeudo kóddal:

procedure bejar
	begin
	for v:= 1 to n do
		bejarva[v] := false;
	for v:= 1 to n do
		if bejarva[v] = false then
			mb(v)
	end

procedure mb(v : node)
	var
		w: node;
	begin
	bejarva[v] = true;
	(*a szomszedok bejarasa*)
	for minden L[v]-beli w csucsra do 
		if bejarva[w] = hamis then
			mb(w)
	end

Éllistás bejárásnál a lépésszám , mert minden csúcsra egyszer hívjuk meg az mb()-t, és ott minden csúcs szomszédját egyszer vizsgáljuk meg. Szerintem a mátrixos reprezentációnál is lineáris idejű az algoritmus, de egyébként TODO.

Tk. 129. oldal


TODO

  • Definiálja az univerzális és a megállási nyelvet.
  • Mi a vizsonyuk az RE osztályhoz? (Indoklás nem kell.)
  • Az univerzális nyelv benne van-e az R osztályban? Válaszát indokolja is!

Írja le a legrövidebb utak keresésére szolgáló Dijkstra-algoritmust. Mi az algoritmus alkalmazásának feltétele? (Az algoritmus helyességét nem kell bizonyítani.) Mennyi az algoritmus lépésszáma?

Az élsúlyok nem negatív számok. A KÉSZ halmazba tesszük azokat a csúcsokat, amelyek legrövidebb távolságát már ismerjük. D tömbben a csúcsok eddigi legrövidebb távolsága van, az él súlyát jelenti.

Pszeudo kód:

KESZ := {s}
for minden v in V csucsra do
	D[v] := C[s,v];
for i:= 1 to n-1 do begin
	x := az a csucs, V \ KESZ-bol, hogy D[x] min.;
	for minden w in V \ KESZ csucsra do
		D[w] := min(D[w], D[x] + C[x,w]);
end

Az első ciklus időt emészt fel, a második ciklusban a minimum keresés és a belső ciklus is , és ezek -szer futnak le, tehát összességében a lépésszám. Ezt éllistával, a D-tömb szerint kupacba rendezve a még nem kész csúcsúkat -re vihető le, megfelelő -kupaccal pedig akár -re is.

Definiálja az UNIÓ-HOLVAN adatszerkezetet. Mennyi az egyes műveletek lépésszáma tömbös illetve fás megvalósítás esetén? (Indoklás nem szükséges.)

Az UNIÓ-HOLVAN adatszerkezet egy véges halmaz partícióit (egymással diszjunkt, de összegezve -t kiadó halmazok) tárolja. Két műveletet értelmezünk ezzel kapcsolatban: az UNIÓ egyesít két partíciót, a HOLVAN() visszadja, hogy melyik partícióban van.

Az elemeket egy fában és egy tömbben tároljuk. A fa csúcsaiban tároljuk az adott halmaz elemeit, a halmaz neve az őt ábrázoló fa gyökerében van. Két halmaz UNIÓ-jakor a nagyobbik fa gyökeréhez hozzácsapjuk gyerekként a kisebbik fa gyökerét. A tömböt az elemeivel indexeljük, ami tartalmaz egy pointert, ami a fában az adott indexű elemre mutat. A HOLVAN hívás során ez alapján a mutató alapján elindulva a szülő pointereket követve eljuthatunk a fa gyökeréig, és megtudhatjuk, hogy melyik halmazban van az adott elem. A HOLVAN költsége , az UNIÓ költsége .

Tk. 163. oldal

Definiálja a P és az NP nyelvosztályt; mi az egymáshoz való viszonyuk? Válaszát indokolja is meg.

P azon nyelvek halmazát jelöli, amelyekhez van olyan algoritmus, ami bemenetre eldönti, hogy Értelmezés sikertelen (formai hiba): {\displaystyle x \stackrel{\text{\tiny ?}}{\in} P} , és az algoritmus lépésszáma , konstans pozitív számra.

NP azon L nyelvek halmaza, amelyre teljesül, hogy konstans és nyelv, valamint

Viszonyuk: . Nyilvánvaló, hiszen tanú nélkül is eldönthető polinom időben, hogy Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle x \stackrel{\text{\tiny ?}}{\in} L} .


Átalakítás LaTeX forrásból: aldaris - 2009.01.27.

Összeállította: Csaba - 2009.01.26.