feladat: kiralyno a sakk tablan ugy hogy egyik sem uti a masikat. Van ilyen felallas es ha van akkor hany?
Brute force: osszes felallast kiprobaljuk, ez esetet kell leellenorizni
Heurisztika 1: Minden oszlopba csak egy kiralnyot rakhatunk, igy mar csak esetet kell leellenorizni.
Heurisztika 2: Minden soronkent is csak egy kiralynot rakhatunk, igy mar csak lehetoseg van.
Backtracking: Addig rakjuk a kiralnyoket ameddig el nem rontjuk, ha elrontjuk akkor visszalepunk.

feladat: Ki lehet-e szinezni a grafot szinnel, azaz
-re lehet-e a pirosak halmaza? Ha ugy, hogy akkor nem lehet a pirosak halmaza.
Meg eldontendo, hogy a maradek csucsok, azaz kiszinezheto-e szinnel.
Tehat igy osszesen -szer kell futtatni egy -szinezhetoseget, mert az elso lepesben minden -re futtatni kell.

feladat: Mennyi az szama a grafnak, azaz mekkora a maximalis fuggetlen csucshalmaza.

Ha akkor konnyen szamithato idoben
Egy ilyen grafnak minden komponense a kovetkezo lehet - izolalt csucs, ut vagy kor.

All.: Ha egy komponensnek csucsa van, akkor a kovetkezo ket eset van:

  • ut
  • kor

Keressuk az maximalis fuggetlen csucshalmazt.

MFTL(G):
	I := {}
	DO_MFTL(G, I)

DO_MFTL(G, I):
	IF Delta(G) <= 2 THEN
		// BFS-el megkeressuk a komponenseket es minden komponensnek a felet vesszuk (a fenti allitas miatt)
		Szelessegi G -> I'
		RETURN (I U I')
	ELSE
		// van olyan x, amire d(x) > 2
		// x benne van a max ftl csucshalmazban (ekkor x szomszedai is kivesszuk)
		x := legalabb 3-ad foku csucs
		I_1 := DO_MFTL(G - x - N(x), I + x)  // note, a set is passed by value

		// x nincs benne a max ftl csucshalmazban
		I_2 := DO_MFTL(G - x, I)

		IF |I_1| + 1 > |I_2| THEN
			I = I U I_1
		ELSE
			I = I U I_2
		RETURN I

Legyen a rekurziv hivasok szama, igy a vegso futasi ido lesz mert minden rekurziv hivasban lepest csinalunk.

All.: , mert egy ilyen rekurziv algoritmus nem roszabb mint egy exponencialis futasi ido.

Tehat a vegso futasi ido

feladat: Mennyi a szama a grafnak, azaz a legkisebb lefogo csucshalmaz merete.

Tetel (Gallai):

INPUT: graf,
OUTPUT: Letezik-e csucsu lefogo csucshalmaz -ben

// Vertex Cover
VC(G, k):
	DO_VC(G, k)

// Vertex Cover helper function
DO_VC(G, k):
	IF k < 0 THEN RETURN False    // lehetetlen feladat 
	IF |E(G)| = 0 THEN RETURN {}  // 0 elt le tudunk fogni barhogyan
	IF k = 0 THEN RETURN False    // lehetetlen feladat

	// minden elnek pontosan az egyik vege egy lefogo csucs
	uv in E
	T_1 := DO_VC(G - u, k - 1)               // az el egyik vege van benne
	IF T_1 != False THEN RETURN (T_1 U {u})  // ha megoldhato a feladat u-val akkor keszen vagyunk
	
	T_2 := DO_VC(G - v, k - 1)               // az el masik vege van benne
	IF T_2 != False THEN RETURN (T_2 U {v})  // ha megoldhato a feladat v-vel akkor keszen vagyunk

	RETURN False  // sem u-val, sem v-vel nem megoldhato a reszfeladat, tehat a lehetetlen

futasi ido:

// Vertex Cover 2
VC2(G, k):
	DO_VC2(G, k)

// Vertex Cover 2 helper function
DO_VC2(G, k):
	IF k < 0 THEN RETURN False    // lehetetlen feladat
	IF |E(G)| = 0 THEN RETURN {}  // trivialis feladat
	IF k = 0 THEN RETURN False    // lehetetlen feladat

	v := G-nek egy max foku csucsa
	IF d(v) <= 2 THEN
		T := legkisebb lefogo spec esetben
		IF |T| <= k THEN 
			RETURN T
		ELSE
			RETURN False

	// v egy lefogo csucs
	T_1 := DO_VC2(G - v, k - 1)
	IF T_1 != False THEN RETURN (T_1 U {v})

	// v nem egy lefogo csucs, igy az osszes elet a szomszedai fogjak le
	T_2 := DO_VC2(G - v - N(v), k - d(v))
	IF T_2 != False THEN RETURN (T_2 U N(v))

	RETURN False

Legyen a rekurziv hivasok szama. Ekkor

Tehat a vegso futasi ido

Meta heurisztikak

  • Simulated annealing
  • Tabu search
  • Flood fill
  • Go with the winners
  • Genetic algorithms