Informatik I, Seite 1 EINFÜHRUNG IN DIE INFORMATIK I (Script zu den Vorlesungen vom 13.12.95 und 14.12.95, 76021 Brauer) (im folgenden wird noch einmal an Kapitel 1 angeschlossen) Syntaxanalyse: Finden aller (allerwesentlich verschiedenen) Ableitungen eines Wortes (Satzes, Programms). In natürlichen Sprachen gibt es zahlreiche Mehrdeutigkeiten: Prinzipielle Verfahren zur Syntaxanalyse Testen, ob w ∈L(G), w ∈∑* 1. Erzeugung: Versuche Ableitung "Top-Down" zu finden. Start mit S, dann werden die Regeln angewendet: S ⇒ w1 ⇒ .... ⇒ wn ≈ w , wobei durch ≈ angedeutet werden soll, daß während der Anwendung der Regeln auf das Ergebnis geschaut wird. Während der Ableitung kann man in Sackgassen gelangen, dann wird Rücksetzen notwendig. 2. Reduktion Starte mit w, versuche die Produktionen "rückwärts" anzuwenden. v→u u→v Statt G jetzt R G anwenden, solange bis S erreicht ist. Auch hier Sackgassen, Rücksetzen. Kapitel 2: Halbgruppen und Relationen 2.1 Halbgruppen und Monoide Definition: Sei H eine Menge, Κ eine zweistellige Verknüpfung: K: H × H → H Es gelte das Assoziativgesetz a • ( b • c ) = ( a • b ) • c für alle a, b, c aus H. Dann heißt ( H , • ) Halbgruppe. Eine Halbgruppe heißt Monoid, wenn sie ein Einselement (neutrales Element) e besitzt mit e • h = h • e = h für alle h ∈ H. Feststellung: Eine Halbgruppe hat höchstens ein Einselement. Ein Monoid genau eines. Beweis: Indirekt, Annahme: Es existieren zwei verschiedene Einselemente e und e'. Widerspruch durch: e = e • e' = e'. Informatik I, Seite 2 Beispiele: 1. A sei eine Menge, dann ist A* Monoid mit ε als Einselement. Bem.: A* ist sogar ein freies Monoid, d.h. aus a1 • a2 • ..... • an = b1 • b2 • ..... • bm folgt n = m, ai = bi für i = 1, 2, ..., n. 2. ( N, ⋅ ) ist Monoid, 1 ist Einselement. ( N0, +) ist Monoid, 0 Einselement (neutrales Element). 3. 4. ( H, ⋅ ) Halbgruppe, P( H ) = Menge aller Teilmengen von H (Potenzmenge). Verknüpfung auf P(H) : Komplexprodukt: U • V = { u ⋅ v | u ∈ U, v ∈ V }, U, V ⊆ H. Dann ist ( P(H), • ) Halbgruppe. Sie ist nicht frei , denn ∅ • U = ∅. Ist ( H, ⋅ ) Monoid, dann auch ( P(H), • ) mit dem Einselement {e}. Definition: Sei ( H, ⋅ ) Halbgruppe, U ⊆ H. U heißt Unterhalbgruppe von ( H, ⋅ ), wenn U • U ⊆ U. U heißt Untermonoid, wenn H Monoid mit Einselement e und e ∈ U ist. E ⊆ H. Dann wird definiert: E1 := E, für i ∈ N: Ei+1 := Ei ⋅ E. Weiterhin: ∞ + i E = E = {e 1 ⋅ e 2 ....⋅e n | n ∈ Ν, e i ∈ E} U i=1 E+ ist die von E erzeugte (Unter-) Halbgruppe (von (H, ⋅ )), denn E+ • E+ ⊆ E+ und E+ ist die kleinste (bzgl. ⊆ ) Unterhalbgruppe U ⊆ H mit E ⊆ U. Ist ( H, ⋅ ) Monoid, e Einselement. Dann: E° := {e}, E* := E° ∪ E+ . E* ist das von E erzeugte Monoid. Beispiele: ( N, ⋅ ) = ( P*, ⋅ ) ( P = die Menge der Primzahlen ) ( N0, ⋅ ) = ({1}*, + ) Σ Alphabet, ( Σ*, • ) = ( Σ*, • ) Satz: E endlich, E ⊆ H, ( H, • ) Halbgruppe. Dann ist E* aufzählbar, wenn • effektiv berechenbar ist. Beweis: Bilde E1, E2, E3, ..... Informatik I, Seite 3 2.2 Relationen Definition: Seien M, N Mengen. Jede Teilmenge ζ ⊆ M × N heißt Relation (zweistellig). ζ = Menge von Paaren "Graph der Relation". Statt (x, y) ∈ ζ wird auch geschrieben: x ζ y. Beispiel: M Einwohner, N gemeldete Autos. ζ entspricht "besitzt". Definition: Umkehrrelation ζ -1 zu ζ (Inverse, Konverse, Transponierte): ζ-1 = { (y,x) | (x,y) ∈ ζ }. Ein häufiger Fall ist: M = N. Eigenschaften der Relation ζ ⊆ M × M: reflexiv: x ζ x für alle x ∈ M irreflexiv: für kein x gilt x ζ x symmetrisch: x ζ y impliziert y ζ x f.a. x, y ∈ M antisymmetrisch: aus x ζ y und y ζ x folgt stets x = y transitiv: x ζ y und y ζ z impliziert x ζ z f.a. x, y, z ∈ M Äquivalenzrelation (verallg. Gleichheit): Rel., die reflexiv, symmetrisch und transitiv ist. Feststellung: Die Äquivalenzrelation ζ definiert eine Zerlegung von M in Äquivalenzklassen [x]ζ = { y ∈ M | x ζ y } Gilt nicht a ζ b, dann [a]ζ ∩ [b]ζ = ∅ (wegen Transitivität). M= U [ x]ζ x∈M z ∈ [x]ζ impliziert [z]ζ = [x]ζ, also unabhängig vom Repräsentanten. partielle Ordnung: reflexive und transitive Relation Halbordnung: antisymmetrische Relation totale / lineare Ordnung: Halbordnung und für x, y ∈ M gilt stets x ζ y oder y ζ x. strenge Halbordnung: irreflexive Halbordnung Beispiele: M = N (ohne die 0): ζ: ≤ auf N (partiell), x ζ y: x teilt y (Halbordnung), ζ: < auf N (streng). Definition: Verknüpfung ( 2-stelliger) Relationen ζ ⊆ L × M, τ ⊆ M × N: ζ • τ = { (x, z) | x ∈ L , z ∈ N, es ex. y ∈ M mit (x, y) ∈ ζ, (y, z) ∈ τ }. Feststellung: Verknüpfung ist assoziativ. Also bilden Rel. auf M einen Monoid mit Einselement ∇ = { (x, x) | x ∈ M }. Bemerkung: 1. Relation ζ ⊆ M × N ist auffaßbar als Transformation ζ: M → N (oder Abb. M → P(N)) x → { y ∈ N | x ζ y } = ζ (x) 2. Ist | ζ(x) | = 1 für jedes x ∈ M, dann ist ζ Abb. (totale). 3. Ist | ζ(x) | ≤ 1, dann partielle Abb. Informatik I, Seite 4 Allgemeine Bemerkung: I.a. werden n-stellige Relationen ζ ⊆ M1 × M2 × .... × Mn betrachtet. relationale Datenbanken ≈ Ansammlungen von Relationen Operationen auf Relationen: ∪, \, ∩ (Mengenoperationen) Komponentenauswahlen (Selektion) ( , ↑, ..... , ↑, ..... ) Weglassen von Komponenten (Projektion) Zusammenkleben ( ..... () ...... ) Datendefinitionssprachen, Datenmanipulationssprachen (zB. SQL) arbeiten mit Relationen. 2.3 Graphen Definition: Sei E Menge (Ecken, Knoten). Dann heißt G = ( E, K ) mit K ⊆ E × E gerichteter Graph (Digraph) K heißt die Menge der Kanten. Graphische Darstellung: Ecke x: Kante (x, y) : x• x→y Beispiel: G = ( {a, b, c, d} , { (a, b), (a, c), (a, d), (b, c), (d, b), (d, c) } ) Bemerkung: Rel. ζ ⊆ E × E definiert Graph: Gζ = ( E, ζ ). Definition: ζ sei symmetrische Relation über E. Dann heißt (E, ζ ) ungerichteter Graph (kurz Graph). Statt (x, y) ∈ ζ und ( y, x ) ∈ ζ: { x, y }. Definition: (E, K) sei Digraph. Für E' ⊆ E und K' = { (x, y) ∈ K | x, y ∈ E' } ist G' = (E', K') der von E' erzeugte Teilgraph. Vollständigkeit eines Graphen bedeutet, daß zwischen je zwei Ecken x u. y (x ≠ y) eine Kante (x, y) existiert. Weg im Graph: Kantenfolge (e0, e1), (e1, e2 ), ....., (en-1, en), ei-1≠ ei, (ei-1, ei ) ∈ K; "von e0 nach en", Länge n. Ein Weg der Länge ≥ 1 heißt Kreis (Zyklus), wenn e0 = en. Beim ungerichteten Kreis heißt der Graph eulersch: Jede Kante des Graphen kommt genau einmal vor, hamiltonsch: Jede Ecke des Graphen kommt genau zweimal vor. Bemerkung: Eulersche Kreise finden ist leicht, hamiltonsche sehr schwer. Informatik I, Seite 5 Definition: Ein Graph heißt zusammenhängend, wenn "zwischen je zwei Ecken x, y ein Weg von x nach y oder von y nach x existiert". Ein gerichteter Graph ohne Kreise heißt azyklisch, ein ungerichteter Graph ohne Kreis kreislos oder Wald. Ein zusammenhängender, kreisloser, ungerichteter Graph heißt Baum. Satz: G sei ein ungerichteter Graph, n Ecken, m Kanten. Dann sind äquivalent: 1. G ist Baum. 2. Zwischen je 2 Ecken existiert genau ein Weg. 3. G zusammenhängend; durch Weglassen einer (bel.) Kante wird G unzusammenhängend. 4. G zusammenhängend und m = n - 1. 5. G kreislos: Hinzufügen einer Kante ergibt genau einen Kreis.