„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…”)
 
a
 
(2 közbenső módosítás, amit 2 másik szerkesztő végzett, nincs mutatva)
1. sor: 1. sor:
{{GlobalTemplate|Infoszak|RopiTetel17}}
+
==Polinomiális approximációs séma a RÉSZÖSSZEG problémára==
 
 
 
 
==!! Polinomiális approximációs séma a =RÉSZÖSSZEG= problémára.==
 
 
 
__TOC__
 
 
 
===[http://info.sch.bme.hu/document.php?cmd=download_proc&tmp_page=&doc_id=17258 Szkennelt leírás és bizonyítás az infositeon]===
 
 
 
 
===Polinomiális approximációs séma===
 
===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ó.  
 
*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 2<sup>1/&epsilon;</sup>n<sup>4</sup>, még mindig exponenciálisan hosszú ideig fut. <br>
 
Ez nem mindig elég, mert ha a közelítő algoritmus lépésszáma 2<sup>1/&epsilon;</sup>n<sup>4</sup>, még mindig exponenciálisan hosszú ideig fut. <br>
16. sor: 7. sor:
  
 
===Részösszeg probléma===
 
===Részösszeg probléma===
 
 
Adott _A_ = {<i>a</i><sub>1</sub>, <i>a</i><sub>2</sub>, ..., <i>a<sub>n</sub></i>} és _t_. <br>
 
Adott _A_ = {<i>a</i><sub>1</sub>, <i>a</i><sub>2</sub>, ..., <i>a<sub>n</sub></i>} és _t_. <br>
 
Kérdés: létezik-e <i>B</i>&sube;<i>A</i> úgy, hogy &Sigma;<i>b<sub>i</sub></i> = _t_? <br>
 
Kérdés: létezik-e <i>B</i>&sube;<i>A</i> úgy, hogy &Sigma;<i>b<sub>i</sub></i> = _t_? <br>
22. sor: 12. sor:
  
 
===Részösszeg optimalizálási probléma===
 
===Részösszeg optimalizálási probléma===
 
 
Adott _A_ = {<i>a</i><sub>1</sub>, <i>a</i><sub>2</sub>, ..., <i>a<sub>n</sub></i>} és _t_. <br>
 
Adott _A_ = {<i>a</i><sub>1</sub>, <i>a</i><sub>2</sub>, ..., <i>a<sub>n</sub></i>} és _t_. <br>
 
Keressük <i>B</i>&sube;<i>A</i>-t úgy, hogy &Sigma;<i>b<sub>i</sub></i> maximális és &Sigma;<i>b<sub>i</sub></i> &le; _t_ legyen. <br>
 
Keressük <i>B</i>&sube;<i>A</i>-t úgy, hogy &Sigma;<i>b<sub>i</sub></i> maximális és &Sigma;<i>b<sub>i</sub></i> &le; _t_ legyen. <br>
29. sor: 18. sor:
  
 
===Közelítő algoritmus a részösszeg optimalizálási problémára===
 
===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ő.
 
*Tétel*: a probléma teljesen polinomiális sémával közelíthető.
  
58. sor: 46. sor:
 
Def.: &delta;-val ritkítás
 
Def.: &delta;-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>
  
87. sor: 75. sor:
 
-- [[PallosPeter|Peti]] - 2006.12.18.
 
-- [[PallosPeter|Peti]] - 2006.12.18.
  
 
+
[[Kategória:Mérnök informatikus MSc]]
[[Category:Infoszak]]
 

A lap jelenlegi, 2014. március 13., 12:49-kori változata

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