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