Megj.: Lehet hogy egy altalanosan nehez feladatot kapunk, de ha valami spec esetet akarunk megoldani akkor lehet hogy meg lehet oldani polinomialis idoben.
Kozelito megoldasok
A kovetkezok adottak:
- input megengedett megoldasok halmaza
- kiertekelesi fuggveny
Feladat: keressunk megengedett megoldast, amire minimalis.
Def.: Egy algoritmust -kozelitonek hivunk, ha inputra, melyre , kiad egy -et, melyre .
Ahol azt a megoldast jeloli amire minimalis.
Megj.: Ha maximumot keresunk akkor
Egyszeru peldak:
- Adott iranyitott graf, keressunk reszgrafot, ami aciklikus es maximalis.
-kozelites konnyen elerheto a kovetkezo modon:
Szamozzuk meg a csucsokat es legyen az elore elek halmaza es a vissza elek halmaza. Nyilvan egyik sem tartalmaz kort mert mindketto topologikusan van rendezve. Mivel ezert
- Adott iranyitatlan graf, keressuk -t legkisebb lefogo csucshalmaz
-kozelito algoritmus:
Legyen egy nem bovitheto parositas. Ekkor
Igy ez nyilvan egy -kozelito algoritmus.
Metrikus utazo ugynok
Input: graf,
Def.: Egy tura egy olyan seta amely minden csucsot legalabb egyszer erint.
Feladat: Egy minimalis koltsegu turat talalni.
-kozelito algoritmus a metrikus utazo ugynok feladatra:
- Keressuk meg a minimalis koltsegu feszito fat
- -bol kepzunk egy koltsegu turat ugy, hogy a feszito fat bejarjuk ugy. Ekkor minden elen pontosan ketszer fogunk atmenni.
Ekkor belathato a kovetkezo:
Def.: Az algoritmus relativ hibaval kozelit, ha -kozelito
Megj.: max:
Def.: Polinomial Time Approximation Scheme (PTAS)
Minden -hoz adunk egy polinomialis algoritmust, ami relativ hibaval kozelit.
Def.: Fully PTAS (FPTAS)
Letezik algoritmus relativ hibaval
Def.: Efficient PTAS (EPTAS)
Letezik algoritmus relativ hibaval
Hatizsak feladat (again)
Dinamikus Programozas algoritmus
Tudunk egy felso korlatot adni az optimum-ra: .
Peldaul de ennel tudnk jobbat is adni.
kiszamoljuk, hogy mi a legkisebb hatizsak, amibe ki tudunk vinni erteket az elso targy kozul.
T(0, 0) = 0
FOR j = 1 .. E:
T(0, j) := W + 1 // ez jeloli, hogy nem tudunk kivinni
FOR i = 1 .. n:
FOR j = 0 .. E:
T(i, j) := T(i-1, j)
FOR j = e_i .. E:
IF T(i-1, j-e_i) + w_i < T(i, j) THEN
T(i, j) := T(i-1, j-e_i) + w_i
FOR j = E .. 0 (-1):
IF T(n, j) <= W THEN
e := j
j := 0
I := {} // a kivitt targyak halmaza
FOR i = n .. 1 (-1):
IF T(i, e) < T(i-1, e) THEN
I := I U {i}
e := e - e_i
de ez nem polinomialis, mert az input a targyak sulyai es ertekei amik szamjegyekkel vannak megadva. Tehat az input merete
Ibarra–Kim approximációs algoritmusa
Legyen adva darab tárgy pozitív egész súlyokkal és értékekkel, valamint egy súlykorlát, továbbá egy pontossági korlát. Tegyük fel, hogy minden -re , hiszen a súlykorlátnál nehezebb tárgyakat úgysem vihetnénk magunkkal. Legyen
valamint legyen egy olyan részhalmaz, amire a maximum éppen eléretik.
Legyen most egy késöbb alkalmasan választandó szám, ezzel készítsük el a súlyokat és értékeket, erre a dinamikus programozási algoritmussal keressük meg a méretű hátizsákban elvihető legnagyobb értéket, legyen ez OPT’. Ezen optimum vétessen fel valamely részhalmazon, ezt egyébként a dinamikus programozási algoritmussal visszalépéssel (minden minimumszámításnál annak megjegyzésével, hogy a két tag közül melyik eredményezi a minimumot) ki lehet számítani.
Elöször is vegyuik észre, hogy
valamint hogy optimális valsztása miatt
Másfelol a optimális volta miatt
Ezek alapján tehát látjuk, hogy
most még megmutatjuk, hogy , ezzel azt fogjuk látni, hogy
azaz az algoritmusból adódó a valódi optimumnak legfeljebb hibájú becslése.
Megadjuk végül értékét. Legyen , ezzel legyen
ekkor
hiszen az átlag nem nagyobb a maximumnál valamint bármelyik konkrét egyetlen tárgyat önmagában el tudjuk vinni.
Már csak az algoritmus lépésszáma van hátra, ez
ami valóban polinomiális approximációs algoritmust jelent.