FH-HOME


  1. Basisbegriffe aus der Mengenlehre


  2. Rekursive Funktionen und Prädikate


  3. Graphen


  4. Bäume


  5. Strukturtheorie


  6. Algebra


  7. Masstheorie


  8. Wahrscheinlichkeitstheorie


  9. Bayessche Netze


  10. Optimierungstheorie


  11. Maschinelles Lernen


  12. Formale Sprachen


  13. Automaten


  14. Komplexitätstheorie



GRUNDLAGEN DER INFORMATIK/ THORETISCHE INFORMATIK - Mengentheoretische Notation


AUTHOR: Gerd Döben-Henisch
DATE OF FIRST GENERATION: Oct-9, 2001
DATE OF LAST CHANGE: April-3, 2006
EMAIL: Gerd Döben-Henisch



Es handelt sich hier um eine informelle Sammlung von verwendeten Zeichen und Begriffen, die keinen Anspruch auf systematische Vollständigkeit erhebt. Diese Sammlung ist gedacht als Ergänzung zu den verschiedensten Lehrveranstaltungen.


Basisbegriffe aus der Mengenlehre

  1. Der Begriff Menge ist ein Grundbegriff. Alle Elemente in einer Menge kommen nur einmal vor.


  2. Endliche Mengen kann man angeben durch Aufzählen der Elemente, z.B. {1,2,3,4,a,b,c}.


  3. Unendliche Mengen kann man angeben über die sie definierenden Eigenschaften, z.B. {x| P(x)}, die Menge der x, für die gilt, dass die Eigenschaft P auf sie zutrifft.


  4. := x ist Element von y


  5. := x ist nicht Element von y ¬(x y)


  6. (a,b) := Das geordnete Paar von a und b; (a,b) = {{a}, {a,b}} /* Definition nach Wiener (1914) und Kuratowski (1921) */

  7. Satz: (x,y) = (u,v) ==> x = u & y = v

  8. Satz: x != y ==> (x,y) != (y,x)

  9. pr1(p) := die erste Projektion von p; pr1(p) = u gdw p ist ein geordnetes Paar & (E:v)( p = (u,v) )


  10. pr2(p) := die zweite Projektion von p; pr1(p) = u gdw p ist ein geordnetes Paar & (E:v)( p = (v,u) )


  11. C := Teilmenge; x C y = {a| x dann a y}


  12. u := Vereinigung von x und y; x u y = {a| a x oder a y }


  13. U := Grosse Vereinigung von X: U (X) = {z | (E:y)(y X & z y ) }


  14. cut := Durchschnitt; x cut y = {a| a x und a y }


  15. CUT := Grosser Durchschnitt von X: CUT (X) = {z | (A:y)(y X ==> z y ) }


  16. - := Differenz; x - y = {a| a x und a y }


  17. x := Operator zur Erzeugung von Paarmengen; seien X und Y Mengen: X x Y


  18. Eine Relation (REL) ist eine Menge von geordneten Paaren; sei REL(R), dann gilt, es gibt Mengen X und Y mit R C X x Y. Ist X = Y, dann ist eine Relation R eine Relation auf ('on') X. Gilt (a,b) R, kann man auch schreiben aRb. Folgende Eigenschaften sind bei Relationen von Interesse:


    1. rn:= range/ Wertebereich einer Relation R; rn(R) = {y | (E:x)( xRy ) }


    2. dm := domain/ Definitionsbereich einer Relation R; dm(R) = {x | (E:y)( xRy ) }


    3. fd := field/ Feld einer Relation R; fd(R) = dm(R) u rn(R)


    4. R-1 := die Konverse einer Relation R; (y,x) R-1 gdw (x,y) R


    5. R``A := das R-Bild von A; R``A = { y | (E:x)( x A & (x,y) R ) }

    6. R''A := das R-UrBild von A; R''A = { x | (E:y)( y A & (x,y) R )

    7. R /| A := die Linksbeschränkung von R auf A; R /| A = { p | p R & pr1(p) A }

    8. R |\ A := die Rechtsbeschränkung von R auf A; R |\ A = { p | p R & pr2(p) A }

    9. R /|\ A := die Totalbeschränkung von R auf A; R /|\ A = { p | p R & p A x A } }


    10. Reflexivität: aRa für alle a


    11. Irreflexivität: Für alle a gilt ¬(aRa)


    12. Transitivität: aRb und bRc impliziert aRc


    13. Symmetrie: aRb impliziert bRa


    14. Assymetrie: aRb impliziert bRa


    15. Rechtseindeutig: aRb & aRc impliziert b = c


    16. Linkseindeutig: aRb & cRb impliziert a = c


    17. SURJEKTIV(R) gdw (E:a,b)( R C a x b & RECHTSEINDEUTIG(R) & b C rn(R) )


    18. Äquivalenzrelation: R ist symmetrisch und transitiv. Es gilt z.B. dm(R) = rn(R) und R ist reflexiv. Äquivalenzrelationen zerlegen das Feld einer Relation vollständig und disjunkt in Teilklassen, d.h. der Durchschnitt von zweien solchen Teilklassen ist leer. Diese durch eine Äquivalenzrelation R induzierte Teilklassen heissen Äquivalenzklassen bzgl. R.


    19. [A]R := A ist eine Äquivalenzklasse bzgl. R und man nennt A den Repräsentanten der Äquivalenzklasse; [A]R gdw R ist eine Äquivalenzrelation & (E:u) u A & (A:u)( u A ==> (A:v)( v A <==> (u,v) R) ).


    20. Index(R) := Wenn R Äquivalenzklasse ist, dann die Anzahl der verschiedenen Äquivalenzklassen, die R hat; falls Index(R) < Unendlich, dann hat R einen endlichen Index (s.u.).


    21. P-Abschluss (oder die P-Hülle) ('P-Closure') einer Relation R: sei P eine Menge von Eigenschaften einer Relation R. Dann ist der P-Abschluss der Relation R die kleinste Relation R' für die gilt, dass sie alle Paare von R enthält, die die Eigenschaft P haben.
      Beispiel 1: Sei R+ der transitive Abschluss von R. Er wird vereinbart mit:


      1. Wenn (a,b) in R dann (a,b) R+


      2. Wenn (a,b) in R+ und (b,c) R, dann (a,c) in R+


      3. Nichts ist in R+ ausser dem, was in (1) und (2) vereinbart wurde.



      Beispiel 2: Der reflexive transitive Abschluss von R, geschrieben R*, wird erreicht durch R+ u { a | (a,a) R }


    22. Hintereinanderausführung von zwei Relationen R,S: R o S = { (a,b) | (E:z)( aRz & zSb )}


    23. Funktion (FN) : Eine Relation R ist eine Funktion gdw R ist rechtseindeutig.

      f ist eine Abbildung der Menge A in die Menge B gdw FN(f) & A C dm(f); dann schreibt man auch f: A ---> B. Statt (a,b) f schreibt man auch f(a) = b oder f'a = b.


    24. Eine Funktion f ist injektiv gdw sie zusätzlich noch linkseindeutig ist. Anders: |f-1(b)| < 1 für jedes b rn(f).


    25. Eine Funktion f ist surjektiv gdw |f-1(b)| > 1 für jedes b rn(f).


    26. Eine Funktion f ist bijektiv gdw |f-1(b)| = 1 für jedes b rn(f).



  19. pow(x) oder 2x := Potenzmenge von x; Menge aller Teilmengen


  20. M ist Halbordnung unter R: HALBORDNUNG(M,R) gdw ( (A:a,b,c)(a,b,c M => R C M x M &
    (a,a) R &
    (a,b) R & (b,c) R => (a,c) in R &
    (a,b) R & (b,a) R => a=b )

    Beispiel für eine Halbordnung wäre die Menge der natürlichen Zahlen Nat (s.u.) mit der Relation '>'.


  21. Kette oder lineare Ordnung unter R:
    KETTE(M,R) gdw HALBORDNUNG(M,R) & (A:a,b)(a,b in M => (a,b) R or (b,a) R )


  22. Obere Schranke in T von M unter R: s=obSch(T,M,R) gdw HALBORDNUNG(M,R) & T C M & (A:t)(t T => (t,s) R ) )


  23. Untere Schranke in T von M unter R: s=unSchr(T,M,R) gdw HALBORDNUNG(M,R) & T C M & (A:t)(t T => (s,t) R ) )


  24. Obere Grenze/ Supremum in T von M unter R: o=sup(T,M,R) gdw (E:S)( S = { s | s=obSchr(T,M,R)} & o S & ¬(E:t)(t S & (t,o) R) ) )


  25. Untere Grenze/ Infimum in T von M unter R: o=inf(T,M,R) gdw (E:S)( S = { s | s=unSchr(T,M,R)} & o S & ¬(E:t)(t S & (o,t) R) )) )


  26. Bedingt vollständig M unter R: BEDINGT_VOLLSTAENDIG(M,R) gdw
    HALBORDNUNG(M,R) & (A:T)( T C M & ¬(T = 0) & (E:s)( s=obSchr(T,M,R)) => (E:o)(o=sup(T,M,R)))


  27. Vollständig M unter R: VOLLSTAENDIG(M,R) gdw
    HALBORDNUNG(M,R) & (A:T)( T C M & (E:s)( s=obSchr(T,M,R)) => (E:o)(o=sup(T,M,R)))


  28. T ist Anfang von M unter R: ANFANG(T,M,R) gdw
    KETTE(M,R) & T C M & ¬(T = 0) & (E:s)( s M & ¬s T ) &
    (A:t,r)( t T & r T u M & (r,t) R => r T ))


  29. Der durch k bestimmte Abschnitt in M:
    Abschn(k,M) = { t | (E:R)(KETTE(M,R) & t in M & (t,k) R ) }


  30. T ist offener Anfang von M unter R: OFFENER_ANFANG(T,M,R) gdw
    ANFANG(T,M,R) & (A:t)( t T => ¬(E:r)( (t,r) R ))


  31. suc(x) := Nachfolger von x; suc(x) = x u {x}


  32. Die natürlichen Zahlen (Nat) wurden zuerst von Peano axiomatisch charakterisiert; später gab es weitere Charakterisierung auf der Basis einer axiomatischen Mengenlehre. Wir benutzen hier eine Charakterisierung in Anlehnung an Peano, weil diese dem konstruktivistischen Ansatz einer Theorie der Berechenbarkeit näher ist:


    1. 0 Nat



    2. (A:x)( x Nat => suc(x) Nat )


    3. (A:x)( x Nat => ¬(suc(x) = 0 ) )


    4. (A:x,y)( suc(x) = suc(y) => x = y )


    5. (A:M)( [ 0 M & (A:n)( n M => suc(n) M)] => M = Nat )


  33. vg := Vorgänger; vg = suc|\ Nat-1


    .
  34. Satz: vg(suc(x)) = x


  35. Satz: (A:x)(x Nat - 0 => suc(vg(x)) = x


  36. Summe s(x,y) [x + y]
    (A:x,y)( x,y Nat =>
    s(x,1) = suc(x)
    s(x,nf(y)) = suc(s(x,y))


  37. Produkt p(x,y) [x * y]
    (A:x,y)( x,y in Nat =>
    p(x,1) = x
    p(x,suc(y)) = p(x,y) + x


  38. Kleiner x < y
    (A:x,y)( x,y Nat =>
    x < y gdw (E:z)( z Nat & x + z = y )


  39. Satz: Die Relation '<' is transitiv, antisymmetrisch und antireflexiv


  40. Positive/ Negative/ Nullpaare: (A:x,y)( (x,y) Nat x Nat =>
    POSITIV(x,y) gdw x < y
    NEGATIV(x,y) gdw x > y
    NULLPAAR(x,y) gdw x = y


  41. Äquivalent [~] (A:x,y,a,b)( (x,y), (a,b) Nat x Nat =>
    ÄQUIVALENT((x,y),(a,b) gdw y + a = x + b
    (x,y) ~ (a,b) gdw y + a = x + b


  42. Positive/ Negative Zahl/ Null/ Ganze Zahlen (Int)
    POSITIVE_ZAHL(a,b) = { (a,b) Nat x Nat | POSITIV(a,b) & [(a,b)]~}
    NEGATIVE_ZAHL(a,b) = { (a,b) in Nat x Nat | NEGATIV(a,b) & [(a,b)]~}
    ZAHL_NULL(a,b) = { (a,b) in Nat x Nat | NULLPAAR(a,b) & [(a,b)]~ } (ZAHL_NULL(a,b) auch geschrieben '0')
    Ganze_Zahlen = { POSITIVE_ZAHL(a,b) u NEGATIVE_ZAHL(a,b) u ZAHL_NULL(a,b) } (Ganze_Zahlen auch geschrieben 'Int')

    Verabredung: Statt [(a,b)]~ soll auch geschrieben werden (a,b)


  43. (+c) = (a,b) gdw POSITIVE_ZAHL(a,b) & c = b - a


  44. (-c) = (a,b) gdw NEGATIVE_ZAHL(a,b) & c = a - b


  45. Summe((a,b), (x,y)) [(a,b) + (x,y)]
    (A:x,y,a,b)( (a,b), (x,y) Int =>
    (a,b) + (x,y) = (a + x,b + y)


  46. Satz: (A:x,y)( (x,y),0 Int => (x,y) + 0 = (x,y) )


  47. Satz: (A:x,y,a,b)( (a,b), (x,y) Int =>
    (E:mn)((m,n) Int & ((a,b) + (m,n) = (x,y)) ) )


  48. Subtraktion s((a,b), (x,y)) [(a,b) -(x,y)]
    (A:x,y,a,b,m,n)( (a,b), (x,y), (m,n) Int &
    (a,b) + (m,n) = (x,y)) =>
    (m,n) = (a,b) - (x,y)


  49. Produkt p((a,b), (x,y)) [(a,b) * (x,y)]
    (A:x,y,a,b)( (a,b), (x,y) Int =>
    (a,b) * (x,y) = (a*y + b*x, a*x + b*y)


  50. Satz: (A:x,y)( (x,y) Int => (x,y) * 0 = 0


  51. Verabredung c <=> (+c)
    Zwischen den natürlichen Zahlen und den ganzen Zahlen soll folgende Zuordnung gelten:
    (A:c,d,(+c),(+d))( c,d Nat & (+c), (+d) Int =>
    [c <=> (+c)] & [d <=> (+d)] => [ c+d <=> (+(c +d))])


  52. Satz: (A:(+c),(-c))( (+c), (-c) in Int => (+c) + (-c) = 0


  53. Satz: (A:(+c),(+d))( (+c), (+d) in Int => (+c) + (+d) = (+(c +d)) )


  54. Satz: (A:(+c),(+d))( (+c), (+d) in Int => (+c) * (+d) = (+ c * d) )


  55. Satz: (A:(+c),(-d))( (+c), (-d) in Int => (+c) * (-d) = (- c * d) )


  56. Satz: (A:(-c),(-d))( (-c), (-d) in Int => (-c) * (-d) = (+ c * d) )


  57. Äquivalenz für ganze Zahlen [~~] (A:x,y,v,u)(x,y,v,u Int =>
    (y/x ~~ v/u) gdw ( ¬(x = 0) ) & ¬(u = 0) & u*y = v*x ) )


  58. Satz: (A:x,y,v,u)(x,y,v,u Int =>
    (y/x ~~ v/u) gdw ( v/u ~~ y/x) )


  59. Satz: (A:x,y)(x,y Int =>
    (y/x ~~ y/x) )


  60. Satz: (A:x,y,v,u, m,n)(x,y,v,u,m,n Int =>
    (y/x ~~ v/u) & ( v/u ~~ m/n) => (y/x ~~ m/n))


  61. Satz: (A:x,y,z)(x,y,z Int => y/x ~~ z*y/ z*x )


  62. Rationale Zahlen (Rat)
    RATIONALE_ZAHL(x,y) = { x,y in Int & [x/y]~~ }


  63. Satz: (A:x,y,v,u)(x,y,v,u Int & y/x ~~ v/u =>
    [y/x]~~ = [v/u]~~ & fraction(y,x) = fraction(v,u) )

    Ein Bruch ('fraction') fraction(y,x) ist also eine rationale Zahl, die durch die Klasse der zu y/x äquivalenten Paare gegeben ist.


  64. Satz: (A:x,y,z)(x,y,z Rat =>
    fraction(y,x) = fraction(z*y,z*x) )


  65. Summe s(p,q) [p + q]
    (A:p,q,y,z,u,x)(p,q,x,y,u,z Rat & p = [y/z]~~ & q = [u,x]~~ =>
    p + q = fraction(x*y + z*u, x*z) )


  66. Vereinbarung: fraction(y,1) = y


  67. Satz: fraction(0,1) = 0


  68. Satz: 0 + fraction(x,y) = fraction(x,y)


  69. Produkt p(m,n) [m * n]
    (A:m,n,y,z,u,x)(m,n,y,z,u,x Rat & m = fraction(y/z) & n = fraction(u,x) =>
    m * n = fraction(y*u,z*x) )


  70. Satz:
    (A: y, u )(y,u Rat =>
    fraction(y,1) * fraction(u,1) = fraction(y*u,1) = y * u


  71. Satz:
    (A: p,q,u,a,b,y)(p,q,u,a,b,y Rat & p=fraction(y,a) & q=fraction(u,b) & ¬(p = 0) =>
    (1:r)( r=fraction(q,p) = fraction(u*a,b*y) & p*r = q ))


  72. Division q:p
    (A: r,p,q,u,a,b,y)(r,p,q,u,a,b,y Rat & p=fraction(y,a) & q=fraction(u,b) & ¬(p = 0) & r=fraction(q,p) & p*r = q )) => q:p = r )

    R heisst der Quotient von p und q.


  73. Satz: (A:k,M)( M = Abschn(k,Rat) & k Rat => (E:R)( OFFENER_ANFANG(M,Rat,R) ))


  74. Menge der rellen Zahlen (Rel):
    Rel = { r | (E:R)( OFFENER_ANFANG(r,Rat,R) ) }


  75. r <Rel s gdw
    r,s Rel & r C s


  76. Satz:KETTE(Rel, <Rel)


  77. Satz: Jeder offene Anfang in Rel ist der Abschnitt einer reellen Zahl


  78. Eine Kette M ist dicht unter R: DICHT(M,R) gdw
    KETTE(M,R) & (A:a,b)( a,b M & (a,b) R => (E:c)( c M & (a,c) R & (c,b) R ))


  79. Satz: Die Menge Rat der rationalen Zahlen ist geordnet, offen und dicht.


  80. Satz: Die Menge Rel der reellen Zahlen ist geordnet, offen, dicht und bedingt vollständig.


  81. Sei x eine Menge, dann wird durch |x| die Kardinalität der Menge (x die Anzahl der Elemente) repräsentiert.

  82. Zwei Mengen x1 und x2 haben die gleiche Kardinalität, wenn es eine 1-zu-1-Abbildung zwischen x1 und x2 gibt.

  83. Seien x, y endliche Mengen und sei x C y; dann gilt |x| <= |y|.

  84. Wenn x,y keine endliche Mengen sind, dann folgt aus der Teilmengeneigenschaft nicht notwendigerweise eine kleinere Kardinalität!


  85. |Nat| < |Rel|


  86. Mengen mit der gleichen Kardinalität wie die natürlichen Zahlen gelten als abzählbar unendlich ('countably infinite').

  87. Eine Menge M heisst (höchstens) abzählbar ('countable') falls sie endlich ist oder abzählbar unendlich. Falls M ungleich 0 kann man auch sagen, es gibt eine surjektive Abbildung f: N' --> M.


  88. epow(x) oder e2x := Endliche Potenzmenge von ...; Menge aller endlichen Teilmengen


  89. Während die Menge A* zu einem Alphabet A abzählbar unendlich ist, ist die Menge aller Sprachen über A* -nämlich x(A*) = { L | L C A* } - nicht mehr abzählbar, d.h. überabzählbar.


  90. (M/n) := Die Menge der n-elementigen Teilmengen der Menge M; (M/n) = { x | x C M & |x| = n }


  91. f ist eine Folge [SEQ(f)] gdw f ist eine Funktion & dm(f) C Nat & (A:x)( x in dm(f) & x > 0 ==> x in dm(f) & vg(x) in dm(f))


  92. l ist die Länge einer Folge f [len(f)] SEQ(f) => len(f) = |dm(f)|


  93. f ist eine endliche Folge gdw f ist eine Folge & ¬(Nat' C dm(f)


  94. f ist eine Folge der Länge n gdw f ist eine Folge & ([ n=0 & f=0] or [n Nat' - {0} & vg(n) dm(f) & n dm(f)])


  95. f ist ein n-Tupel ([TUP(f,n)] gdw f ist eine Folge der Länge n. Wir schreiben ein 5-Tupel z.B. t = <a,ww,e,t,g> = {(0,a), (1,ww),(2,e),(3,t),(4,g),}. t(1) = ww.


  96. f ist eine endliche Folge auf A [FSON(f,A)]: FSON(f,A) gdw f ist eine Folge & ¬(Nat' C dm(f)) & rn(f) = A


  97. SUM(i=n1, j) A[i]: Summenbildung über dem Ausdruck A, in dem der Parameter i vorkommt und die Werte von n1 bis j durchläuft.



START

Rekursive Funktionen und Prädikate


Im Zusammenhang des Themas Berechenbarkeit/ Entscheidbarkeit wichtige Begriffe: primitiv rekursive Funktionen, Ackermann Funktion, my-rekursive Funktionen, allgemein rekursive Funktionen, rekursive Prädikate






START

Graphen


  1. Ein GRAPH(g) gdw g = <V,E> V ist eine endlichen Menge von Knoten ('vertices', 'nodes'), E ist eine Menge von Paaren von Knoten genannt Kanten ('edges'). E C (V/2) (eine Teilmenge der Menge aller 2-elementigen Teilmengen von V)(Anmerkung: keine Menge von geordneten Paaren, da die Kanten im allgemeinen Fall nicht gerichtet sind!).


  2. Mit GRAPH(g) soll gelten: vertices(g) = proj1(g)


  3. Mit GRAPH(g) soll gelten: edges(g) = proj2(g)


  4. Mit k edges(g) & k = {x,y} soll gelten: x,y sind in g benachbart ('adjacent'), k verbindet x mit y, x und y sind die Endpunkte von k, x und y sind mit k inzident.


  5. Man kann auch sagen, dass ein Graph g verstanden werden kann als eine Menge V auf der eine Relation R definiert is, die irreflexiv und symmetrisch ist, d.h. für beliebige zwei Knoten x,y aus V muss gelten: xRy.


  6. Vollständiger Graph (simplex) := ein Graph in dem je zwei Knoten benachbart sind.


  7. Gerichteter Graph ('directed graph') := ein Graph für den gilt, dass E C V x V.


  8. Sei g ein gerichteter Graph; mit k edges(g) & k = (x,y) soll gelten: x ist der Anfangspunkt und y der Endpunkt von k.k führt von x nach y. Grafisch werden gerichtete Kanten als Pfeile dargestellt (im Englischen heisst es hier nicht 'arrow' (!) sondern 'arc'). Eine Kante k = (x,x) heisst eine Schlinge.


  9. Kantenfolge (Pfad, 'path'): Sei g ein Graph; sei f eine Folge der Länge n mit Werten aus der Menge der Knoten V 'e1, e2,..., en' so dass für zwei aufeinanderfolgende Elemente (ei, ei+1) der Folge gilt, es gibt eine Kante k aus E. Ein Pfad enthält keine Schlingen, aber er kann zyklisch sein, wenn der Endknoten en mit dem Anfangsknoten e1 verbunden ist.


  10. Die Länge eines Pfades, der durch eine Folge mit Länge n repräsentiert wird, ist n-1.


  11. Vorgängerknoten, Nachfolgerknoten: Wenn (ei, ei+1) zwei verbundene Knoten in einem gerichteten Graphen sind, dann ist ei der Vorgänger(knoten) von ei+1 und ei+1 der Nachfolger von ei






START



Bäume


Ein Baum ('tree') ist ein geordneter Graph mit den folgenden zusätzlichen Eigenschaften:


  1. Es gibt genau einen Knoten, der die Wurzel ('root') darstellt.



  2. Die Wurzel hat keinen Vorgängerknoten



  3. Von der Wurzel gibt es einen Pfad zu jedem Knoten im Baum



  4. Jeder Knoten ausser der Wurzel hat genau einen Vorgängerknoten


  5. Die Nachfolgerknoten von jedem Knoten sind 'von links nach rechts' geordnet.


Abweichend von der Graphen-Terminologie gibt es bei Bäumen eine spezielle Terminologie:

  1. Der Nachfolgerknoten eines Knoten wird Kindknoten ('son', 'child') genannt.


  2. Der Vorgängerknoten eines Knoten heisst Elternknoten ('father', 'parent').


  3. Gibt es einen Pfad von ei nach ej (j > i), dann ist ei ein Vorfahre ('ancestor') von ej und ej ist ein Nachfahre ('descendant') von ei. Ein Knoten ist sein eigener Vorfahre wie sein eigener Nachfahre.


  4. Ein Knoten ohne einen Nachfolgerknoten ist ein Blatt ('leaf') (oder auch ein terminaler Knoten).


  5. Knoten mit Nachfolgerknoten sind innere ('interior') Knoten.





START



Strukturtheorie

In der allgemeinen Strukturtheorie werden in Anlehnung an das Programm von BOURBAKI jene Strukturen formuliert, die als Basis für alle anderen speziellen Strukturen dienen.(irgendwann aufschreiben...)




START


Algebra

  1. Verknüpfung: seien M1, M2, ...,Mn, M Mengen. Unter einer n-stelligen Verknüpfung versteht man eine Abbildng des kartesichen Produktes M1 x M2 x ... x Mn in die Menge M:
    f: M1 x M2 x ... x Mn ---> M
    Ist M1 = M2 = ... = Mn = M , so spricht man von einer inneren Verknüpfung. Besonders wichtig ist der Fall der zweistelligen (binären) Verknüpfung in einer Menge M.


  2. Algebraische Struktur: eine Menge M, für deren Elemente mindestens eine Verknüpfung definiert ist, heisst Menge mit algebraischer Struktur. Algebraische Strukturen mit zwei zweistelligen inneren Verknüpfungen heisen auch Systeme mit doppelter Komposition. Bekannte Beispiele für algebraische Strukturen sind Gruppe, Ring, Verband.. Eine algebraische Struktur mit der Menge M und zwei Verknüpfungen wird z.B. geschrieben:

    <M,f1,f2 >

  3. Ring R: eine algebraische Struktur mit zwei zweistelligen inneren Verknüpfungen (im allgemeinen Addition (Zeichen '+') und Multiplikation (Zeichen '*')) heisst ein Ring R, wenn für beliebige Elemente a,b,c R die folgenden Gesetze gelten:

    1. a + b = b + a (kommutatives Gesetz der Addition)


    2. (a + b) + c = a + (b + c) (assoziatives Gesetz der Addition)


    3. Zu je zwei Elementen a,b R gibt es genau ein Element x R mit a + x = b (Umkehrbarkeit der Assoziation)


    4. a * (b * c) = (a * b) * c (assoziatives Gesetz der Multiplikation)


      1. a * (b + c) = a * b + a * c


      2. (b + c) * a = b * a + c * a (distributive Gesetze)



    5. Aus (i) - (v) folgt die Existenz genau eines Elementes 0 R mit der Eigenschaft a + 0 = a für alle a R. 0 heisst Nullelement (auch Einselement oder Neutrales Element) des Ringes

      .


  4. Kommutativer Ring R: ein Ring R heisst kommutativ, wenn in ihm das kommutative Gesetz der Multiplikation gilt:
    a * b = b * a



  5. Polynom in einer Unbestimmten über R: Sei R ein kommutativer Ring mit Einselement und x ein Rechensymbol, genannt Unbestimmte (Variable). Ein Ausdruck der Form


    f(x) = SUM(i=0; n) ai * xi = an * xn + an-1 * xn-1 + ... + a1 * x + a0

    mit ai R heisst Polynom in einer Unbestimmten über R. Die ai heissen Koeffizienten, a0 heisst absolutes Glied des Polynoms. Falls an != 0 heisst n Grad des Polynoms und an Anfangskoeffizient oder höchster Koeffizient; ist an = 0 so heisst n formaler Grad von f(x). Polynome vom Grad 0,1,2,3 und 4 heissen auch konstant linear, quadratisch, kubisch bzw. biquadratisch.

  6. Verband: eine algebraische Struktur V mit zwei 2-stelligen inneren Verknüpfungen (Zeichen: cut und u) heisst ein Verband, wenn für beliebige Elemente a,b,c in V gilt:


      (kommutative Gesetze)
    1. a cut b = b cut a


    2. a u b = b u a


    3. (assoziative Gesetze)
    4. a cut (b cut c) = (a cut b) cut c


    5. a u (b u c) = (a u b) u c


    6. (Absorptions- oder Verschmelzungsgesetze bzw. Dualgruppe)
    7. a cut (a u b) = a


    8. a u (a cut b) = a


    Jeder Verband (V; cut, u) kann als halbgeordnete Menge (V; <) aufgefasst werden. Die Ordnungsrelation ist gegeben durch

    a < b gdw a cut b = a


  7. Komplement eines Verbandselementes: (V; cut, u) sei ein Verband mit Nullelement 0 und Einselement 1. Ein Element Ca in V heisst Komplement zu a in V gdw


    1. a cut Ca = 0

    2. a u Ca = 1



  8. Komplementärer Verband: ein Verband heisst komplementär wenn er zu jedem Element mindestens ein Komplement enthält.



  9. Distributiver Verband: ein Verband V heisst distributiv gdw ausser den Verbandsaxiomen noch die folgenden distributiven Gesetze gelten:


    1. a cut (b u c) = (a cut b) u (a cut c)


    2. a u (b cut c) = (a u b) cut (a u c)







  10. Boolscher Verband (oder: Algebra): ist ein distributiver und komplementärer Verband. Ein Boolscher Verband A heisst normiert, wenn jedem Element a A eine Zahl p(a) zugeordnet werden kann, so dass die folgenden Bedingungen erfüllt sind:


    1. 0 < p(a) < 1


    2. p(0) = 0, p(1) = 1


    3. a < b ==> p(a)< p(b)


    4. a cut b = 0 ==> p(a u b) = p(a) + p(b)


    p(a) heisst die Norm von a. In der Wahrscheinlichkeitsrechnung wird der Boolsche Verband als Ereignisalgebra gedeutet; p(a) ist dann die Wahrscheinlichkeit von a.



  11. Verallgemeinter Boolscher Verband (oder: Algebra): ist ein distributiver und relativkomplementärer Verband.






START


Masstheorie

Mit Begriffen wie Ring, sigma-vollständiger und delta-vollständiger Ring, Borel-Ring, Borel-Menge, allgemeiner Halbring mit einem Mass usf. Grndzüge der Masstheorie




START



Wahrscheinlichkeitstheorie

Ausgehend von Begriffen wie sigma-Algebra und Borel-Menge Grundzüge einer axiomatischen Wahrscheinlichkeitstheorie




START



Bayessche Netze




START



Optimierungstheorie




START



Maschinelles Lernen




START



Formale Sprachen

Im Kontext von formalen Sprachen werden endliche Mengen auch benutzt, um Alphabete zu repräsentieren.

  1. Sei A solch ein Alphabet. Wenn x A dann heisst x gewöhnlich ein Zeichen ('letter') oder Symbol ('symbol').

  2. Die Aneinanderfügung von Zeichen aus A ergibt eine Zeichenkette ('string') über A bzw. ein Wort ('word') über A.

  3. A* ist die Menge aller Wörter über A (während A n.V. endlich ist gilt dies für A* nicht).

  4. A* enthält auch das leere Wort, das wir durch '§' repräsentieren (in der Literatur meistens kleines Lambda oder kleines Epsilon). Damit wären '§', '01', '111', '101010' Worte über dem Alphabet A01' = {0,1}.

  5. A+ = A* - {§}.

  6. Eine Teilmenge von A* heisst eine (formale) Sprache. Daher gilt die leere Menge 0 wie auch die Menge mit dem leeren Wort {§} als eine Sprache. Im Gegensatz zur Sprache {§} enthält die Sprache 0 kein Element..

Mittels der Menge A* und der Operation Konkatenation 'o' lässt sich jetzt eine Struktur <A*, o > als Halbgruppe mit neutralem Element (Monoid) definieren, die folgende Eigenschaften haben soll:

Für alle x,y A* soll gelten:

  1. x o y = xy in A* (Abgeschlossenheit)


  2. (x o y ) o z = x o ( y o z ) = xyz (Assoziativität)


  3. § o x = x o § = x (Neutrales Element)


Damit kann man vereinbaren: wenn w, u1,u2, v Worte über einem Alphabet A sind, dann gilt:

  1. wn = ww ...w (n-mal) (eine n-fache Konkatenation)

  2. speziell gelte w0 = §.

  3. |w| := Länge eines Wortes; Anzahl der Zeichen in dem Wort w, wobei jedes Zeichen sooft gezählt wird, wie es vorkommt; mit den zusätzlichen Eigenschaften:

  4. |§| = 0

  5. |u1,u2,| = |u1|, + |u2,|

  6. |wn| = n * |w|

  7. v ist ein Teilwort von w wenn w = u1vu2. Wenn u1 = § dann ist v ein Präfix, ist u2 = § dann ist v ein Suffix. Jedes Wort w ist trivialerweise Teilwort, Präfix und Suffix von sich selbst; ebenso gilt dies für das leere Wort §.

  8. Seien A,B Teilmengen von ALPH* mit ALPH als einem Alphabet, dann sind A und B Sprachen. folgende Begriffe werden benötigt:

    1. A u B = { x | x A oder x B }

    2. A cut B = { x | x A und x B }

    3. c(A) (auch Querstrich über A) = ALPH* - A

    4. AB = { xy | x A und y B }

    5. A0 = {§}

    6. A1 = A

    7. An+1 = AAn

    8. AiAj=(Ai)+j

    9. A* = U (n > 0) An

    10. A+ = U (n > 1) An

  9. Seien R,S Relationen auf ALPH* mit ALPH als einem Alphabet, also R, S C ALPH* x ALPH*. Folgende Begriffe werden vereinbart:

    1. RS = { (x,y) | (E:z)( xRz und zSy ) }

    2. R0 = { (x,x) | (x ALPH* }

    3. R1 = R

    4. Rn+1 = RRn

    5. R* = U (n > 0) Rn

    6. R+ = U (n > 1) Rn

      Aus diesen Definitionen folgt, dass xR*y gilt, falls x = y oder es gibt z1,z2 , ..., zn mit n > 1, so dass gilt xRz1, z1Rz2 , ..., znRy.

    7. Es gilt, dass R* die kleinste reflexive und transitive Relation ist, die R umfasst (die kleinste reflexive und transitive Hülle von R).


  10. Die Sprache L ist durch eine Turingmaschine m entscheidbar (bzw. L ist rekursiv): RECURSIVE(L,m) gdw DTM(m) & (A:x)( INPU(x,m) ==> [x L & ACCEPT(x,m)] or [x L & REJECT(x,m)] ) )



    (Für Turingmaschine bzw. DTM siehe bei ->Automaten)


  11. Die Sprache L ist durch eine Turingmaschine m semientscheidbar (bzw. L ist rekursiv aufzählbar/ turing-aufzählbar): RECURSIVE_ENUMERABLE(L,m) gdw DTM(m) & (A:x)( INPU(x,m) ==> [x L & ACCEPT(x,m)] or [x L & ¬ACCEPT(x,m)] ) )

    '¬ACFEPT(x,m)' schliesst ein, dass die Turingmaschine möglicherweise nicht anhält.



  12. Es gilt, dass die Menge der rekursiven Sprachen eine echte Teilmenge der rekursiv-aufzählbaren Sprachen bildet.



  13. Es gilt, dass das Komplement einer rekursiven Sprache auch rekursiv ist.



  14. Es gilt, wenn sowohl eine Sprache L wie auch ihr Komplement rekursiv-aufzählbar ist, dann sind auch beide rekursiv (turing-entscheidbar).



Beispiele: die Menge der Theoreme und Nichttheoreme bei formalen Systemen. Wenn eine Zeichenkette w ein Theorem ist, dann gibt es dazu einen endlichen Beweis, der sich nach endlich vielen Schritten finden lässt; eine DTM angesetzt auf ein w als Theorem würde also nach endlich vielen Schritten stoppen. Wäre die Eingabe w ein Nichttheorem, dann gäbe es dazu keinen Beweis; die Suche nach einem solchen nichtvorhandenen Beweis müsste nicht nach endlich vielen Schritten stoppen. Verschiedene Versuche, 'entscheidbare Eigenschaften' von Nichttheoremen relativ zu einem bestimmten formalen System zu finden, waren für bestimmte Teilmengen von Nichttheoremen bislang erfolgreich, aber einer vollständigen Lösung widersetzt sich die Menge der Nichttheoreme bis heute hartnäckig (vgl. dazu auch [Döben 1990]).




START

Automaten

Im Grundlagenstreit um die Entscheidbarkeit mathematischer Theorien hatte sich gezeigt, dass eine Minimalvoraussetzung für eine befriedigende Diskussion um die Entscheidbarkeit darin bestand, dass die Beweisführung in einem endlichen Verfahren mit endlichen Mitteln stattzufinden habe. Anders formuliert heisst dies, dass solch ein effektives Verfahren intutiv die folgenden Eigenschaften besitzen sollte:

  1. Das Verfahren als Ganzes muss mit endlichen Mitteln beschreibbar sein


  2. Das Verfahren muss sich in einzelne, klar unterscheidbare Schritte zerlegen lassen


  3. Jeder Schritt muss sich mechanisch ausführen lassen.


Dasjenige Verfahren, das diesen intuitiven Forderungen nach Auffassung von GÖDEL und CHURCH historisch als erstes am nächsten kam, war ein Verfahren von TURING aus dem Jahr 1936, das von CHURCH Turingmaschine genannt wurde. Wie sich im Laufe der Jahre zeigte, konnten bislang alle anderen Verfahren, die auch den Anspruch erhoben, ein effektives Verfahren zu sein, als mit der Turingmaschine äquivalent erwiesen werden. Wir beginnen daher die Darstellung der Automaten mit dem Konzept der Turingmaschine; andere Automatentypen folgen.

dtm

Deterministische 1-Band Turingmaschine


Wir wählen hier die Form der deterministischen Turingmaschine (DTM) mit einem Band.. Wie später gezeigt wird, sind andere Formen von Turingmaschinen (1/2-Band, mehrere Bänder, universelle Turingmaschine, nichtdeterministische Turingmaschine usw. nicht stärker als eine DTM).

Intuitiv besteht eine Turingmaschine aus einem nach beiden Seiten offenen Band ('tape'), das gleichmässig in rechteckige Felder ('squares') unterteilt ist. Zu Beginn einer Rechnung ist das Band leer bis auf eine endliche Menge von Symbolen I aus einem endlichen Alphabet A, die nacheinander auf das Band geschrieben sind, pro Feld ein Symbol. Alle anderen Felder enthalten das leere Zeichen '§', das nicht zum Alphabet A gehört (A - {§}) (In der Literatur gibt es eine Vielzahl von Konventionen zur Bezeichnung des leeren Feldes {'b', 'B', 'kleines Epsilon', 'leeres Quadrat, 'Unterstrich mit Winkeln nach oben', '*'}. Das Alphabet A ist nicht leer. Zu Beginn der Rechnung steht der Schreib-Lese-Kopf genau über dem ersten Feld der Inschrift I. Die Turingmaschine befindet sich im Start-Zustand q0. Die Menge aller Zustände Q ist endlich. Neben dem Startzustand q0 enthält sie noch eine endliche Menge von Endzuständen E = {qe.1, ...,qe.k } mit k > 1. Die Aktionen einer DTM sind in der Maschinentafel, dem 'Programm' der Turingmaschine, festgelegt. Eine Maschinentafel besteht aus einer endlichen nichtleeren Menge von Übergangsregeln D, wobei eine einzelne Übergangsregel di die Form hat:

di = < qi, vj, q'i, v'j, hi >


Eine einzelne Übergangsregel ist wie folgt zu lesen:
  1. qi: wenn der aktuelle Zustand qi ist


  2. vj: und das Zeichen, das aktuell vom Schreib-Lesekopf gelesen wird, vj ist,


  3. q'i: dann soll der nächste Zustand q'i sein,


  4. v'j: und als Zeichen soll auf das aktuelle Feld das Zeichen v'j geschreieben werden


  5. hi: und der Schreib-Lesekopf soll in Richtung hi bewegt werden.

vj, v'j sind aus G = A u {§} und
hi ist aus {'L', 'R', 'S'}; es bedeutet 'L' := auf dem Band ein Feld nach 'links', 'R' := auf dem Band ein Feld nach 'rechts', 'S' := Stop, keine Bewegung mehr. Ein Zustand qi als erstes Element einer Übergangsregel, bei dem als letztes Element ein Stop-Symbol 'S' steht, heisst ein Endzustand. Davon zu unterscheiden sind jene Zustände, die die Maschine stoppen unabhängig davon, welches Symbol gelesen wird und welche Richtung im letzten Element einer Übergangsregel angegeben ist.

Beginnend mit dem Startzustand q0 auf dem ersten Zeichen einer Inschrift I wird eine DTM also einzelne Aktionen anhand der Menge der Übergangsregeln in der Maschinentafel ausführen. Grundsätzlich sind nun drei Fälle denkbar:

  1. Eine DTM mit Argument I gerät in eine Endlosschleife


  2. Eine DTM mit Argument I gerät nicht in eine Endlosschleife und hat nach n-vielen Aktionen gestoppt


  3. Eine DTM mit Argument I gerät nicht in eine Endlosschleife aber hat nach n-vielen Aktionen noch nicht gestoppt


Tritt Fall (2) ein, dann soll die Konvention gelten, dass die DTM die ursprüngliche Eingabe I gelöscht hat und der Schreib-Lesekopf am Ende wieder auf dem ersten Zeichen des Ergebnisses steht; das Ergebnis kann leer sein.

Damit kann man nun folgende formalisierte Darstellung einer deterministischen Turingmaschine (DTM) geben:

DTM(m) gdw m = < < Q, A, G, {§}, {q0 }, E, D >, < d0, ..,dn > >

mit

  1. Q:= endliche nichtleere Menge von Zuständen


  2. A:= endliches Alphabet (für Argumente und Werte); |A| > 0


  3. G = A u {§}; das endliche Bandalphabet


  4. § := das Leerzeichen


  5. q0 := der Anfangszustand; q0 Q


  6. E := Menge der Endzustände; E C Q & E != 0


  7. D = {'L', 'R', 'S'}; endliche Menge von Richtungsaktionen ('links', 'rechts', 'stop')


  8. d0, ..,dn := endliche Menge von Übergangsfunktionen; di: Q-E x G ---> Q x G x D


  9. Maschinentafel/ Programm := die endliche Menge von Übergangsfunktionen d0, ..,dn einer Turingmaschine m heisst die 'Maschinentafel' oder das 'Programm' der DTM m.


  10. k ist eine Konfiguration einer Turingmaschine m: CONFIGURATION(k,m) gdw m ist eine determinstische Turingmaschine & k ist eine Zeichenkette 'aqb' mit a,b aus G*m und q aus Qm. Auf dem Band befindet sich die Inschrift I = ab, eingerahmt von Blanks, und der Schreiblesekopf im Zustand q steht auf dem ersten Zeichen von b. Folgende Fälle sind hier zu unterscheiden:

    1. q ist der Startzustand q0 und a ist leer; dies nennen wir eine Startkonfiguration ('START_CONFIGURATION') und b die Eingabe der Turingmaschine;


    2. q ist ein Endzustand und a ist wiederum leer (zum Ende steht immer nur das Ergebnis auf dem Band), also qendb; dies nennen wir auch eine Endkonfiguration ('END_CONFIGURATION') und b das Ergebnis;


    3. q ist weder Start- noch Endzustand.


  11. Die Menge der Konfigurationen ('configurations') einer Turingmaschine m: configurations(m) = { k | CONFIGURATION(k,m) }



  12. Direkte Nachfolgekonfiguration einer Turingmaschine m: eine 'direkte Nachfolgekonfiguration' von aqb ist die Zeichenkette a'q'b', wenn a'q'b' aus aqb durch Anwendung einer Übergangsregel di entstanden ist. Man schreibt:

    aqb |--m a'q'b'


  13. P ist ein Protokoll ('protocol') mit der Länge n von der Turingmaschine m für die Eingabe x : PROTOCOL(P,m,x,n) gdw P ist ein Tupel der Länge n & rn(P) C configurations(m) & (A:i)( i dm(P) ==> ki |-- ki+1 mit i < n )



  14. k' ist die Nachfolgekonfiguration von k bei einer Turingmaschine m oder k' ist ableitbar von k mit einer Turingmaschine m: ABL(k',k,m) gdw (E:P,n)( PROTOCOL(P,m,k,n) & END_CONFIGURATION(k',m) & k' = Pn. Statt ABL(k',k,m) schreibt man auch:

    k |*--m k'


  15. n ist die Länge ('length') einer Ableitung einer Turingmaschine m für die Eingabe k: k |*--m k' ==> lenth(k,k',m) = n gdw (E:P) PROTOCOL(P,m,k,n)



  16. Der INPUT x einer Turingmaschine m: INPUT(x,m) gdw TM(m) & '§q0x' ist eine Startkonfiguration von m



  17. Rechenzeit: die Rechenzeit einer DTM ist die Zahl der Zustandsübergänge, bis die TM, angesetzt auf die Eingabe k mit dem Ergebnis k' stoppt. Da jeder endlichen Berechnung eine Ableitung korrespondiert, kann man auch sagen, die Rechenzeit entspricht der Länge der Ableitung von k' aus k unter m.



  18. Die Eingabe x wird von einer Turingmaschine m akzeptiert ('accepted'): ACCEPT(x,m) gdw DTM(m) & §q0x |*-- §q'1 & q' E



  19. Die Eingabe x wird von einer Turingmaschine m nicht akzeptiert ('rejected'): REJECT(x,m) gdw DTM(m) & §q0x |*-- §q'0 & q' E



  20. Die von einer Turingmaschine m erkannte Sprache L: L(m) = { x | TM(m) & ACCEPT(x,m) }



  21. Simulation: Ein Automat M' simuliert einen Automat M gdw für jedes Argument w mit M(w) = w' gilt M'(w) = w'. Damit ist vereinbar, dass der Platz- und/oder Zeitbedarf von M' grösser oder kleiner ist als von M (so gilt z.B., dass eine Registermaschine (s.u.) sich von einer der Varianten der Turingmaschine im Zeitverbrauch maximal um einen polynomialen Faktorunterscheidet).



Im Rahmen der Komplexitätstheorie (s.u.) wird die deterministische Turingmaschine (DTM) benutzt, um die Komplexitätsklasse P zu definieren. Zur Definition der Komplexitätsklasse NP benötigt man eine andere Variante der Turingmaschine, nämlich eine nichtdeterministische Turingmaschine (NDTM). Nichtdeterministische Turingmachinen zeichnen sich dadurch aus, dass sie in jedem Zustand nicht nur genau eine Fortsetzung kennen, sondern u.U. mehr als eine. Man kann dies entweder so realisieren, dass man die Übergangsfunktion entsprechend abändert oder aber, und das ist die Variante die hier benutzt werden wird, man ergänzt eine DTM um ein 'Schätzmodul' ('guessing module').

ndtm

Nichtdeterministische 1-Band Turingmaschine (NDTM)


Die Arbeitsweise der NDTM unterscheidet sich von der Arbeitsweise der DTM nur darin, dass vor (!) Beginn eines Protokolls, nachdem (!) der INPUT der NDTM schon auf das Band geschrieben wurde, das Schätzmodul 'links' vom INPUT eine 'Schätzung' hinschreiben kann; diese Schätzung kann beliebig lang sein; das Hinschreiben muss nicht stoppen. Sollte das Schätzmodul seine Arbeit einstellen, dann beginnt jener Teil der NDTM, der mit einer DTM identisch ist, seine Arbeit. Dies bedeutet, dass der deterministische Teil als Eingabe entweder eine konktrete Schätzung vorliegen hat oder nicht.

Damit kann man nun folgende formalisierte Darstellung einer nichtdeterministischen Turingmaschine (NDTM) geben:

NDTM(m) gdw m = < < Q, A, G, {§}, {qg.0, qg.1, ..., qg.k, q0 },E , D >, < d*, d0, ..,dn > >

mit

  1. Q:= endliche nichtleere Menge von Zuständen


  2. A:= endliches Alphabet (für Argumente und Werte); |A| > 0


  3. G = A u {§}; das endliche Bandalphabet


  4. § := das Leerzeichen


  5. qg.0, qg.1, ..., qg.k, q0 := diverse Schätzzustände und der Anfangszustand q0 ; { qg.0, qg.1, ..., qg.k, q0} C Q


  6. E := Menge der Endzustände; {qY, qN } C E C Q; qY steht für Akzeptanz und qN für Ablehnung


  7. D = {'L', 'R', 'S'}; endliche Menge von Richtungsaktionen ('links', 'rechts', 'stop')


  8. d* := spezielle Übergangsfunktion des Schätzmoduls; d*: {qg.0, qg.1, ..., qg.k} x G ---> {qg.0, qg.1, ..., qg.k, q0} x G x D



  9. d0, ..,dn := endliche Menge von Übergangsfunktionen; di: Q-(E u {qg.i} ) x G ---> Q -{qg.i} x G x D


  10. Maschinentafel/ Programm := die endliche Menge von Übergangsfunktionen d0, ..,dn einer Turingmaschine m heisst die 'Maschinentafel' oder das 'Programm' der NDTM m. Die spezielle Übergangsfunktion d* definiert eine Menge konkreter Schätzregel, die zusammen ein Schätzprogramm bilden.


  11. Die weiteren Begriffe (s.o.) sind weitgehend identisch mit dem Fall der (D)TM.

  12. Die Eingabe x wird von einer nichtdeterministischen Turingmaschine m akzeptiert ('accepted'): ACCEPT(x,m) gdw NDTM(m) & §q0x |*-- §qY

  13. Die Eingabe x wird von einer nichtdeterministischen Turingmaschine m abgelehnt ('rejected'): REJECT(x,m) gdw NDTM(m) & §q0x |*-- §qN



  14. Eine nichtakzeptierende Berechnung einer nichtdeterministischen Turingmaschine m : NONACCEPTING(x,m) gdw NDTM(m) & REJECT(x,m) or ¬(E:P,k) PROTOCOL(P,m,x,k)



  15. Zu einem INPUT x für eine NDTM m kann es -in Abhängigkeit von den unendliche viele Schätzungen- entsprechend viele Rechnungen geben.Ein INPUT x soll als akzeptiert gelten, wenn es wenigstens eine Schätzung gibt, bei der gilt: ACCEPT(x,m)


  16. Die von einer nichtdeterministischen Turingmaschine m erkannte Sprache L: L(m) = { x | NDTM(m) & ACCEPT(x,m)}






START


Komplexitätstheorie

In der Komplexitätstheorie wird die 'Komplexität' ('complexity') eines Problems gemessen am Ressourcenbedarf für seine Repräsentation und für seine Lösung. Neben der Ressource 'Platz' ('space') ist es vor allem der 'Zeitbedarf' ('time'), der zur Charakterisierung benutzt wird.

  1. Problem: Ausgangspunkt ist immer ein 'Problem', dessen Komplexität bestimmt werden muss. Dieses Problem ist sprachlich, d.h. in Form einer Zeichenkette ('string') über einem endlichen Alphabet A zu repräsentieren. Der Vorgang der 'Übersetzung' der nichtsprachlichen Fassung des Problems in eine sprachliche Fassung heisst 'Enkodierung' und die Gesamtheit der Regeln, die eine Enkodierung steuern, heisst auch 'Enkodierungsschema'. Teile der Zeichenkette, in die ein Problem enkodiert wird, sind freie Variablen (die 'Parameter' des Problems), die für mögliche Werte stehen. Ferner muss beschrieben werden, welche Eigenschaften eine 'Lösung' ('solution') aufweisen soll.


  2. Instanz: Eine 'Instanz' eines 'Problems' erhält man, indem man für die Variablen des Problems konkrete Werte einsetzt. Die Anzahl der Zeichen in der Zeichenkette, die die Instanz repräsentiert, ist zugleich die Länge des Inputs für den Lösungsalgorithmus.


  3. Bsp: Reisender ('traveling salesman'): Die Parameter dieses Problems sind eine endliche Menge von Städtenamen NAMEN = { n1, ..., nm } und der Abstand zwischen je zwei Städten d(ni,nj). Eine Lösung wäre eine Anordnung o der Städte < no.1, ..., no.m > so dass der Gesamtweg y minimal ist:

    y = min([SUM(j=1, m-1) d(no.j,no.j+1)] + d(no.m,o.m+1j))

    In der obigen Formel bekommt man die Länge der gesamten Tour beginnend bei o.1, endend bei o.m und dann wieder o.1.


  4. Algorithmus/ Programm: Die Lösung soll durch einen 'Algorithmus' geleistet werden. Wie aus der theortischen Informatik bekannt, ist der Begriff des Algorithmus äquivalent zu 'Programm', 'Sprache', 'Grammatik', 'Automat' und 'Funktion'. Ein Algorithmus löst ein Problem P genau dann, wenn er für jede Instanz des Problems P immer die gewünschte Lösung in endlich vielen Schritten generiert.


  5. Effizienz: Ein 'effizienter' Algorithmus impliziert im allgemeinsten Sinne natürlich alle Ressourcen, die notwendig sind, um ein Problem zu lösen (Raum, Zeit, Hardware, Strom...). Im folgenden fokussieren sich die Betrachtungen auf den Zeitbedarf, da dieser aus Anwendungsrücksicht die dominante Eigenschaft ist.

  6. Rechenzeit: Worst-Case Rechenzeit bezieht sich auf das Maximum über alle Rechenzeiten aller Eingaben aus einer endlichen Menge M; Average-Case Rechenzeit ist der Erwartungswert der Rechenzeit bzgl. einer Wahrscheinlichkeitsverteilung p auf einer Menge M von Eingaben. In der Praxis ist die Average-Case Rechenzeit oft schon bei einfachen Beispiel nicht berechenbar; zudem fehlen auch meist Hinweise auf die anzunehmende Verteilung p.

  7. Zeit-Komplexitäts-Funktion ('time complexity function'): diejenige Funktion, mit der man, abhängig von der Länge des Inputs zu einem Algorithmus, den maximalen Zeitbedarf errechnet, den der Algorithmus benötigt, um die Lösung auszugeben, z.B.:

    maxtimeM: A*E ---> Nat'

    Die genaue Definition einer Funktion 'maxtime' hängt ab von dem Maschinenmodell M, auf dem man den Algorithmus ausführt, sowie von dem verwendeten Enkodierungsschema E, mit dem man das Problem P in eine Menge von Zeichenketten über dem endlichen alphabet A enkodiert. Da sicht zeigt, dass die Wahl von M und E sich höchstens polynomial voneinander unterscheiden, genügt es im allgemeinen, die Parameter M und E offen zu lassen; jeder kann sich hier das Maschinenmodell und das Enkodierungsschema seiner Wahl 'vorstellen'.

  8. O-Notation: Zur Charakterisierung der Komplexität von Algorithmen hat sich die sogenannte 'O-Notation' eingebürgert. Hier einige wichtige Definitionen (siehe dazu z.B. [NIEVERGELT 1997:337ff]):

    Sei Rel+ die Menge der nichtnegativen reellen Zahlen und f eine Funktion f:Rel+ ---> Rel+

    • o(g) "Klein oh": o(g) = { f:Rel+ ---> Rel+ | lim(f(x)/g(x) = 0 für x -> infinite }

      /* f wächst langsamer als g */



    • O() "Gross Oh": O(g) = { f:Rel+ ---> Rel+ | (E:c,y)(A:x)( c > 0 & y Rel+ & x > y & f(x) < c * g(x) }

      /* f wächst höchstens so schnell wie g */

    • OMG() "Omega": OMG(g) = { f:Rel+ ---> Rel+ | (E:c,y)(A:x)( c > 0 & y Rel+ & x > y & f(x) > c * g(x) }

      /* f wächst mindestens so schnell wie g */

    • THET() "Theta": THET(g) = O(g) cut OMG(g)

      /* f wächst gleich schnell wie g */

  9. Polynomialer Zeitalgorithmus ('polynomial time algorithmus'): Ein polynomialer Zeitalgorithmus ist ein solcher bei dem die Zeitkomplexitätsfunktion gegeben ist als O(p(n)) mit p als einer polynomialen Funktion und mit n als Inputlänge. Aufgrund 'praktischer Erfahrungen' (!) hat sich gezeigt, dass ein Kriterium für 'effiziente' bzw. 'ineffiziente' Algorithmen darin besteht, dass ein Algorithmus die Lösung in polynomer bzw. in exponentieller Zeit findet. Im Fall effizienter Algorithmen soll zusätzlich gelten, dass die Länge der Lösung beschränkt ist auf eine polynomiale Funktion der Eingabelänge.

In der nachfolgende Tabelle sieht man eine Beispielmaschine für die Inputlängen n=10 ... 60 mit unterschiedlichem polynomem oder exponentiellem Zeitbedarf:



n = 10 20,00000000 30,00000000 40,00000000 50,00000000 60,00000000
n^1 1 0,00001000 0,00002000 0,00003000 0,00004000 0,00005000 0,00006000 <- sec
n^2 2 0,00010000 0,00040000 0,00090000 0,00160000 0,00250000 0,00360000 <- sec
n^3 3 0,00100000 0,00800000 0,02700000 0,06400000 0,12500000 0,21600000 <- sec
n^5 5 0,00166667 0,05333333 0,40500000 1,70666667 5,20833333 12,96000000 <- min
2^n
0,00000000 0,00000000 0,00000032 0,00032464 0,33242982 340,40813510 <- Jahrhunderte

Zwar steigt auch der polynome Zeitbedarf mit der Inputlänge n bei n^5 deutlich an, aber der exponentielle Zeitbedarf für 2^n ist schon dramatisch höher, ganz zu schweigen von Werten wie 3^n, 4^n usf. Von daher gilt die Daumenregel, dass effiziente Algorithmen in polynomialer Zeit arbeiten, ineffiziente in exponentieller Zeit. Bei kleinen Inputlängen muss dies allerdings nicht gelten; da kann ein exponentieller Algorithmus u.U. sogar schneller sein als ein polyniomialer. Ferner sagt die Erfahrung, dass in der Praxis effiziente Algorithmen solche polynomialen Algorithmen sind, die höchsten Grad 2-3 haben.

  1. Entscheidungsproblem: Ein Entscheidungsproblem erhält man, indem man eine allgemeine Problembeschreibung (s.o.) mit einer Ja-Nein-Frage kombiniert. Beispiel: Das Problem des Reisenden als Entscheidungsproblem:

    PROBLEM: Eine endliche Menge von Städtenamen NAMEN = { n1, ..., nm } und der Abstand zwischen je zwei Städten d(ni,nj) sowie eine Schranke B Nat'.

    FRAGE: gibt es eine Anordnung o der Städte < no.1, ..., no.m > so dass der Gesamtweg kleiner oder gleich B ist:

    [SUM(j=1, m-1) d(no.j,no.j+1)] + d(no.m,o.m+1j) < B ?



  2. e ist eine Enkodierung des Problems P in Zeichenketten über dem Alphabet A nach Regeln R: ENCODING(e,P,A,R) gdw P ist ein kommunizierbares Problem & R sind nachvollziehbare Handlungsanweisungen & A ist ein Alphabet & eR: P ---> A* (für ein Beispiel einer Enkodierungsvorschrift e siehe z.B. [GAREY/ JOHNSON 1979:21f])



  3. x ist eine Lösung ('solution') des Problems P unter der Kodierung e: SOLUTION(x,P, e) gdw (E:R,A)( R sind nachvollziehbare Handlungsanweisungen & A ist ein Alphabet & ENCODING(e,P,A,R) & x in rn(e) & x wird als Lösung erkannt )



  4. L ist eine Lösungssprache für das Problem P unter der Enkodierung e: L(P,e) = { x | SOLUTION(x,e,P) }



  5. Vereinbarung: die Enkodierung von P nach L(P,e) soll so sein, dass, wenn eine Aussage für L(P,e) gilt, dann soll sie auch für P gelten.



  6. Referenzmaschine(n): Obgleich bei Zeitkomplexitäts-Aussagen über 'effiziente' Algorithmen die konkreten Maschinen M, die benutzt werden, in einem polynomialen Bereich 'invariant' sind, benötigt man für konkrete Beweise doch Bezugnahmen auf konkrete Maschinen. In der Komplexitätstheorie benutzt man dazu meistens eine Variante der Turingmaschine. In der Rekursionstheorie bevorzugt man eher die äquivalente Registermaschine (RAM := Random Access Machine) oder direkt die rekursiven Funktionen. Im folgenden wird als primäre Maschine eine deterministische 1-Band Turingmaschine benutzt. Diese ist äquivalent zu allen anderen Varianten wie Halbband- und Mehrband-Maschinen (für Turingmaschine siehe ->AUTOMATEN).



  7. Eine Zeitkomplexitätsfunktion ('time complexity function') in Abhängigkeit von einer Turingmaschine m:

    timem(n) = max({ k | (E:w)( w in L(m) & |w| = n & (E:P)( PROTOCOL(P,m,w,k) )) } )


  8. Die Turingmaschine m ist eine polynome Zeitmaschine ('polynomial time machine'):

    POLYNOMIAL_TIME_MACHINE(m) gdw (E:p)( POLYNOM(p) & timem(n) < p(n) )

    Man könnte das auch so formulieren, dass die DTM in O(nk) ist.



  9. Die Komplexitätsklasse P:

    P = { L | (E:m)( POLYNOMIAL_TIME_MACHINE(m) & L = L(m) )}

    Die Komplexitätsklasse P umfasst also alle Sprachen L, die von einer Turingmaschine m in höchstens polynomer Zeit erkannt werden können.



  10. Eine Lösungssprache L(P,e) ist in der Komplexitätsklasse P: gdw (E:m)( POLYNOMIAL_TIME_MACHINE(m) & L(P,e) = L(m) )

Obwohl die Komplexitätsklasse P hier mithilfe der deterministischen Turingmaschine definiert wurde, kann man sagen, dass diese Aussagen aufgrund der Äquivalenz (bis auf einen polynomialen Faktor) aller heutzutage bekannter Berechnungsverfahren auf jeden beliebigen Computer zutreffen.

Am Beispiel des Traveling-Salesman-Problems kann man sich klar machen, was dies bedeutet. Bei n Städtenamen benötigt man eine n * n = n2-Matrix, um die Entfernungen zwischen den Städen zu kodieren. Das ist nicht exponentiell. Will man nun aber für einen beliebigen Ausgangspunkt ermitteln, welcher der Wege unter einer gewissen Schranke ('bound') B liegt, so muss man im schlechtesten Fall ('worst case') alle Möglichkeiten durchprüfen. Bei n-vielen Namen bedeutet dies, dass man beim Start (n-1)-viele Möglichkeiten hat, im zweiten Schritt (n-2)-viele Möglichkeiten, ... m.a.W. die Gesamtheit der möglichen Werte ist

PRODUCT(i=1, i=n-2) (n-i) = (n-1) * (n-2) * ... * (n-(n-2)) = (n-2)!

Multipliziert man die Formel aus, dann erhält man ein Polynom vom Grade (n-2), also nn-2. Das ist 'nahezu' exponentiell.

  1. Verifizierung in polynomer Zeit ('polynomial time verifiability'): Vom Finden einer Lösung ist der Fall zu unterscheiden, bei dem jemand behauptet, er habe für ein Entscheidungsproblem P eine konkrete Lösung gefunden (z.B. im Problem des Reisenden einen konkreten Weg für eine konkrete Karte). Auch wenn das Problem -wie im Fall des Reisenden- im worst case Fall nicht in polynomer Zeit gelöst werden kann, so kann man doch eine konkrete Lösung in polynomer Zeit dahingehend prüfen ('verifizieren', 'verify'), ob es eine Lösung ist oder nicht. Diese Überlegungen führen zur Idee einer Schätzmaschine, die genau jene Probleme erkennt, die sich nicht in polynomer Zeit lösen lassen. Eine Variante einer Schätzmaschine lässt sich mit Hilfe einer nichtdeterministischen Turingmaschine (NDTM) (siehe -->AUTOMATEN) realisieren.



  2. Rechenzeit t einer NDTM m für einen Input x:

tm(x)= IF x L(m) ==> min({ k | (E:P) PROTOCOL(P,m,x,k) )} )

ELSE 0


  1. Eine Zeitkomplexitätsfunktion ('time complexity function') in Abhängigkeit von einer nichtdeterministischen Turingmaschine m und der Länge n der Eingabe für den worst case Fall:

    ntimem(n) = max({ tm(x) | |x| = n } )


  2. Die nichtdeterministischen Turingmaschine m ist eine polynome NZeitmaschine ('polynomial ntime machine'):

    POLYNOMIAL_NTIME_MACHINE(m) gdw (E:p)( POLYNOM(p) & ntimem(n) < p(n) & n > 1)

    Anders: NDTM ist in O(nk).



  3. Die Komplexitätsklasse NP:

    NP = { L | (E:m)( POLYNOMIAL_NTIME_MACHINE(m) & L = L(m) )}

    Die Komplexitätsklasse NP umfasst also alle Sprachen L, die von einer nichtdeterministischen Turingmaschine m in höchstens polynomer Zeit erkannt werden können.



  4. Eine Lösungssprache L(P,e) ist in der Komplexitätsklasse NP: gdw (E:m)( POLYNOMIAL_NTIME_MACHINE(m) & L(P,e) = L(m) )

  5. Satz: P C NP: zu beweisen, dass jede jede Lösungssprache L(P,e), die in P ist, auch in NP ist, ist einfach. Da, vereinfacht gesprochen, NDTM = DTM + GUESSING, kann man sagen, dass eine NDTM alles kann, was auch eine DTM kann, und 'etwas mehr'.


  6. Satz: Für jede Lösungssprache L(P,e) in NP gibt es ein Polynom p sowie k und n, so dass der deterministische Anteil einer nichtdeterministischen Turingmaschine m die Sprache L akzeptiert mit der Zeitkomplexität O(kp(n)) und k > 18 :
    der Beweis beginnt mit der Tatsache, dass eine Sprache L(P,e) NP ist, wenn es eine Turingmaschine m gibt, die eine POLYNOMIAL_NTIME_MACHINE ist und L(P,e)ist genau die von der Turingmaschine m erkannte Sprache. Wenn m eine POLYNOMIAL_NTIME_MACHINE ist, dann gibt es ein POLYNOM p und ein n mit ntimem(n) < p(n) & n > 1. Ferner gilt, das n ntimem(n) genau dann, wenn n = |w| und w ist im Definitionsbereich von tm. Da es nach Voraussetzung um eine akzeptierte Eingabe geht,gilt, dass mit w in dm(tm) es einen Wert in min({ a | (E:P) PROTOCOL(P,m,x,a) )} ) gibt, d.h. es gibt ein PROTOCOL(P,m,x,a) mit Länge a. Die Frage ist, wieviele solcher Ableitungen es geben kann? Ein Parameter ist die Anzahl der möglichen Übergangsregeln in der Maschinentafel der NDTM m. Wegen di: Q-(E u {qg.i} ) x G ---> Q -{qg.i} x G x D kann man sagen, dass die Anzahl möglicher Übergangsregeln von der Anzahl möglicher Folgezustände Q-{qg.i} x G x D abhängt. Es gilt nach Voraussetzung |Q-{qg.i}| > 3 und |G| > 2 und |D| = 3, also sei k = |Q-{qg.i}| * |G| * |D| > 18; nach einem Satz der Kombinatorik kann man dann kp(n) viele Variationen der Länge p(n) = a bilden. Die gesamte Rechenzeit im worst case Fall wäre dann p(n) * kp(n), das entspricht einer Komplexität von O( kp(n)) mit k > 18.




START