Rendszeroptimalizálás, 17. tétel
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.
!! Polinomiális approximációs séma a =RÉSZÖSSZEG= problémára.
Szkennelt leírás és bizonyítás az infositeon
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.