„Rendszeroptimalizálás, 17. tétel” változatai közötti eltérés

A VIK Wikiből
Ugrás a navigációhoz Ugrás a kereséshez
(Ú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…”)
 
58. sor: 58. sor:
 
Def.: δ-val ritkítás
 
Def.: δ-val ritkítás
 
<pre><i>L</i> növekvő sorrendbe rendezett halmaz.
 
<pre><i>L</i> növekvő sorrendbe rendezett halmaz.
foreach (<i>l</i><big>&isin;</big><i>L</i>) {
+
foreach (l'''&isin;L''') {
<i>m</i> az <i>l</i>-et megelőző, halmazban hagyott elem, vagy ha nincs ilyen, 0.
+
''m'' az ''l''-et megelőző, halmazban hagyott elem, vagy ha nincs ilyen, 0.
if (<i>l</i>&lt;m(1+<i>&delta;</i>)) <i>l</i>-et kidobjuk.
+
if (''l''lt;m(1+''&delta;'')) ''l''-et kidobjuk.
 
}</pre>
 
}</pre>
  

A lap 2013. április 24., 15:16-kori változata

Ez az oldal a korábbi SCH wiki-ről lett áthozva. Az eredeti változata itt érhető el.

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 (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.

  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.
    [math] \forall i \: |L_i| \le \log_{1+\frac{\epsilon}{2n}}t+2 = \frac{\ln t}{\ln (1+\frac{\epsilon}{2n})}+2 = O(\log t) [/math] 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: [math] \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 [/math] 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.