diff --git a/Writerside/images/image_678.png b/Writerside/images/image_678.png new file mode 100644 index 0000000..1d345f7 Binary files /dev/null and b/Writerside/images/image_678.png differ diff --git a/Writerside/images/image_679.png b/Writerside/images/image_679.png new file mode 100644 index 0000000..ccb9190 Binary files /dev/null and b/Writerside/images/image_679.png differ diff --git a/Writerside/in.tree b/Writerside/in.tree index ef2c061..2cd4bb9 100644 --- a/Writerside/in.tree +++ b/Writerside/in.tree @@ -100,6 +100,7 @@ + diff --git a/Writerside/topics/04/Theoretische Informatik/02_GrundlagenFormaleSprachen.md b/Writerside/topics/04/Theoretische Informatik/02_GrundlagenFormaleSprachen.md new file mode 100644 index 0000000..1705bb6 --- /dev/null +++ b/Writerside/topics/04/Theoretische Informatik/02_GrundlagenFormaleSprachen.md @@ -0,0 +1,86 @@ +# Grundlagen formaler Sprachen +## Von einer Problembeschreibung zur Codierung + +**Erinnerung k-Clique** +- Eingabe: Graph $V = (V, E)$ und $k ∈ Ν$ +- Ausgabe: Gibt es eine Clique C der Größe k in G + +> Wie erhält ein Algorithms diese Eingabe (Graph) +> +> Wie teilt der Algorithmus die Ausgabe (Ja/Nein) mit? + +### Beispiel: Codierung eines gerichteten Graphen +- Graph sei über Adjazenzlisten gegeben +- Wir Codieren den Graphen als Bitstring + +**Mögliche Codierung eines Graphen** +![image_678.png](image_678.png) + +- andere Codierungen oder auch anderes Alphabet denkbar +- geht auch für gerichtete Graphen (z.B. für k-Clique) + + +## Grundbegriffe +### Alphabete und Zeichenketten +> Alphabet Σ: endliche Menge von Zeichen +> +> Zeichenkette s über Alphabet Σ: endliche Zeichenfolge aus Σ + +- die leere Zeichenkette bezeichnen wir als ε +- $s_1 * s_2$ ist die **Konkatenation** (_Verkettung_) zweier Zeichenketten $s_1$ und $s_2$ + +- $Σ^*$: Menge aller (auch leerer) Zeichenketten über Σ +- $Σ^+$: Menge aller nicht-leerer Zeichenketten über Σ + +#### Beispiel Alphabete und Zeichenketten +Sei $Σ=\{a,b,c\}$ +- Alle Zeichenketten der Länge 2 über Σ: + - {$aa$, $ab$, $ac$, $ba$, $bb$, $bc$, $ca$, $cb$, $cc$} +- $s_1 = ababc ∈ Σ^*$ und $s_2 = cbbb ∈ Σ^*$ +- für $s = ababccbbb$ gilt $s = s_1 * s_2 ∈ Σ^*$ + + +### Präfixe, Suffixe und Teilzeichenketten +> Sei s ∈ $Σ^*$ eine Zeichenkette über Σ. +> +> +> Suffix u von s: $∃s' in Σ^*$ so dass $s = s' * u$ +> +> Präfix u von s: $∃s'' ∈ E^*$ so dass $s = u * s''$ +> +> Teilzeichenkette u von s: $∃s',s'' ∈ E^*$ so dass $s = s' * u * s''$ + +- $|s|$: Länge der Zeichenkette s +- $\#_a(s)$: Häufigkeit des Zeichens $a ∈ Σ$ in Zeichenkette $s ∈ Σ^*$ + +#### Beispiel Präfixe, Suffixe und Teilzeichenketten +Sei $Σ = \{0,1\}$ und $s = 101011110$. +- Wieviele Präfixe hat s? + - 8 +- Wie viele Zeilzeichenketten der Länge 3 hat s? + - 3? +- **kompaktere Notation**: $s:s = 101011110 = (10)^21^40$ + +## Sprachen und das Wortproblem +> im Folgenden sei immer Σ das zugrunde liegende Alphabet + +**Definition**: +> formale Sprache L über Σ: eine Teilmenge von $Σ^*$ +> +> Wort w aus L: ein Element $w ∈ L$ + +- L kann unendliche ($|l| = ∞$) oder endliche ($|L| = k ∈ Ν$) sein + +**Beispiel** +- Σ = {0,1,...,9} +- Beschreibe die Worte aus $L=\{007*s | s ∈ Σ^*\}$. + - $(007)^1\{0,1,...,9\}^*$ **?** +- Wie viele Wörter enthält $L=\{s ∈ \{0,1,2\}^* | |s| ≤ 5\}$? + - $ \sum_{n=0}^{5} 5^n$ **?** + +### Algorithmisches Problem für formale Sprachen +- L sei eine beliebige Sprache über Σ +- ![image_679.png](image_679.png) +- es handelt sich also um ein Entscheidungsproblem +- wir geben typischerweise $1$ aus, wenn $s ∈ L$ und sonst $0$ +