diff --git a/prace/bakalarka/index.md b/prace/bakalarka/index.md index 55b0d3b0d2d5cf6e96fd2a1e6c0c9bd18f8b14a0..c3313edf08c9042f199cea9fb51b82b921641148 100755 --- a/prace/bakalarka/index.md +++ b/prace/bakalarka/index.md @@ -206,10 +206,10 @@ Náhodný algoritmus $\alg$ je pravděpodobnostně $g(n)$-aproximační na minim pokud pro každý vstup $I$ algoritmus vždy vrátí přípustné řešení $\alg(I)$, pro které platí, že $\E[f(\alg(I))] \le g(|I|) \cdot \opt(I)$. ::: -Snadným důsledkem definice je, že pro každé $\varepsilon > 1$ pravděpodobnostně $g(n)$-aproximační algoritmus -vrátí s pravděpodobností zdola omezenou konstantou $1- {1\over \varepsilon} \in (0,1)$ řešení s hodnotou nejvýše $\varepsilon \cdot g(n)\cdot \opt(I)$. +Snadným důsledkem definice (a Markovovy nerovnosti) je, že pro každé $\lambda > 1$ pravděpodobnostně $g(n)$-aproximační algoritmus +vrátí s pravděpodobností zdola omezenou konstantou $1- {1\over \lambda} \in (0,1)$ řešení s hodnotou nejvýše $\lambda \cdot g(n)\cdot \opt(I)$. -Všimněme si, že na hodnotě $1-{1\over \varepsilon}$ příliš nezáleží. +Všimněme si, že na hodnotě $1-{1\over\lambda}$ příliš nezáleží. Opakovaným spouštěním algoritmu a pak vybráním nejlepšího z dodaných řešení zvládneme pravděpodobnost libovolně těsně přiblížit k jedné. @@ -399,7 +399,7 @@ Na obrázku [](#rsg) je zobrazen histogram skóre tohoto algoritmu spuštěného Zobecněné verze a související problémy -------------------------------------- -Zobecněním binárního paint shopu je obecný paint shop problém, zavedený Eppingem a spol. [@ps], +Zobecněním binárního paint shopu je obecný paint shop problém, zavedený Eppingem a spol. [@ps]. Z něj pochází motivace k binární verzi. ::: {c=box t=task name="Obecný paint shop problém"} @@ -1226,13 +1226,13 @@ data = g.load_main_test() import math def row(*args): - return pf.TableRow(*(pf.TableCell(pf.Plain(*(i if isinstance(i, list) else parse_string(f"{i:0.3}") if isinstance(i, float) else parse_string(str(i))))) for i in args)) + return pf.TableRow(*(i if isinstance(i, pf.TableCell) else pf.TableCell(pf.Plain(*(i if isinstance(i, list) else parse_string(f"{i:0.3}") if isinstance(i, float) else parse_string(str(i))))) for i in args)) def gen_alg(pipeline_name, algo_name, name_suffix, floatpage, add_note=False): pipeline = data.pipelines[pipeline_name] by_n = data_lib.group_by_n(pipeline) rows = [] - percentils = [5, 25, 50,75, 90] + percentils = [5, 25, 50,75, 95] print_errors = any(i.error or i.data.get("broken", False) for i in pipeline) for n in sorted(by_n.keys()): d = by_n[n] @@ -1244,7 +1244,7 @@ def gen_alg(pipeline_name, algo_name, name_suffix, floatpage, add_note=False): variance = sum((avg-i)**2 for i in scores)/(l-1) errors = len([None for i in d if i.error or i.data.get("broken", False)]) rows.append(row( - n, + pf.TableCell(pf.Plain(*parse_string(str(n))), alignment='AlignRight'), *([errors] if print_errors else []), avg, math.sqrt(variance), @@ -1252,14 +1252,14 @@ def gen_alg(pipeline_name, algo_name, name_suffix, floatpage, add_note=False): )) table = pf.Table(pf.TableBody(*rows), head=pf.TableHead(row( - [pf.Math("n", format='InlineMath')], + pf.TableCell(pf.Plain(pf.Math("n", format='InlineMath')), alignment='AlignRight'), *(["chyb"] if print_errors else []), [pf.Math("\\overline{\\delta_{\\algo{"+algo_name+"}}(n)}", format='InlineMath')], - [pf.Math("\\sqrt{\widehat{\\delta_{\\algo{"+algo_name+"}}(n)^2}}", format='InlineMath')], + [pf.Math("S_{\\delta_{\\algo{"+algo_name+"}}}(n)", format='InlineMath')], *([pf.Math(f"{i} \%", format='InlineMath')] for i in percentils) ))) note = element.content if add_note else [] - return processor.transform([pf.Figure(table, *note, caption=pf.Caption(pf.Plain(*parse_string("Statistika algoritmu "), pf.Math(f"\\algo{{{algo_name}}}", format="InlineMath"), *name_suffix, *parse_string("."))), attributes=dict(floatpage=floatpage))]) + return processor.transform([pf.Figure(table, *note, caption=pf.Caption(pf.Plain(*parse_string("Statistika algoritmu "), pf.Math(f"\\algo{{{algo_name}}}", format="InlineMath"), *name_suffix, *parse_string("."))), attributes=dict(floatpage=floatpage, tocmac="", type="table", type_text="Tabulka"))]) return [ *gen_alg("greedy", "g", [], "stat1", True), *gen_alg("rg", "rg", [], "stat1!"), @@ -1273,7 +1273,7 @@ Veškeré hodnoty jsou zaokrouhleny na 3 platné číslice. $\overline{\delta_{\alg}(n)}$ značí výběrový průměr, tedy $\frac{1}{m}\sum_{0\le i < m} r_i$, kde $m$ je počet testů a $r_i$ je relativní skóre $i$-tého z nich. -$\widehat{\delta_{\alg}(n)^2}$ značí výběrový rozptyl, tedy $\frac{1}{m-1}\sum_{0\le i < m} \left(r_i - \overline{\delta_{\alg}(n)}\right)^2$. +$S_{\delta_{\alg}(n)}$ značí výběrovou směrodatnou odchylku, tedy $\sqrt{\frac{1}{m-1}\sum_{0\le i < m} \left(r_i - \overline{\delta_{\alg}(n)}\right)^2}$. ::: \vfil\eject