Rendszeroptimalizálás, 17. tétel

A VIK Wikiből
A lap korábbi változatát látod, amilyen Unknown user (vitalap) 2012. október 22., 10:43-kor történt szerkesztése után volt. (Új oldal, tartalma: „{{GlobalTemplate|Infoszak|RopiTetel17}} ==!! Polinomiális approximációs séma a =RÉSZÖSSZEG= problémára.== __TOC__ ===[http://info.sch.bme.hu/document.php?cm…”)
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)

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 BA ú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 BA-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:

  1. Pontos megoldást adó algoritmus: Tegyük fel, hogy a1a2 ≤ ... ≤ an. Definiálunk két halmazsorozatot:
    • L0 = {0}
    • Li' = {l+ai | lLi}
    • Li+1 = LiLi'
    Röviden: Li+1 = Li ∪ (Li+ai+1) Például:
    • 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}
    Az optimális részletösszeg max{l|lLn lt} lesz.
  2. 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 (<i>l</i><big>∈</big><i>L</i>) {
    	<i>m</i> az <i>l</i>-et megelőző, halmazban hagyott elem, vagy ha nincs ilyen, 0.
    	if (<i>l</i><m(1+<i>δ</i>)) <i>l</i>-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.

  3. *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.
    Értelmezés sikertelen (formai hiba): {\displaystyle \forall i \: |L_i| \le \log_{1+\frac{\epsilon}{2n}}t+2 = \frac{\ln t}{\ln (1+\frac{\epsilon}{2n})}+2 = O(\log t) } Másrészt az x≥-1-re érvényes x/(1+x) ≤ ln(1+x) összefüggést kihasználva x=ε/2n helyettesítéssel: Értelmezés sikertelen (formai hiba): {\displaystyle \forall i \: |L_i| \le \frac{\ln t}{\ln (1+\frac{\epsilon}{2n})}+2 \le \frac{(1+\epsilon/2n) \ln t}{\epsilon/2n}+2 = \frac{(2n+\epsilon) \ln t}{\epsilon}+2 } Az algoritmus során n db lista összefésülést kell végezni, aminek a komplexitása O(∑|Li||) = O(n||Li||). A fenti becslések alapján látszik, hogy O(n||Li) n-ben négyzetes, log(t)-ben lineáris, tehát mindkettőben polinomiális. Az 1/ε szerinti becslést órán lenyeltük. %P%

-- Peti - 2006.12.18.