# 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 Teilzeichenketten 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$