diff --git a/graphics/bruteforce_dist.svg b/graphics/bruteforce_dist.svg
new file mode 100644
index 0000000..194d14a
--- /dev/null
+++ b/graphics/bruteforce_dist.svg
@@ -0,0 +1,3145 @@
+
+
diff --git a/graphics/bruteforce_dist2.svg b/graphics/bruteforce_dist2.svg
new file mode 100644
index 0000000..b427359
--- /dev/null
+++ b/graphics/bruteforce_dist2.svg
@@ -0,0 +1,3145 @@
+
+
diff --git a/graphics/bruteforce_helperdata1.svg b/graphics/bruteforce_helperdata1.svg
new file mode 100644
index 0000000..71cada8
--- /dev/null
+++ b/graphics/bruteforce_helperdata1.svg
@@ -0,0 +1,242 @@
+
+
diff --git a/graphics/bruteforce_helperdata2.svg b/graphics/bruteforce_helperdata2.svg
new file mode 100644
index 0000000..32a366d
--- /dev/null
+++ b/graphics/bruteforce_helperdata2.svg
@@ -0,0 +1,298 @@
+
+
diff --git a/graphics/execution/recursive.typ b/graphics/execution/recursive.typ
index cf15974..c86cec4 100644
--- a/graphics/execution/recursive.typ
+++ b/graphics/execution/recursive.typ
@@ -1,19 +1,38 @@
#import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge
#import fletcher.shapes: pill
+#import "@preview/touying:0.6.1": *
-#diagram(
+#let fletcher-diagram = touying-reducer.with(reduce: fletcher.diagram, cover: fletcher.hide)
+
+#fletcher-diagram(
spacing: (-3mm, 8mm), // wide columns, narrow rows
node-stroke: 1pt, // outline node shapes
edge-stroke: 1pt, // make lines thicker
mark-scale: 60%, // make arrowheads smaller
node((0,0), [Start], name: ),
+ pause,
+
node((-4, 1), [u1], name: ),
node((4, 1), [u2], name: ),
+ node(enclose: (, ), stroke: aqua, fill: aqua.lighten(90%), name: ),
+ edge(, , "->"),
+ edge(, , "->"),
+ node((-20mm, 39mm), [n1], shape: pill, name: ),
+ edge(, , "->"),
+ pause,
node((-6, 2), [u11], name: ),
node((-2, 2), [u12], name: ),
node((2, 2), [u21], name: ),
node((6, 2), [u22], name: ),
+ node(enclose: (, ), stroke: teal, fill: teal.lighten(90%), name: ),
+ node((-20mm, 21.9mm), [n2], shape: pill, name: ),
+ edge(, , "->"),
+ edge(, , "->"),
+ edge(, , "->"),
+ edge(, , "->"),
+ edge(, , "->"),
+ pause,
node((-7, 3), [u111], name: ),
node((-5, 3), [u112], name: ),
@@ -24,21 +43,12 @@
node((5, 3), [u221], name: ),
node((7, 3), [u222], name: ),
- node((-20mm, 33mm), [n1], shape: pill, name: ),
- node((-20mm, 18.5mm), [n2], shape: pill, name: ),
- node((-20mm, 4mm), [n3], shape: pill, name: ),
+ node((-20mm, 4.6mm), [n3], shape: pill, name: ),
- edge(, , "->"),
- edge(, , "->"),
- edge(, , "->"),
+
+ edge(, , "->"),
- edge(, , "->"),
- edge(, , "->"),
-
- edge(, , "->"),
- edge(, , "->"),
- edge(, , "->"),
- edge(, , "->"),
+
edge(, , "->"),
edge(, , "->"),
@@ -49,8 +59,7 @@
edge(, , "->"),
edge(, , "->"),
- node(enclose: (, ), stroke: aqua, fill: aqua.lighten(90%), name: ),
- node(enclose: (, ), stroke: teal, fill: teal.lighten(90%), name: ),
- node(enclose: (, ), stroke: eastern, fill: eastern.lighten(90%), name: )
+
+ node(enclose: (, ), stroke: eastern, fill: eastern.lighten(90%), name: )
)
diff --git a/graphics/given_codeword_dist.svg b/graphics/given_codeword_dist.svg
new file mode 100644
index 0000000..2a39f3d
--- /dev/null
+++ b/graphics/given_codeword_dist.svg
@@ -0,0 +1,3153 @@
+
+
diff --git a/graphics/recursive_distribution.svg b/graphics/recursive_distribution.svg
new file mode 100644
index 0000000..432a1ef
--- /dev/null
+++ b/graphics/recursive_distribution.svg
@@ -0,0 +1,3145 @@
+
+
diff --git a/graphics/recursive_helperdata_dist.svg b/graphics/recursive_helperdata_dist.svg
new file mode 100644
index 0000000..a19a882
--- /dev/null
+++ b/graphics/recursive_helperdata_dist.svg
@@ -0,0 +1,274 @@
+
+
diff --git a/main.typ b/main.typ
index bae0c36..849d214 100644
--- a/main.typ
+++ b/main.typ
@@ -108,10 +108,70 @@ grid(
- Brute-Force Ansatz
-== Rekursiver Ansatz
+== Rekursiver Ansatz
-== Vorgabe des Codeworts
+1. Teile Verteilung am Erwartungswert auf
+2. Addiere weitere Weights ($0.25, 0.125, ...$)
+3. Maximiere Abstand zur nächstgelegenen Grenze
+4. Teile neue Verteilungen wieder am Erwartungswert auf
+
+== Rekursiver Ansatz
+#align(horizon)[
+#include("./graphics/execution/recursive.typ")
+]
+
+== Rekursiver Ansatz --- Resultierende Verteilung
+
+#align(horizon)[
+#figure(
+ image("./graphics/recursive_distribution.svg", width: 60%)
+)]
+
+== Rekursiver Ansatz --- Helperdaten
+
+#align(horizon)[
+ #figure(
+ image("./graphics/recursive_helperdata_dist.svg", width: 60%)
+ )
+]
+
+== Vorgabe des Codeworts
+
+- Generierung eines zufälligen Schlüssels
+- Nutze Quantile der Normalverteilung als vorgegebene Grenzen
+- Wähle jeweilige Linearkombination, die am besten das Quantil des Vorgegebenen Bits annähert
+
+== Vorgabe des Codeworts --- Verteilung
+
+#figure(
+ image("./graphics/given_codeword_dist.svg")
+)
== Brute-Force Ansatz
-= Ergebnisse
+- Großer Datensatz mit Grenzen
+- Führe Optimierung und Quantisierung mit jedem Satz Grenzen durch
+- Pearson's Chi-Square Test der Quantisierten Symbole auf Gleichverteilung
+- Maximales Resultat des Chi-Square Tests gibt optimale Grenzen zurück
+
+== Brute-Force Ansatz --- Verteilung
+
+#figure(
+ image("./graphics/bruteforce_dist.svg")
+)
+
+== Brute-Force Ansatz --- Helperdaten
+
+#figure(
+ image("./graphics/bruteforce_helperdata1.svg")
+)
+
+= Fazit
+
+- Rekursiver Ansatz generiert gleichverteilte Ausgansverteilungen
+ - Helperdaten geben Informationen über das Codewort bekannt
+- Vorgabe des Codeworts als Bedingung nicht stark genug
+- Brute-Force Ansatz findet Gleichverteilungen
+ - Helperdaten geben keine Informationen bekannt
+ - Verbesserung der Bitfehlerrate um einen Faktor $10$
+ - Vorberechnete Grenzen können auf beliebige Normalverteilungen angewendet werden