Rendszeroptimalizálás, 17. tétel
Polinomiális approximációs séma a RÉSZÖSSZEG problémára
Polinomiális approximációs séma
- Def.*: egy probléma polinomiális approximációs sémával közelíthető, ha ∀ε>0-ra van rá (1+ε)-approximáció.
Ez nem mindig elég, mert ha a közelítő algoritmus lépésszáma 21/εn4, még mindig exponenciálisan hosszú ideig fut.
- Def.*: egy probléma teljesen polinomiális approximációs sémával közelíthető, ha ∀ε>0-ra van rá (1+ε)-approximáció, ami 1/ε-ban is polinomiális.
- Pl.*: a metrikus utazó ügynök problémára nincs P approximációs séma, de az euklideszi utazó ügynök problémára van teljesen P approximációs séma.
Részösszeg probléma
Adott _A_ = {a1, a2, ..., an} és _t_.
Kérdés: létezik-e B⊆A úgy, hogy Σbi = _t_?
Speciális eset: partíció probléma, amikor _t_ = Σai/2, még ez is NP-teljes.
Részösszeg optimalizálási probléma
Adott _A_ = {a1, a2, ..., an} és _t_.
Keressük B⊆A-t úgy, hogy Σbi maximális és Σbi ≤ _t_ legyen.
A feladat NP nehéz, mert a részösszeg probléma visszavezethető rá. Bizonyítás: ha találunk olyan a _B_ halmazt, amire Σbi = _t_, akkor igen a válasz a részösszeg problémára, különben nem.
A feladat nem NP-beli, mert nem eldöntési probléma, tehát nem is NP-teljes.
Közelítő algoritmus a részösszeg optimalizálási problémára
- Tétel*: a probléma teljesen polinomiális sémával közelíthető.
A bizonyítás egy konkrét algoritmus lesz:
- Pontos megoldást adó algoritmus:
Tegyük fel, hogy a1 ≤ a2 ≤ ... ≤ an.
Definiálunk két halmazsorozatot:
- L0 = {0}
- Li' = {l+ai | l∈Li}
- Li+1 = Li ∪ Li'
- a1=3, a2=5, a3=7
- L0 = {0}
- L0' = {3}, L1 = {0,3}
- L1' = {5,8}, L2 = {0,3,5,8}
- L2' = {7,10,12,15}, L3 = {0,3,5,7,8,10,12,15}
- Polinomiális közelítő algoritmus:
Egyrészt vegyük észre, hogy az Li' halmazokból nincs szükségünk a t-nél nagyobb elemekre. Képezzük a halmazokat a következő módon: Li' = (Li+ai) ∩ [0..t].
Def.: δ-val ritkítás
<i>L</i> növekvő sorrendbe rendezett halmaz. foreach (l'''∈L''') { ''m'' az ''l''-et megelőző, halmazban hagyott elem, vagy ha nincs ilyen, 0. if (''l''lt;m(1+''δ'')) ''l''-et kidobjuk. }
A ritkítás után bármely két szomszédos elem hányadosa legalább 1+δ. A ritkított halmaz mérete felülről becsülhető: |Lritkított ≤ log1+δt+2.
- *Tétel*: ha az algoritmus során a halmazok t-nél nagyobb elemeit minden lépésben levágjuk és az eredményt δ=ε/2n-vel ritkítjuk, (1+ε)-approximációt kapunk a problémára, és a lépésszám n-ben, log t-ben és 1/ε-ban is polinomiális lesz.
- Biz.*: az algoritmus (1+ε)-approximációs. %P%
- Biz.*: az algoritmus lépésszáma mindhárom mennyiség szerint polinomiális.
-- Peti - 2006.12.18.