slama.dev

Aproximační Algoritmy

Úvodní informace

Tato stránka obsahuje moje poznámky z přednášky Jiřího Sgalla z akademického roku 2021/2022 (MFF UK). Pokud by byla někde chyba/nejasnost, nebo byste rádi něco přidali, tak stránku můžete upravit pull requestem (případně mi dejte vědět na mail).

Základní definice

Definice (Optimalizační problém) je I,F,f,g\mathcal{I}, \mathcal{F}, f, g

Definice (NP-Optimalizační problém) je I,F,f,g\mathcal{I}, \mathcal{F}, f, g, pro které platí stejné věci jako pro normální optimalizační problémy, ale navíc

Pro minimalizační zajišťujeme, že naše je vždy dostatečně malé.

Pro maximalizační zajišťujeme, že je vždy dostatečně velké.

Definice: algoritmus AA je RR-aproximační alg., pokud:

Pravděpodobnost v algoritmech

  1. algoritmy s chybou: někdy dělají chybu, ale většinou ji neudělají
  2. bez chyb, běží v průměrném čase polynomiálním

Metrický TSP

Kostrový algoritmus

Algoritmus (kostrový):

  1. najdeme minimální kostru
  2. navštívíme všechny vrcholy (například přes DFS), čímž dostaneme tah přes všechny vrcholy
  3. zkrátíme ji na cyklus tak, že vynecháme opakující-se vrcholy

Věta: algoritmus je 22-aproximační.

Důkaz: kostra je nejvýše tak velká, jako optimální řešení a tenhle algoritmus je lepší než 22 kostry (díky trojúhelníkové nerovnosti a symetrii – procházíme i tam i zpět)

Christofidesův algoritmus

(👀): brát hrany dvakrát je plýtvání – pospojujeme liché vrcholy přes minimální párování, abychom nemuseli chodit tam a zpět

  1. najdeme minimální kostru TT
  2. najdeme minimální perfektní párování MM na vrcholech s lichými stupni v TT
    • vždy existuje, jelikož máme úplný graf a vrcholů s lichým stupňem je sudý počet
  3. zkrátíme na cyklus TMT \cup M
    • děláme je tak, že vybereme dvě hrany incidentní s vrcholem a nahradíme je za jednu

Věta: algoritmus je 3/23/2-aproximační.

Důkaz: ALGd(T)+d(M)OPT+12OPT\mathrm{ALG} \le d(T) + d(M) \le \mathrm{OPT} + \frac{1}{2}\mathrm{OPT}

Důkaz d(M)12OPTd(M) \le \frac{1}{2}\mathrm{OPT} uděláme obrázkem:

Alespoň jeden z párování v cylku bude 12OPT\le \frac{1}{2} \mathrm{OPT}, jelikož celý cyklus je lepší optimální řešení.

Poznámka:

Quicksort

Algoritmus (quicksort):

  1. S1|S| \le 1 \ldots konec, vystoupíme SS (base case)
  2. jinak vybereme uniformě náhodně pSp \in S
  3. A={xSx<p},B={xSx>p}A = \left\{x \in S \mid x < p\right\}, B = \left\{x \in S \mid x > p\right\}
    • posloupnost má všechny prvky rozdílné, takže chceme ostrá nerovnítka
  4. rekurzivně se zavoláme na A,BA, B
  5. vystoupíme A,p,BA, p, B

Věta: quicksort má průměrnou časovou složitost nlognn \cdot \log n.

Pro připomenutí:

  • E[Xi,j]=Pr[Ai,j]\mathbb{E}\left[X_{i, j}\right] = \mathrm{Pr}\left[A_{i, j}\right] (indikátorová veličina)
  • E[X+Y]=E[X]+E[Y]\mathbb{E}\left[X + Y\right] = \mathbb{E}\left[X\right] + \mathbb{E}\left[Y\right]

Důkaz: počítáme Ai,j=Pr[porovnaˊme i-tyˊ a j-tyˊ prvek]A_{i, j} = \mathrm{Pr}\left[\text{porovnáme $i$-tý a $j$-tý prvek}\right]

Lemma: nechť i<ji < j. Pak Pr[Ai,j]=2ji+1\mathrm{Pr}\left[A_{i, j}\right] = \frac{2}{j - i + 1}

Důkaz: to, že se dva prvky porovnají musí znamentat, že jeden z jich byl pivot, ale žádný mezi nimi pivot nebyl (jelikož by je to rozdělilo). Musíme tedy vybrat právě jeden z těchto dvou z intervalu [i,j]\left[i, j\right], kde je celkově ji+1j - i + 1 čísel.

Sečtením přes všechny dvojice i<ji < j dostaváme následující: E[# porovnaˊnıˊ]=i=1n1j=i+1nXi,j=i=1n1j=i+1n2ji+1=i=1n1k=2ni2knHnHnharmonickaˊ posloupnostnlogn \begin{aligned} \mathbb{E}\left[\#\ \text{porovnání}\right] &= \sum_{i = 1}^{n - 1} \sum_{j = i + 1}^{n} X_{i, j} \\ &= \sum_{i = 1}^{n - 1} \sum_{j = i + 1}^{n} \frac{2}{j - i + 1} \\ & = \sum_{i = 1}^{n - 1} \sum_{k = 2}^{n - i} \frac{2}{k} \\ & \cong n \cdot H_n \qquad H_n \ldots \text{harmonická posloupnost}\\ & \cong n \cdot \log n \end{aligned}

Konflikty v distribuovaných systémech

Algoritmus:

  1. v každém cylku zkus s pravděpodobností pp přistoupit ke zdroji
    • pp si nastavíme tak, aby to vyšlo hezky
  2. opakuj, dokud se ti to nepovede

Věta: algoritmus s p=1np = \frac{1}{n} s pravděpodobností alespoň 11n1 - \frac{1}{n} uspěje po t=2enlnnt = 2 en \ln n cyklech.

Důkaz: modifikujme algoritmus, aby zkoušel přistupovat i po té, co ho získal (lehčí počítání, které pouze zhorší pravděpodobnost úspěchu).

Nechť Ai,rA_{i, r} je jev, že ii-tý proces upěl v rr-tém cyklu. Pak Pr[Ai,r]=p(1p)n1=1n(11n)n11en\mathrm{Pr}\left[A_{i, r}\right] = p \cdot \left(1 - p\right)^{n - 1} = \frac{1}{n} \left(1 - \frac{1}{n}\right)^{n - 1} \ge \frac{1}{en}

Nyní počítáme Fi,tF_{i, t} které říká, že ii-tý proces neuspěje v žádném z t=2enlnnt = 2 en \ln n cyklů: Pr[Fi,t]=r=1t(1Ai,r)(11en)t=((11en)en)tenn2\mathrm{Pr}\left[F_{i, t}\right] = \prod_{r = 1}^{t} \left(1 - A_{i, r}\right) \le \left(1 - \frac{1}{en}\right)^t = \left(\left(1 - \frac{1}{en}\right)^{en}\right)^{\frac{t}{en}} \le n^{-2}

To, že neexistuje proces, který neuspěje, odhadneme jako Pr[i=1nFi,t]i=1nPr[Fi,t]nn2=n1=1n\mathrm{Pr}\left[\bigcup_{i = 1}^{n} F_{i, t}\right] \le \sum_{i = 1}^{n} \mathrm{Pr}\left[F_{i, t}\right] \le n \cdot n^{-2} = n^{-1} = \frac{1}{n}

Globální minimální řez

Přímočarý algoritmus

Algoritmus:

  1. převedeme graf na ohodnocený s jednotkovými cenami
  2. zafixujeme vrchol ss
  3. pro všechny ostatní vrcholy tt najdeme minimalní sts-t řez
  4. vrátíme minimum

Spojující algoritmus

Algoritmus:

  1. vybereme náhodnou hranu a její vrcholy spojíme do jednoho
  2. opakujeme, dokud nemáme pouze dva vrcholy
  3. zbylé hrany na konci jsou náš řez

(👀): multigraf s nn vrcholy a min. řezem velikosti kk má alespoň nk/2nk/2 hran.

Věta: pravděpodobnost, že najdeme daný minimální řez CC je alespoň (n2)1=2n(n1)\binom{n}{2}^{-1} = \frac{2}{n \cdot (n - 1)}.

Důkaz: nechť AiA_i jev, že v prvních ii iteracích jsme nevybrali hranu z CC.

Pr[An2](12n)(12n1)(123)=n2nn3n1n4n22413=2n(n1)=1(n2)=(n2)1 \begin{aligned} \mathrm{Pr}[A_{n - 2}] & \ge \left(1 - \frac{2}{n}\right) \left(1 - \frac{2}{n -1}\right) \ldots \left(1 - \frac{2}{3}\right) \\ &= \frac{n - 2}{n} \frac{n - 3}{n - 1} \frac{n - 4}{n - 2} \ldots \frac{2}{4} \frac{1}{3} \\ &= \frac{2}{n \cdot (n - 1)} = \frac{1}{\binom{n}{2}} = \binom{n}{2}^{-1} \end{aligned}

Důsledek: každý graf GG(n2)\le \binom{n}{2} globálních minimálních řezů.

Důkaz: každý běh algoritmu vystoupí právě jeden řez. Kdyby jich bylo více, tak nám pravděpodobnost nevychází (jevy jsou disjunktní).

(👀): Pro n2n^2 opakování algoritmu výše dostáváme nejmenší řez s pravděpodobností 12\ge \frac{1}{2}

Poznámka: algoritmus můžeme vylepšit tak, že části, ve kterých se nejvíce dělají chyby (konkrétně ty pozdější) opakujeme vícekrát (a vezmeme minimum).

Rozvrhování

Hladový algoritmus

Algoritmus (hladový):

  1. úlohu přidej vždy tam, kde jich je zatím nejméně
  2. profit?

Věta (slabší odhad): hladový rozvrhovací algoritmus je 22-aproximační.

Důkaz: uvažme následující diagram:

Z obrázku vyplývá:

Spojením dostáváme ALG=T+pj2OPT\mathrm{ALG} = T + p_j \le 2 \cdot \mathrm{OPT}

Věta (silnější odhad): hladový rozvrhovací algoritmus je (21m)\left(2 - \frac{1}{m}\right)-aproximační.

Důkaz:

Kombinací nerovností dostávám T+pjmOPTT + \frac{p_j}{m} \le \mathrm{OPT}.

Nyní místo odhadu TOPTT \le \mathrm{OPT} použijeme tyto dva odhady:

T+pjmOPT(pjOPT)(11m) \begin{aligned} T + \frac{p_j}{m} &\le \mathrm{OPT} \\ (p_j &\le \mathrm{OPT}) \cdot \left(1 - \frac{1}{m}\right) \end{aligned}

Součtem dostáváme

T+pjm+(11m)pjOPT+(11m)OPTALG(21m)OPT \begin{aligned} T + \frac{p_j}{m} + \left(1 - \frac{1}{m}\right) p_j &\le \mathrm{OPT} + \left(1 - \frac{1}{m}\right) \mathrm{OPT} \\ \mathrm{ALG} &\le \left(2 - \frac{1}{m}\right) \mathrm{OPT} \end{aligned}

Algoritmus lokálního prohledávání

Pro lokální algoritmus potřebujeme s rozvrhem pracovat formálněji:

Prostě přesouváme stroje, které končí nejpozději někam, aby začínaly dříve a zlepšujeme tím maximum.

Algoritmus (lokální prohledávání):

  1. najdi libovolný rozvrh bez mezer (i na začátku)
  2. vezmi libovolné jj s maximálním cjc_j
    • pokud existuje stroj ii s délkou rozvrhu <sj< s_j, tak přesuň jj na ii s minimální délkou
    • jinak vystup aktuální rozvrh

(👀): cminneklesaˊc_{\min} neklesá

(👀): Každou úlohu přesuneme nejvýše jednou.

Důkaz: jelikož ji přesouváme na stroj s minimální délkou, tak by musel existovat nějaký s ještě menší, což by byl spor s tím, jak algoritmus funguje (dáváme na nejmenší).

Důsledek: algoritmus je polynomiální.

Věta (silnější odhad pro lokální algoritmus): algoritmus je (21m)\left(2 - \frac{1}{m}\right)-aproximační.

Largest Processing Time (LPT)

Algoritmus (LPT):

  1. úlohy uspořádáme tak, že p1p2pnp_1 \ge p_2 \ge \ldots \ge p_n
  2. použijeme hladový algoritmus

Věta: LPT je (4313m)\left(\frac{4}{3} - \frac{1}{3m}\right)-aproximační algoritmus.

Důkaz: BUNO předpokládejme, že pnp_n určuje délku rozvrhu (kdyby ne tak na další úlohy zapomenu a řešení se tím nezmění). Rozlišíme 22 případy:

Odbočka: online algoritmy

Bin packing

Algoritmus (first fit): dej aja_j do prvního koše, do kterého se vejde.

Algoritmus (best fit): dej aja_j do nejplnějšího koše, do kterého se vejde.

Věta: oba algoritmy jsou 1.71.7-aproximační (a je to těsný odhad).

Věta: Je NP těžké najít RR-aproximační algoritmus pro R3/2R \le 3/2

Důkaz: Je NP těžké rozhodnout, zda OPT=2\mathrm{OPT} = 2, jelikož pomocí něho můžeme přímočaře vyřešit problém dělení množiny na dvě časti se stejným součtem (nastavíme velikost košů na tenhle součet), což je NP těžké.

Věta: Existuje asymptotické aproximační schéma, t. j. (ε)(ALG)(I)ALG(I)(1+ε)OPT(I)+1(\forall \varepsilon) (\exists \mathrm{ALG}) (\forall I) \mathrm{ALG}(I) \le (1 + \varepsilon)\mathrm{OPT}(I) + 1

Algoritmus (any fit): dej aja_j do nějakého neprázdného koše; pokud nelze, dej ho do nového.

Věta: každý any fit algoritmus má aproximační poměr 2\le 2.

Důkaz: Pro OPT=1\mathrm{OPT} = 1 triviální. Jinak nechť Bi=jIiajB_i = \sum_{j \in I_i} a_j. Musí platit, že (i,j,ij)Bi+Bj>1(\forall i, j, i \neq j) B_i + B_j > 1 (jinak spor s během algoritmu). Posčítáním pro všechny dvojice dostáváme m2<i=1mBi=j=1najOPT\frac{m}{2} < \sum_{i = 1}^{m} B_i = \sum_{j = 1}^{n} a_j \le \mathrm{OPT}

Hledání disjunktních cest

Jednotkové kapacity

Algoritmus (hladový):

  1. najdeme nejkratší cestu mezi nespojenou dvojicí (přes všechna ii)
    • pokud neexistuje, tak vystoupíme
  2. odebereme použité hrany

(👀): hladový algoritmus nemá aproximační poměr lepší než O(m)\mathcal{O}(\sqrt{m}):

Délka s1t1s_1 \mapsto t_1 je O(k)\mathcal{O}(k). Abychom tuto cestu nezvolili, tak musejí mít ostatní alespoň O(k)\mathcal{O}(k) hran a celkově jich tedy musí být řádově m=O(k2)m = \mathcal{O}(k^2). Naše řešení je tedy o k=O(m)k = \mathcal{O}(\sqrt{m}) horší.

Věta: Hladový algoritmus s c=1c = 1 je O(m)\mathcal{O}\left(\sqrt{m}\right)-aproximační.

Důkaz: BUNO OPT1\mathrm{OPT} \ge 1 (jinak bychom hned skončili)

Nechť I,{PiiI}I^*, \left\{P_i^* \mid i \in I^*\right\} je optimum. Počítejme cesty:

Tedy počet krátkých cest PiI(m+1)P_i^* \le |I| \left(\sqrt{m} + 1\right)

Nejednotkové kapacity

Algoritmus (hladový pro nejednotkovou kapacitu):

  1. zvolíme β=m1c+1\beta = \left\lceil m^{\frac{1}{c + 1}} \right\rceil
  2. najdeme nejkratší cestu mezi nespojenou dvojicí (přes všechna ii)
    • pokud neexistuje nebo d(Pi)βcd(P_i) \ge \beta^c, vystoupíme
  3. přenásobíme délku hran nejkratší cesty faktorem β\beta a opakujeme

(👀): algoritmus nepoužije ee s d(e)md(e) \ge m

Důsledek: výsledné řešení je přípustné

Důsledek: algoritmus je polynomiální.

Věta: Hladový algoritmus je O(β)\mathcal{O}\left(\beta\right)-aproximační.

Důkaz: BUNO optimum 1\ge 1 (jinak bychom hned skončili)

Opět si rozmyslíme to, když cesta je v našem algoritmu a když není:

Nyní nejprve zesdola odhadneme d(E)d(E) na konci algoritmu:

Poté odhadneme d(E)d(E) zeshora (opět na konci algoritmu):

Po spojení nerovnic dostáváme: βc(OPTI)cd(E)c(I+1)βc+1OPTIβc(I+1)OPTO(β)I \begin{aligned} \beta^c \left(|\mathrm{OPT}| - |I|\right) &\le c \cdot d(E) \le c\left(|I| + 1\right) \beta^{c + 1} \\ |\mathrm{OPT}| - |I| &\le \beta c (|I| + 1) \\ |\mathrm{OPT}| &\le \mathcal{O}(\beta) |I| \\ \end{aligned}

Splnitelnost (MAX-SAT)

Poznámka:

Předpokládáme:

RAND-SAT

Algoritmus (RAND-SAT):

  1. vybereme nezávisle náhodně všechny literály (p=1/2p = 1/2)
  2. profit?

Věta: RAND-SAT je 22-aproximační algoritmus.

Důkaz: pro každou klauzuli zavedeme indikátorovou proměnnou YjY_j.

Díky tomu, že k1k \ge 1 máme E[Yj]=Pr[Cj is satistied]=112k12\mathbb{E}\left[Y_j\right] = \mathrm{Pr}\left[C_j\ \text{is satistied}\right] = 1 - \frac{1}{2^k} \ge \frac{1}{2} a tedy: E[j=1mwjYj]=linearita12j=1mwj12OPT\mathbb{E}\left[\sum_{j = 1}^{m} w_j Y_j\right] \overset{\text{linearita}}{=} \frac{1}{2} \sum_{j = 1}^{m} w_j \ge \frac{1}{2}\mathrm{OPT}

Poznámka: pro k=3k = 3 dostáváme po dosazení 87\frac{8}{7}-aproximaci

Předchozí algoritmus měl problémy s krátkými klauzulemi, jelikož je menší šance, že nějakou splní. Zkusíme to napravit tím, že jim budeme dávat preferenci.

BIASED-SAT

Algoritmus (BIASED-SAT):

  1. vybereme nezávisle náhodně všechny literály
    • true: p>12p > \frac{1}{2}, jinak false; hodnotu pp najdeme později

Věta: BIASED-SAT je (ϕ=512)\left(\phi = \frac{\sqrt{5} - 1}{2}\right)-aproximační algoritmus.

Uvažme CjC_j (a opět indikátorové veličiny YjY_j):

Po vyřešení p=1p2p = 1 - p^2 dostáváme p=ϕ=512p = \phi = \frac{\sqrt{5} - 1}{2}.

Nechť UU množina klauzulí bez záporných jednotkových.

(👀): OPTjUwj\mathrm{OPT} \le \sum_{j \in U} w_j

E[j=1mwjYj]=j=1mwjE[Yj]jUwjPr[Cj je splneˇnaˊ]jUwjppOPT \begin{aligned} \mathbb{E}\left[\sum_{j = 1}^{m} w_j Y_j\right] &= \sum_{j = 1}^{m} w_j \mathbb{E}\left[Y_j\right] \\ &\ge \sum_{j \in U} w_j \cdot \mathrm{Pr}\left[C_j\ \text{je splněná}\right] \\ &\ge \sum_{j \in U} w_j \cdot p \\ &\ge p \cdot \mathrm{OPT} \end{aligned}

LP-SAT

Algoritmus (LP-SAT):

  1. pro každou proměnnou si pořídíme binární proměnnou yiy_i, pro každou klauzuli binární proměnnou zjz_j
  2. postavíme lineární program s těmito proměnnými
    • negaci zachytíme jako 1yi1 - y_i
    • pro každou klauzuli chceme zjkladneˊyi+zaˊporneˊ(1yi)z_j \le \sum_{\text{kladné}} y_i + \sum_{\text{záporné}} (1 - y_i)
    • maximalizujeme zj\sum z_j
  3. zrelaxujeme program a vyřešíme ho (dostaneme optimum y,zy^*, z^*)
  4. nastavíme proměnné xix_i na true s pravděpodobností yiy_i^*

Věta: LP-SAT je (11e)\left(1 - \frac{1}{e}\right)-aproximační algoritmus.

Fakt (A - A/G nerovnost): i=1nai1n1ni=1nai\prod_{i = 1}^{n} a_i^{\frac{1}{n}} \le \frac{1}{n} \sum_{i = 1}^{n} a_i

Fakt (B - konvexní funkce): pokud je funkce na [0,1]\left[0, 1\right] konkávní a f(0)=a,f(1)=a+bf(0) = a, f(1) = a + b, pak x[0,1]:f(x)a+bx\forall x \in \left[0, 1\right]: f(x) \ge a + bx

Fakt (C - odhad na 1/e): (11n)n1e\left(1 - \frac{1}{n}\right)^n \le \frac{1}{e}

Důkaz: uvažme y,zy^*, z^* a CjC_j s délkou kjk_j; pak

Pr[Cj nenıˊ splneˇnaˊ]=i:xiCj(1yi)kladneˊi:xiCjyizaˊporneˊ=A[1kj(i:xiCj(1yi)+i:xiCjyi)]kj=[11kj(i:xiCjyi+i:xiCj(1yi))]kj(1zjkj)kj//definice LP \begin{aligned} \mathrm{Pr}\left[C_j\ \text{není splněná}\right] &= \overbrace{\prod_{i: x_i \in C_j} (1 - y^*_i)}^{\text{kladné}} \overbrace{\prod_{i: \overline{x}_i \in C_j} y^*_i}^{\text{záporné}} & \\ &\overset{A}{=} \left[\frac{1}{k_j} \left(\sum_{i: x_i \in C_j} (1 - y^*_i) + \sum_{i: \overline{x}_i \in C_j} y^*_i\right)\right]^{k_j} & \\ &= \left[1 - \frac{1}{k_j} \left(\sum_{i: x_i \in C_j} y^*_i + \sum_{i: \overline{x}_i \in C_j} (1 - y^*_i)\right)\right]^{k_j} & \\ &\le \left(1 - \frac{z_j^*}{k_j}\right)^{k_j} \qquad & //\text{definice LP} \end{aligned}

Nás zajímá splnění, tedy: Pr[Cj je splneˇnaˊ]1(1zjkj)kjf(zj)B[1(11kj)kj]zjC(11e)zj \begin{aligned} \mathrm{Pr}\left[C_j\ \text{je splněná}\right] &\ge \overbrace{1 - \left(1 - \frac{z_j^*}{k_j}\right)^{k_j}}^{f(z_j^*)} \\ & \overset{B}{\ge} \left[1 - \left(1 - \frac{1}{k_j}\right)^{k_j}\right] z_j^* & \overset{C}{\ge} \left(1 - \frac{1}{e}\right) z_j^* \end{aligned}

Pro fakt BB jsme pozorovali, že a=f(0)=0a = f(0) = 0 a také že druhá derivace je nekladná. Pak: E[j=1mwjYj]=j=1mwjE[Yj]jUwjPr[Cj je splneˇnaˊ]jUwj(11e)zj=(11e)OPT \begin{aligned} \mathbb{E}\left[\sum_{j = 1}^{m} w_j Y_j\right] &= \sum_{j = 1}^{m} w_j \mathbb{E}\left[Y_j\right] \\ &\ge \sum_{j \in U} w_j \cdot \mathrm{Pr}\left[C_j\ \text{je splněná}\right] \\ &\ge \sum_{j \in U} w_j \cdot \left(1 - \frac{1}{e}\right) z_j^* \\ &= \left(1 - \frac{1}{e}\right) \mathrm{OPT}\\ \end{aligned}

BEST-SAT

Algoritmus (BEST-SAT):

  1. při přizazení s pravděpodobností 1/21/2 použijeme RAND-SAT, jinak použijeme BEST-SAT
  2. zažijeme existenční krizi z toho, že takovýhle algoritmus funguje a je asymptoticky optimální

Věta: BEST-SAT je 34\frac{3}{4}-aproximační.

Důkaz: chceme dokázat, že Pr[Cj je splneˇnaˊ]34zj \mathrm{Pr}\left[C_j\ \text{je splněná}\right] \ge \frac{3}{4} z^*_j .

Podívejme se, s jakou pravděpodobností splní klauzuli algoritmy:

kjk_j RAND-SAT LP-SAT BEST-SAT
11 1212zj\frac{1}{2} \ge \frac{1}{2} z_j^* 1zj1 \cdot z_j^* 1212+12zj34zj\frac{1}{2} \frac{1}{2} + \frac{1}{2} z_j^* \ge \frac{3}{4} z_j^*
22 34zj\ge \frac{3}{4} z_j^* 34zj\frac{3}{4} \cdot z_j^* 34zj\ge \frac{3}{4} z_j^*
3\ge3 78zj\ge \frac{7}{8} z_j^* (11e)zj\ge\left(1 - \frac{1}{e}\right) \cdot z_j^* >34zj> \frac{3}{4} z_j^*

Poznámka (derandomizace metodou podmíněných pravděpodobností): postupně plníme klauzule tak, že náhodně vybíráme pravděpodobnosti. Jelikož počet splnění určuje to, jak hodnoty vybereme, tak je můžeme vybírat (podmíněně se rozhodujeme, jak to dopadne, když xi=0x_i = 0 nebo xi=1x_i = 1 a vybereme si to lepší). Aproximační poměr si neshoršíme, jelikož vždy vybírám větší z pravděpodobností.

Pokrývací problémy

Vrcholové pokrytí

Algoritmus (LP relaxace):

  1. vytvoř celočíselný lineární program:
    • proměnné jsou binární podle vrcholů, které vybíráme
    • podmínky jsou (u,v)E:xu+xv1\forall (u, v) \in E: x_u + x_v \ge 1 (chceme pokrýt všechny hrany)
    • minimalizujeme vVxvcv\sum_{v \in V} x_v c_v
  2. zrelaxuj lineární program (proměnné jsou teď reálné)
  3. použij ho při řešení – zvol vv když xv12x_v \ge \frac{1}{2}
    • dává správné řešení, jelikož pro splnění podmínek je vždy alespoň jeden z (xu,xv)12(x_u, x_v) \ge \frac{1}{2}

Věta: algoritmus je 22-aproximační.

Důkaz: proměnné jsme z 12\ge \frac{1}{2} zaokrlouhlovali na 11, čímž jsme řešení max. zdvojnásobili.

Množinové pokrytí

Máme množiny, které mají nějaké ceny. Chceme je vybrat tak, aby jejich sjednocení obsahovalo všechny prvky a aby cena byla minimální.

Pro rozbor budeme potřebovat ještě dva parametry:

(👀): vrcholové pokrytí je množinové pokrytí s f2f \le 2

Program pro vrcholové pokrytí:

  • proměnné jsou binární podle vrcholů, které vybíráme
  • podmínky jsou (u,v)E:xu+xv1\forall (u, v) \in E: x_u + x_v \ge 1 (chceme pokrýt všechny hrany)
  • minimalizujeme vVxvcv\sum_{v \in V} x_v c_v
ff-aproximační algoritmy

Algoritmus (LP relaxace):

  1. vytvoř celočíselný lineární program:
    • proměnné jsou x1,,xm0x_1, \ldots, x_m \ge 0 podle množin
    • podmínky jsou e{1,,n}:jeSixj1\forall e \in \left\{1, \ldots, n\right\}: \sum_{j \mid e \in S_i} x_j \ge 1 (chceme pokrýt všechny prvky univerza)
    • minimalizujeme i{1,,m}xici\sum_{i \in \left\{1, \ldots, m\right\}} x_i c_i
  2. zrelaxuj lineární program (proměnné jsou teď reálné)
  3. použij ho při řešení – zvol vv když xv1fx_v \ge \frac{1}{f}
    • dává správné řešení – argument je stejný jako u vrcholového pokrytí

Věta: algoritmus je ff-aproximační.

Důkaz: proměnné opět zvětšuji z 1f\frac{1}{f} na 11, řešení tedy zhorším nejvýše ff-krát.

Význam primáru (sběratel): jak můžu nejlevněji nakoupit balíčky známek tak, abych měl všechny známky.

Význam duálu (procejce): kolik můžu nejvíce účtovat za každou známku, aby byl obchod ochotný kupovat známky a tvořit z nich balíčky.

(👀): duál programu vypadá následně:

(👀): podmínky komplementarity:

Algoritmus (primárně-duální algoritmus):

  1. y1,,yn=0;I=,E=y_1, \ldots, y_n = 0; I = \emptyset, E = \emptyset
  2. dokud existuje nepokryté e∉Ee \not\in E, tak zvyšíme yey_e „co nejvíce“:
    • δ=minjeSj(cjeSjye)\delta = \min_{j \mid e \in S_j} \left(c_j - \sum_{e \in S_j} y_e\right)
      • zvyšujeme tak, abychom splnili tu nejpřísnější duální podmínku
    • ye=ye+δy_e = y_e + \delta
    • j:eSj\forall j: e \in S_j a eSjye=cj\sum_{e \in S_j} y_e = c_j přidám jj do pokrytí (I=I{j}I = I \cup \left\{j\right\}) a E=ESjE = E \cup S_j
      • do algoritmu přidáme ty množiny, jejichž podmínky komplementarity jsme naplnili

(👀): po přidání do algoritmu se yey_e prvku nezmění (ostře splníme nějakou rovnost)

Věta: algoritmus je ff-aproximační.

Důkaz: ALG=jIcj//definice=jIeSjye//definicee=1nfye//prohozenıˊ sumy + definice ffOPT//hodnota duaˊlnıˊho rˇesˇenıˊ \begin{aligned} \mathrm{ALG} &= \sum_{j \in I} c_j & // \text{definice} \\ &= \sum_{j \in I} \sum_{e \in S_j} y_e & // \text{definice} \\ &\le \sum_{e = 1}^{n} f \cdot y_e & // \text{prohození sumy + definice $f$} \\ &\le f \cdot \mathrm{OPT} & // \text{hodnota duálního řešení} \\ \end{aligned}

gg-aproximační algoritmy

Algoritmus (hladový):

  1. I=,E=,qe=0I = \emptyset, E = \emptyset, q_e = 0
    • qq je vektor indexovaný prvky, pomůže nám při analýze algoritmu
      • odpovídá ceně za pokrytí daného prvku
  2. opakovaně ber „nejlepší“ množinu: přidáme množinu s minimálním (pj=cjSjE)\left(p_j = \frac{c_j}{|S_j \setminus E|}\right)
    • pjp_j odpovídá tomu, kolik zaplatíme za pokrytí nového prvku
    • eSjE:qe=pj\forall e \in S_j \setminus E: q_e = p_j (uložíme cenu nově pokrytých prvků)
    • I=I{j},E=ESjI = I \cup \left\{j\right\}, E = E \cup S_j (přidáme tuto množinu a pokryté prvky)

Věta: algoritmus je (Hglnglnn)\left(H_g \approx \ln g \le \ln n\right)-aproximační

(👀): algoritmus nemůže být lepší (viz následující protipříklad):

(👀): ALG=e=1nqe\mathrm{ALG} = \sum_{e = 1}^{n} q_e

Lemma: q=1Hgq\overline{q} = \frac{1}{H_g} \cdot q je přípustné řešení duálního LP

Důkaz: chceme dokázat, že eSjqecj\sum_{e \in S_j} \overline{q}_e \le c_j (přímo podmínka v duálu). Nechť Sj={e1,,ek}S_j = \left\{e_1, \ldots, e_k\right\}

(👀): qeicjiq_{e_i} \le \frac{c_j}{i}

Nyní dostáváme eSjqe=1kqeicj1+cj2+=HkcjeSjqe=1HgeSjqe1HgHkcjcj \begin{aligned} \sum_{e \in S_j} q_e &= \sum_{1}^{k} q_{e_i} \le \frac{c_j}{1} + \frac{c_j}{2} + \ldots = H_k \cdot c_j \\ \sum_{e \in S_j} \overline{q}_e &= \frac{1}{H_g} \sum_{e \in S_j} q_e \le \frac{1}{H_g} \cdot H_k \cdot c_j \le c_j \end{aligned}

Maximální nezávislá množina

Nás zajímá najít rychlý paralelní algoritmus:

Algoritmus (rychlý paralelní):

  1. I=I = \emptyset
  2. dokud VV \neq \emptyset, tak každý následující krok děláme paralelně:
    • vE\forall v \in E pokud je stupeň 00, pak přidáme do II a vymažeme z VV
    • vE\forall v \in E označ vv (přidej do SS) s pravděpodobností 12dv\frac{1}{2 d_v} (nezávisle)
    • u,vE\forall u, v \in E pokud uu i vv jsou označené, odeber značku nižšího stupně
      • nižší stupeň proto, abychom odebírali hran co nejvíce
    • přidej označené vrcholy do II a odeber je a jejich sousedy (a odpovídající hrany) z VV
      • sousedy množiny SS značíme N(S)N(S)

Chceme, aby se graf v každé iteraci zmenšil o nějakou část a iterací bylo tedy logaritmicky. Uděláme to počítání toho, že máme hodně dobrých hran a že jich hodně zmizí.

Definice: vrchol je dobrý, jestliže má dv3\ge \frac{d_v}{3} sousedů stupně dv\le d_v

Lemma: alespoň polovina hran je dobrá.

Důkaz: hrany zorientujeme od menšího k většímu stupni (rovnost řešíme libovolně)

Nyní počítáme sˇpatneˊ hranyv sˇpatnyˊdvin//sˇpatnaˊ hrana jde do sˇpatneˊho vrcholuv sˇpatnyˊ12dvout//nerovnost vyˊsˇevE12dvout12E \begin{aligned} |\text{špatné hrany}| &\le \sum_{v\ \text{špatný}} d_v^{\mathrm{in}} &\qquad //\text{špatná hrana jde do špatného vrcholu} \\ &\le \sum_{v\ \text{špatný}} \frac{1}{2} d_v^{\mathrm{out}} &\qquad //\text{nerovnost výše} \\ &\le \sum_{v \in E} \frac{1}{2} d_v^{\mathrm{out}} \\ &\le \frac{1}{2}|E| \end{aligned}

Tedy dobrých je 12\ge \frac{1}{2}.

Pravděpodobnost, že dobrý vrchol odstraním (buď označením toho vrcholu samotného nebo nějakého jeho souseda) je α>0\alpha > 0.

Lemma: existuje α>0\alpha > 0 t. ž. v\forall v dobrý platí Pr[vSN(S)]α\mathrm{Pr}\left[v \in S \cup N(S)\right] \ge \alpha

Důkaz: Pro dobrý vrchol vv platí následující: Pr[v maˊ souseda oznacˇeneˊho v kroku 2]1wN(v)(112dw)neoznacˇıˊme zˇaˊdneˊho souseda1(112dv)dv3//lemma vyˊsˇe=konstanta \begin{aligned} \mathrm{Pr}\left[v\ \text{má souseda označeného v kroku 2}\right] &\ge 1 - \overbrace{\prod_{w \in N(v)} \left(1 - \frac{1}{2d_w}\right)}^{\text{neoznačíme žádného souseda}} \\ & \ge 1 - \left(1 - \frac{1}{2d_v}\right)^{\frac{d_v}{3}} \qquad // \text{lemma výše}\\ & = \text{konstanta} \\ \end{aligned}

Může být špatné, když by se hodně ze sousedů dobrého vrcholu odstranilo. To dokážeme, že se nestane tím, že ukážeme, že u libovolného vrcholu vv odstraníme značku s \le konstantní pravděpodobností (jen pozor, v Pr\mathrm{Pr} používáme podmíněně, že vv byl označený): Pr[odstranıˊme znacˇku]=Pr[je oznacˇenyˊ soused s veˇtsˇıˊm stupneˇm]=Pr[uN(v):dudwu byl oznacˇenyˊ]uN(v)dudvPr[u byl oznacˇenyˊ]wN(v)dw12dw12 \begin{aligned} \mathrm{Pr}\left[\text{odstraníme značku}\right] &= \mathrm{Pr}\left[\text{je označený soused s větším stupněm}\right] \\ &= \mathrm{Pr}\left[\exists u \in N(v): d_u \ge d_w \land u\ \text{byl označený}\right] \\ &\le \sum_{u \in N(v) \mid d_u \ge d_v} \mathrm{Pr}\left[u\ \text{byl označený}\right] \\ &\le \sum_{w \in N(v)} d_w \cdot \frac{1}{2d_w} \\ &\le \frac{1}{2} \end{aligned}

Nikde v důkazu nepočítáme s pravděpodobností označení dobrého vrcholu, což nepotřebujeme.

Věta: očekávaný počet fází algoritmu je O(logn)\le \mathcal{O}(\log n)

Důkaz: nechť Mi=M_i = počet hran po ii fázích. Platí, že E[Mi+1](1α2)E[Mi]\mathbb{E}\left[|M_{i + 1}|\right] \le \left(1 - \frac{\alpha}{2}\right) \mathbb{E}\left[|M_i|\right]

Tedy po logaritmicky mnoho krocích (v mm nebo nn) odstraníme všechny hrany pravděpodobností alespoň 12\frac{1}{2}.

Hashovací funkce

2-Univerzalita: pro dva rozdílné prvky máme pro náhodnou hashovací funkci z rodiny omezenou pravděpodobnost, že se namatchují na stejnou hodnotu.

Silná 2-univerzalita: zahashované hodnoty x1,x2x_1, x_2 tvoří dvě náhodné po dvou nezávislé veličiny. Takže kromě toho, že jsou univerzální (když zafixuju jeden, tak se tím druhým trefím s pravděpodobností 1n\frac{1}{n} to platí i pro libovolnou dvojici, na kterou prvky mapuju.

Definice: nechť M,M=m,N,N=n,H{ff:MN}M, |M| = m, N, |N| = n, H \subseteq \left\{f \mid f : M \mapsto N\right\}

Příklad: pro M=NM = N je těleso máme silně 2-univerzální systém H={ha,ba,bN}ha,b:xax+bH = \left\{h_{a,b} \mid a, b \in N\right\} \quad h_{a, b}: x \mapsto ax + b

Příklad: pro MN|M| \gg |N| můžeme vzít H{ff:MM}\overline{H} \subseteq \left\{f \mid f: M \mapsto M\right\} a vytvořit z něho H{ff:MN}H \subseteq \left\{f \mid f: M \mapsto N\right\} tím, že budeme brát funkce modn\mathrm{mod} n

Dynamický slovník

Příklad (dynamický slovník): universum MM, M=2d|M| = 2^d, slovník SM,S=sS \subseteq M, |S| = s

Zvolíme n[s,2s],H,hHn \in \left[s, 2s\right], H, h \in H náhodně uniformně:

Lemma: pokud n=O(s)n = \mathcal{O}(s), tak průměrná doba operace je O(1)\mathcal{O}(1)

Důkaz: chceme (xS) E[nh(x)]=O(1)\forall x \in S)\ \mathbb{E}\left[n_{h(x)}\right] = \mathcal{O}(1). Budeme počítat počet kolizí na jeden prvek:

E[nh(x)]=1prvek x+yxE[Xy]# kolizıˊ=deˊlka nh(x)=1+s1n=O(1)\mathbb{E}\left[n_{h(x)}\right] = \overset{\text{prvek}\ x}{1} + \overbrace{\sum_{y \neq x} \mathbb{E}\left[X_y\right]}^{\#\ \text{kolizí} = \text{délka}\ n_{h(x)}} = 1 + \frac{s - 1}{n} = \mathcal{O}(1)

Statický slovník

Příklad (statický slovník): SS je dáno předem

Lemma: existuje hHh \in H s počtem kolizí n\le n.

Důkaz: E[C]2univ(s2)1nsn(n2)1nn2\mathbb{E}\left[|C|\right] \overset{2-\text{univ}}{\le} \binom{s}{2} \frac{1}{n} \overset{s \le n}{\le} \binom{n}{2} \cdot \frac{1}{n} \le \frac{n}{2}

Lemma: existuje hiHh_i \in H s počtem kolizí 00.

Důkaz: E[Cni](ni2)1ni212\mathbb{E}\left[|C_{n_i}|\right] \le \binom{n_i}{2} \cdot \frac{1}{n_i^2} \le \frac{1}{2}

(👀): C=i=1n(ni2)=ni22ni2|C| = \sum_{i = 1}^{n} \binom{n_i}{2} = \sum \frac{n_i^2}{2} - \sum \frac{n_i}{2}

Výpočtem dostáváme ni22C+ni2s+s=O(s)\sum n_i^2 \le 2 |C| + \sum n_i \le 2s + s = \mathcal{O}(s)

Testování

Násobení matic

Lemma: nechť aKn,a0\vec{a} \in K^n, \vec{a} \neq 0 a x{0,1}n\vec{x} \in \left\{0, 1\right\}^n uniformně náhodný. Pak Prx[aTx0]12\mathrm{Pr}_{\vec{x}} \left[\vec{a}^T \cdot \vec{x} \neq 0\right] \ge \frac{1}{2}

Důkaz: uvažme poslední nenulovou souřadnici ak\vec{a}_k. Ta má hodnotu 00 nebo ak\vec{a}_k, podle vybraného bitu. 00 bude tedy právě tehdy, když součet předchozích vyšel aka_k (a opakujeme s k1,k-1, \ldots).

Věta: existuje pravděpodobnostní algoritmus s jednostrannou chybou pro testování maticového násobení v čase O(n2)\mathcal{O}\left(n^2\right)

Algoritmus:

  1. vezmi náhodný x{0,1}n\vec{x} \in \left\{0, 1\right\}^n
  2. vstup ANO, jestliže ABx=CxA \cdot B \cdot \vec{x} = C \cdot \vec{x}, jinak NE

(👀): algoritmus trvá O(n2)\mathcal{O}(n^2) kroků

(👀): algoritmus řekne ano     (ABC)x=Dx=0\iff \left(A \cdot B - C\right) \cdot \vec{x} = D \cdot \vec{x} = \vec{0}

Nulovost polynomů (Polynomial Identity Testing)

Budeme používat trochu divný vstup:

Lemma: nechť P(x1,,xn)P(x_1, \ldots, x_n) je nenulový polynom nad KK stupně di\le d_i a SKS \subseteq K konečná. Nechť x1,,xnSx_1, \ldots, x_n \in S unif. náhodně. Pak Prx[P(x)=0]dS\mathrm{Pr}_{\vec{x}} \left[P(\vec{x}) = 0\right] \le \frac{d}{|S|}

Důkaz: pro n=1n =1 platí. Nyní indukcí podle nn. Rozdělíme polynom na AA a BB, kde stupeň v BB je ostře menší kk. To umíme tím, že vytkneme nějakou proměnnou:

Nyní si uvědomíme, že Pr[P(x)=0]α+βdkS+kS=dS\mathrm{Pr}\left[P(\vec{x}) = 0\right] \le \alpha + \beta \le \frac{d - k}{|S|} + \frac{k}{|S|} = \frac{d}{|S|}

Perfektní párování

Nechť (U,V,E)(U, V, E) je bipartitní graf, n=U=Vn = |U| = |V|. Pak Edmondsova matice grafu je n×nn \times n matice BB s Bu,v={xu,vuvE0uv∉EB_{u, v} = \begin{cases} x_{u, v} & uv \in E \\ 0 & uv \not\in E \end{cases}

(👀): det(B)\det(B) je polynom, jehož monomy vzájemně jednoznačně odpovídají perfektním párovaním.

Algoritmus (test existence PP):

  1. zvolme uniformně náhodně nezávisle xu,v{1,,2n}x_{u, v} \in \left\{1, \ldots, 2n\right\}
    • 2n2n kvůli tomu, aby nám vyšlo NE správně s pravděpodobností 12\ge \frac{1}{2}
  2. spočítáme determinant
    • pokud je nenulový, párování určitě existuje
    • pokud je nulový, tak párování neexistuje s pravděpodobností 12\ge \frac{1}{2}

Izolující lemma

Prvky aia_i budou hrany v grafu a množiny SjS_j budou perfektní párování.

Chceme nějak zvolit váhy a ukázat, že nám nějak jednoznačně identifikují nějakou z množin (tedy perfektních párování).

Věta: Nechť máme systém množin S1,,Sn{a1,,am}S_1, \ldots, S_n \subseteq \left\{a_1, \ldots, a_m\right\} s náhodně zvolenými vahami w(a1),,w(am)R,R=rw(a_1), \ldots, w(a_m) \in R, |R| = r. Pak Pr[ praˊveˇ jedinnaˊ Sj s minimaˊlnıˊ w(Sj)]1mr\mathrm{Pr}\left[\exists\ \text{právě jedinná}\ S_j\ \text{s minimální}\ w(S_j)\right] \ge 1 - \frac{m}{r}

Důkaz: Ai A_i \ldots\ jev, že existují Sk,SlS_k, S_l tak, ze w(Sk)=w(Sl)=minjw(Sj)w(S_k) = w(S_l) = \min_j w(S_j) a ai∉Sk,aiSla_i \not\in S_k, a_i \in S_l

Ukážeme, že Pr[Ai]1r\mathrm{Pr}\left[A_i\right] \le \frac{1}{r}. S1,,SnS_1, \ldots, S_n rozdělíme na dvě množiny podle ii:

Pokud AiA_i nastane, pak platí

Pak (když zafixujeme všechny váhy a vybíráme váhu aia_i) platí Prw(ai)R[w(Sk)=w(Sl)w(ai),ii vybraˊna]1r\mathrm{Pr}_{w(a_i) \in R}\left[w(S_k) = w(S_l) \mid w(a_i'), i' \neq i\ \text{vybrána}\right] \le \frac{1}{r}

Součtem pro všechny množiny a dostáním opačného jevu dostáváme hledanou nerovnost.

Algoritmus (rychlý paralelní algoritmus pro PP):

  1. zvolíme rovnoměrně náhodně váhy w(uv){1,,2m}w(uv) \in \left\{1, \ldots, 2m\right\} pro každou hranu
  2. zasubstituujeme do Edmondsovy matice následně: xuv=2w(uv)x_{uv} = 2^{w(uv)}
    • det(C) \mathrm{det}(C)\ldots\ příspěvek PP je ±2w(M)=±uvM2w(uv)\pm 2^{w(M)} = \pm \prod_{uv \in M} 2^{w(uv)}
      • z definice determinantu (permutace nějakých indexů matice)
  3. najdeme WW tak, že 2W2^W je maximální číslo tvaru 2α2^{\alpha} dělící det(C)\mathrm{det}(C)
    • zajímá nás poslední index, kde má determinant jedničku, jelikož to odpovídá unikátnímu PP (všechny PP jsou ve tvaru 0b10000w(uv)0b1\underbrace{0000}_{w(uv)})
  4. pro uvEuv \in E spočítáme d=det(Cuv)d = \mathrm{det}(C^{uv})
    • jestliže 2Ww(uv)2^{W - w(uv)} je max. číslo tvaru 2α2^{\alpha} dělící dd, pak přidáme uvuv do MM
      • odpovídá tomu, zda párování přežilo odstranění hrany – pokud ne, tak ho přidáme
  5. zkontrolujeme, že MM je PP (mohli jsme vygenerovat nesmysl)

TODO: algoritmus pro obecné grafy přes Tutteho matici

Odkazy