• Keine Ergebnisse gefunden

Algorithmische Mathematik, Teil 2 Sommersemester 2018

N/A
N/A
Protected

Academic year: 2022

Aktie "Algorithmische Mathematik, Teil 2 Sommersemester 2018"

Copied!
37
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Sommersemester 2018

Gennadiy Averkov

IMO |FMA | OvgU Magdeburg [email protected]

9. Juli 2018

1

2 3

4 1

10

2

5 3

(2)

Inhaltsverzeichnis

0 Einleitung 3

1 Graphenalgorithmen 4

1.1 Grundbegriffe der Graphentheorie . . . 4

1.2 Tiefensuche . . . 5

1.3 Breitensuche . . . 9

1.4 Der Bellman-Ford-Algorithmus . . . 12

1.5 Der Dijkstra-Algorithmus . . . 14

2 Algorithmen der linearen Algebra 17 2.1 Elementare Zeilentransformationen . . . 17

2.2 Gauß-Verfahren . . . 18

2.3 LU P-Faktorisierung . . . 19

2.4 Numerische Stabilit¨at der L¨osung von linearen Gleichungssystemen . 21 3 Algorithmen der Analysis 25 3.1 Newton-Verfahren zur L¨osung von nichtlinearen Gleichungen . . . . 25

4 Grundlegende Komplexit¨atsklassen 27 4.1 Rechenprobleme . . . 27

4.2 Polynomialzeit-Berechenbarkeit und die Klasse P . . . 30

4.3 Die Klasse NP . . . 33

4.4 NP-Schwere, NP-Vollst¨andigkeit und der Satz von Cook-Levin . . . 34

4.5 Weitere NP-vollst¨andige Probleme . . . 35

(3)

0 Einleitung

Wir ¨ubernehmen die Bezeichnungen und Begriffe aus dem ersten Teil dieses Kurses.

Wie im ersten Teil erfolgt die Analyse der Algorithmen im Rahmen der Random Access Machine. In Teil 2 diskutieren wir:

1. Graphenalgorithmen

2. Algorithmen aus der linearen Algebra 3. Algorithmen aus der Analysis.

4. Grundlagen der Komplexit¨atstheorie

(4)

1 Graphenalgorithmen

Die Sprache der Graphentheorie ist sehr nat¨urlich und sehr n¨utzlich bei der Beschrei- bung von Problemen der diskreten Mathematik algorithmischer sowie auch allgemei- ner Natur. Die Standard-Graphenalgorithmen geh¨oren zum Kern der algorithmi- schen diskreten Mathematik. Literaturhniweis zu Algorithmen: [CLRS13, CLRS09], zur Graphentheorie allgemein: [Die17].

1.1 Grundbegriffe der Graphentheorie

Sei V eine endliche Menge und sei eine Teilmenge von V2, so heißt G = (V, E) Digraph bzw. gerichteter Graph mit Knotenmenge V und Kantenmenge E. Die Elemente vonV heißenKnoten vonGund die Elemente vonE heißen Kanten bzw.

B¨ogen von G. Ist (a, b) eine Kante, so heißt ader Startknoten von (a, b) und b der Endkonten von (a, b). Man sagt auch, dass (a, b) und a sowie (a, b) und b inzident sind. Eine Kante der Form (a, a) heißt Schlinge. F¨ur a ∈ V heißt die Anzahl der Knotenb ∈V mit (a, b)∈ E derAusgangsgrad von a. F¨urb ∈V heißt die Anzahl der Knotena∈V mit (a, b)∈E derEingangsgrad vonb. F¨ur einen Digraphen G= (V, E) mita, b∈V heißt eine Folge p= (v0, . . . , vk) mit (vi, vi+1) ∈E,v0 =a und vk =bein (a, b)-Pfad der L¨angek. Ein Pfad heißtWeg, wenn alle Knoten des Pfades paarweise verschieden sind. Der Pfad (vi, . . . , vj) mit 0 ≤i ≤j ≤ k heißt Teilpfad vonp. Ein (a, b)-Pfad mita=bheißtZyklus. Ein Zyklusc= (v0, . . . , vk) heißtKreis, falls die Knotenv0, . . . , vk−1paarweise Verschieden sind. Die Zyklen (v0, . . . , vk) und (vi, . . . , vk, v0, . . . , vi) werden identifiziert (sie sind also per Definition gleich). Man sagt, dass eine Kante (a, b) zu einem Pfad (v0, . . . , vk) geh¨ort wenn a = vi und b=vi+1 f¨ur einimiti≤i < k gilt. Digraphen ohne Zyklen heißenazyklisch.

SeiV eine endliche Menge undE eine Teilmenge der Menge V

2

:={{a, b} : a, b∈V, a6=b},

aller zweielementigen Teilmengen vonV. Dann heißtG= (V, E) einGraph bzw. ein ungerichteter Graph. Man nennt die Elemente vonV Knoten und die Elemente von E Kanten von G. F¨ur {a, b} ∈ E heißen a und b die Endknoten von {a, b}. Wenn {a, b} ∈Egilt, sagt man{a, b}istinzident mitaundbsowieaundbsindbenachbart.

F¨ura∈V heißt die Anzahl der Knotenb∈V mit{a, b} ∈E derGrad des Knotens a. Die Begriffe Pfad, Weg, Teilpfad, Zyklus, Kreis werden bei Graphen analog zu Digraphen definiert. Ein Graph ohne Zyklen heißt Wald. Ein Graph G = (V, E) heißt zusammenh¨angend, falls f¨ur alle Knoten a, b∈V ein (a, b)-Pfad existiert. Ein zusammenh¨angender Wald heißt Baum. Gilt V ⊆V0 und E ⊆E0 so nennt man G einTeilgraph von G0. Ist W ⊆V so heißt

G|W := (W,{(a, b) : (a, b∈W,(a, b)∈E})

der durch W induzierte Teilgraph von G. Die Relation ‘es existiert ein (a, b)-Pfad’

ist eine ¨Aquivalenzrelation auf den Knoten des Graphen G. Die ¨Aquivalenzklassen bzgl. dieser Relation heißenZusammenhangskomponenten des Graphen.

Ein Graph (V, E) mitE= V2

heißt vollst¨andig. IstV disjunkte Vereinung von zwei MengenA und B und hat jede Kante vonGdie Form {a, b} mita∈A und b∈B,

(5)

so heißt G bipartit; die Mengen A, B heißen Partitionsklassen von G. Ist dar¨uber hinaus jedes{a, b} mit a∈A und b∈B eine Kante vonG, so heißt Gvollst¨andig bipartit.

Oft wird bei der Diskussion von Digraphen die Kurzbezeichnung ab:= (a, b)

und bei der Diskussion der Graphen die Kurzbezeichnung ab:={a, b}

verwendet.

Warnung: Eine Standarddefinition der Begriffe Graph und Digraph gibt es nicht; von Quelle zur Quelle unterscheiden sich die Definition geringf¨ugig. Außerdem gibt es oft mehrere Namen f¨ur einen und den selben Begriff: Gerichteter Graph = Digraph, Knoten = Ecke, Gerichtete Kante = Bogen, adjazent = benachbart, Grad = Valenz, Weg = einfacher Pfad, Kreis = einfacher Zyklus, Kantenzug = Pfad, geschlossener Kantenzug = Zyklus, Schleife = Schlinge.

1.2 Tiefensuche

DieTiefensuche (kurzTS) ist ein allgemeines Muster zur L¨osung verschiedener Re- chenaufgaben auf Graphen und Digraphen. Mit anderen Worten ist die Tiefensuche ist eine Art Vorlage f¨ur viele verschiedene Algorithmen.

Die Eingabe der TS besteht aus einem Digraphen G = (V, E) mit n Knoten und m Kanten und einem sogenannten Startknoten s ∈ V. Dar¨uber hinaus wird der Graph G durch die Angabe, f¨ur jedes u ∈ V, einer Liste N[u] aller Knoten v mit (u, v) ∈E gegeben. Wenn nummerieren alle Knoten von V und nehmen oBdA an, dass V ={1, . . . , n} ist. In diesem Fall ist N eine Listen aus n Listen. Man nennt N eine Adjazenzliste des Graphen G. Im Rahmen des theoretischen RAM-Modells, das wir in ’Algorithmische Mathematik 1’ einf¨uhrten, ben¨otigt man zur Speicherung von N O(m+n) Speichereinheiten. Im echten Rechner sind die Komponenten von N Zeiger aufN Listen. Bei der Speicherung vonG mit Hilfe vonN hat man einen direkten Zugriff auf die Kanten, die aus einem gegebenen Knotenuausgehen. Wenn man dagegenG als eine Liste von Kanten speichern w¨urde, w¨urden man durch die gesamte Liste der Kanten iterieren m¨ussen, um die Kanten zu identifizieren, die aus einem gegebenen Knotenu ausgehen. Das ist nat¨urlich nicht ganz praktisch, da die Anzahl der Elemente in N[u] viel kleiner sein kann als die Anzahl der Elemente in E.

Im Laufe der TS wird jedem Knoten v ∈ V die Farbe weiß, grau oder schwarz zugeordnet. W¨ahrend der TS werden die Farben der Knoten ver¨andert, wobei zur Beginn der TS alle Knoten weiß sind:

Tiefensuche-mit-Startknoten(s)

1: Array Farbe mitFarbe[v] =weißf¨ur alle v∈V einf¨uhren.

2: Tiefensuche(s)

(6)

Die TS auf einem Knotenu∈V ver¨andert die Farbe eines weißen Knotenu zu grau und sondiert anschließend alle Kanten (u, v) von G mit dem Endknoten u. Findet man w¨ahrend der Sondierung einer Kanten (u, v) einen weißen Knoten v ∈ V, so wird die TS f¨urvaufgerufen. Am Ende der TS aufU wird die Farbe vonuvon weiß zu schwarz ver¨andert. Hier die direkte rekursive Umsetzung dieser Idee:

Tiefensuche(u)

1: Farbe[u] :=grau

2: for v∈N[u]:

3: if Farbe[u] =weiß :

4: Tiefensuche(v)

5: end

6: end

7: Farbe[u] :=schwarz

Wenn f¨ur einen weißen Knotenvdie TS gestartet wird, so sagt man, dass der Knoten ventdeckt wird.

Durch die Einf¨uhrung der Farben merken wir die folgenden Zust¨ande:

• Ein weißer Knoten ist ein Knoten, der noch nicht entdeckt wurde.

• Ein grauer Knoten ist ein Knoten, der entdeckt wurde und dessen TS immer noch l¨auft.

• Ein schwarzer Knoten ist ein Knoten, der entdeckt wurde und dessen TS bereits terminiert hat.

Beispiel 1.1. Betrachten wir die TS mit dem Startknoten 1 auf einem Digraphen G= (V, E) mit der folgenden Adjazenzliste N:

1 : 2, 4 2 : 3 3 :

4 : 2, 3, 5 5 : 6

6 : 4 7 : 6

(7)

1 2

3 5 4

6 7

• Beschreiben Sie den Verlauf der TS f¨ur dieses Beispiel.

• Wann werden welche TSen rekursiv aufgerufen und beendet?

• Wie ¨andern sich die Farben der Knoten w¨ahrend der Ausf¨uhrung der TS?

Theorem 1.2. Sei G = (V, E) Digraph mit m Kanten und n Knoten, der durch eine Adjazenzliste gegeben ist. Sei s∈ V. Dann gilt f¨ur die Tiefensuche auf G mit dem Startknotens:

(a) Die Laufzeit des Verfahrens istO(m+n).

(b) Die Menge aller Knoten vonG, die von saus durch einen Pfad erreichbar sind ist genau die Menge der Knoten, die w¨ahrend der Ausf¨uhrung entdeckt werden.

(c) Der Graph G enth¨alt genau dann einen von s aus erreichbaren Zyklus, wenn w¨ahrend der Ausf¨uhrung der TS mit Starknoer der Kanten(u, v) die Farbe von- des Knotens v grau ist.

Bevor wir das Theorem beweisen kl¨aren wir kurz die Formulierung. Die Bezeichung O(m+n) bzgl. zwei Parameterm, n definieren wir als h¨ochstensC(m+n) f¨ur eine Konstante C > 0. Man beachte dass m+n positiv ist, denn der Graph G enth¨alt nach der Voraussetzung mindestens den Startknoten, sodassn >0 gilt. Wir m¨ussen also in der Definition von O(m +n) in diesem Fall nicht voraussetzen, dass die Parameterm, n groß genug sind.

Beweis. Wir bemerken zuerst, dass nur zwei Farben¨anderungen m¨oglich sind: weiß zu grau und grau zu schwarz. Eine TS kann nur f¨ur einen weißen Knoten aufgerufen werden. Nach dem Aufruf wird der Knoten grau. Der Knoten bleibt grau, bis er am Ende der Ausf¨uhrung seiner TS schwarz gef¨arbt wird.

(a): Das Verfahren setzt die Farben der Knoten und sondiert die K¨anten. Man setzt die Farbe aller Knoten weiß genau ein mal. Wenn ein Knoten entdeckt wird, ¨andert

(8)

man seine Farbe zwei mal: von weiß auf grau und von grau auf schwarz. Somit ist der Aufwand der Farben-Operationen gleich O(n). Eine Kante kann h¨ochstens ein mal sondiert werden, da die Kanten von einem entdeckten Knoten aus sondiert wird, und ein Knoten nur ein mal entdeckt werden kann.

(b): Wenn f¨ur einen Knotenuein (s, u)-Pfadv0, . . . , vkexistiert, so wird der Knoten v0 =s entdeckt. Wenn ein Knoten vi mit i < k des Pfades entdeckt wird so wird der n¨achste Knoten vi+1 sp¨atestens beim sondieren der Kante (vi, vi+1) entdeckt.

Dies zeigt, dass der Knoten vk = u entdeckt wird. Umgekehrt, sei u1, . . . , ut Folge aller Knoten, die w¨ahrend der Ausf¨uhrung entdeckt wird, in der Reihenfolge der Entdeckung. Der Knotenu1 =sist durch vons einen Pfad der L¨ange 0 erreichbar.

Nehmen wir an alle Knotenu1, . . . , uj−1 mitj≤tsind durch von saus durch einen Pfad erreichbar. Dann ist auch der Knotenuj erreichbar. Der Knoten uj wird beim sondieren einer Kante (ui, uj) von einem Knotenuiaus entdeckt, der vorujentdeckt wurde. das heißt i ≤ j−1. Nach der Voraussetzung existiert ein (s, ui)-Pfad. Da (ui, uj) eine Kante ist, kann dieser Pfad durch das Hinzuf¨ugen des Knotens uj zu einem (s, uj)-Pfad erweitern werden.

(c): Der Beweis von (c) basiert auf dem gleichen Prinzip wie der Beweis von (b) und wird weggelassen.

Aufgabe 1.3. Beweisen Sie Theorem 1.2(c).

Bemerkung 1.4 (Berechnung von Pfaden). Wenn man f¨ur alle erreichbare Kno- ten v ∈ V auch einen (s, v)-Pfad ausrechnen m¨ochte, kann man die sogenannte Vorg¨anger-Abbildung π berechnen. Das is ein Array mit n Komponenten, wobei durchπ[v] notiert wird, von welchem Knoten aus der Knotenv entdeckt wurde. Das heißt, beim sondieren der Kante (u, v) setzt manπ[v] :=u.

Zu Beginn setzt manπ[v] =NIL(NILheißt so viel wie undefiniert). Durch π weiß man, dass jeder (s, π[v])-Pfad mitπ[v]6=NILzu einem (s, v)-Pfad erweitert werden kann, wenn man v zum (s, π[v])-Pfad hinzuf¨ugt. Dies ergibt ein direktes Verfahren zur Berechnung von Pfaden von s zu allen von aus s erreichbaren Knoten. Eine rekursive sowie eine iterative Umsetzung der Pfad-Berechnungen ist m¨oglich.

Bemerkung 1.5 (Klassifikation der Kanten). Durch die TS k¨onnen die Kanten (u, v) des Graphen in drei Arten klassifiziert werden, je nach dem welche Farbe v beim Sondieren der Kante (u, v) hatte.

• bei den Vorw¨artskanten war v weiß,

• bei den R¨uckw¨artskanten warv grau,

• und bei den Querkanten war vschwarz.

Die Vorw¨artskanten (ohne Orientierung) zusammen mit vonserreichbaren Knoten bilden einen Baum. Jede R¨uckw¨artskanten erzeugt zusammen mit einer Auswahl

von Vorw¨artskanten einen Zyklus.

Bemerkung 1.6 (Anwendungen der TS). Die Tiefensuche hat sehr viele Anwen- dungen. Wir nennen hier nur einige:

1. Zusammenhangskomponenten eines ungerichteten Graphen

(9)

2. Topologisches Sortieren in einem azyklischen Digraphen.

3. Berechnung der starken Zusammenhangskomponenten eines Digraphen.

4. Hilfsalgorithmus f¨ur verschiedene Aufgaben (z.B., bei Berechnung von maxi- malen Fl¨ussen).

1.3 Breitensuche

DieBreitensuche (kurzBS) ist ebenfalls ein allgemeines Muster verschiedener Gra- phenalgorithmen. Als Hilfsdatenstruktur werden in der Breitensuche Warteschlan- gen benutzt, die wir bereits im Teil 2 des Kurses einf¨uhrten. Es sei daran erinnert, dass man Warteschlangen mit der maximalen m¨oglichen Gr¨oße n mit Hilfe von Arrays der L¨ange n umgesetzt werden k¨onnen. In unserem Fall ist die maxima- le m¨ogliche Gr¨oße bekannt, das ist die Anzahl der Knoten im zugrunde liegenden Graphen.

F¨ur Knotenu, v∈V eines Digraphen G= (V, E) definieren wirdenAbstand δ(u, v) von u nach v als minimale L¨ange eines (u, v)-Pfades. Wenn kein solcher Pfad exi- stiert, setzt man δ(u, v) = ∞. F¨ur Graphen wird der Abstand analog definiert, wobei im Fall von Graphen die Gleichung δ(u, v) = δ(v, u) f¨ur alle Knoten u, v erf¨ullt ist, da jeder (u, v)-Pfad durch die Umkehrung der Reihenfolge seiner Knoten einen (v, u)-Pfad gleicher L¨ange erzeugt.

Wir betrachten das Problem der Bestimmung aller Abst¨andeδ(s, v) f¨urv ∈ V f¨ur einen gegebenen Digraphen G = (V, E) und einen gegebenen Startknoten s ∈ V. Wie bei der Diskussion der Tiefensuche nehmen wir an, dass V = {1, . . . , n} gilt und dassGdurch eine Adjazenzliste N gegeben ist.

In der BS wird ein Arraydder L¨angeneingef¨uhrt, in welchem nach der Terminierung der BS die Abst¨andeδ(s, v) inv∈V gespeichert sind. Zu Beginn setzt mand[v] =∞ f¨ur alle v ∈ V \ {s} und d[s] = 0. Die Gleichheit d[v] = ∞ bedeutet, dass der Knotenv w¨ahrend der BS noch nicht entdeckt wurde. Die Ver¨anderung des Werts d[v] entspricht der Entdeckung von v.

Zu Beginn setzt man d[v] = ∞ f¨ur alle v ∈ V \ {s} und d[v] = 0 f¨ur v = s. Wir nennend[v] die Distanz zu v.

(10)

Breitensuche(s)

1: Ein Arraydmitd[u] =∞ f¨ur alle u∈V einf¨uhren.

2: Leere Warteschlange Qmit der maximalen m¨oglichen Gr¨oßeneinf¨uhren.

3: d[s] := 0

4: enqueue(Q, s)

5: while Qnicht leer :

6: u:=dequeue(Q) B Die Bearbeitung des Knotensu beginnt.

7: BAus u ausgehende Kanten werden sondiert

8: forv∈N[u]:

9: if d[v] =∞ :

10: B Der Knoten v wurde entdeckt

11: d[v] :=d[u] + 1

12: enqueue(Q, v).

13: end

14: end

15: end

Beispiel 1.7. TODO: anderes Beispiel. Betrachten Sie den Digraphen G mit der folgenden Adjazenzliste:

1 : 2 3 5 2 : 1 3 : 4 4 : 1 5 : 3 4

Protokollieren Sie die ¨Anderung der Warteschlange sowie die ¨Anderungen der Abst¨ande w¨ahrend der Ausf¨uhrung der BS aufG mit dem Startknotens= 1.

1 2

3

4

5

Theorem 1.8.SeiG= (V, E)Digraph mitnKnoten undmKanten, der durch eine Adjazenzliste gegeben ist, und sei s∈V. F¨ur die Breitensuche mit dem Startknoten sgilt:

(a) Die Laufzeit des Verfahrens istO(m+n).

(11)

(b) Nach der Terminierung gilt d(v) =δ(s, v) f¨ur alle v∈V.

Beweis. (a): Die Ausf¨uhrung der BS besteht aus Operationen f¨ur Knoten (Aufnahme inQ, Entfernung ausQ, ¨Anderung der Distanzen) und der Sondierung der Kanten.

F¨ur jeden Knoten, der in die Schlange aufgenommen wird, gilt d[u] < ∞ (dies ist eine Invariante w¨ahrende der Ausf¨uhrung). Ein Knoten wird in der for-Schleife genau dann in die Schlange aufgenommen, wenn d[v] = ∞ gilt. Jeder Knoten wird also h¨ochstens ein mal in die Schlange aufgenommen.

Somit ist der Gesamtaufwand der Operationen f¨ur KnotenO(n) Zeiteinheiten. Eine Kante (u, v) wird h¨ochstens ein mal sondiert. Somit ist der Gesamtaufwand f¨ur die Bearbeitung der KantenO(m) Zeiteinheiten. Die Laufzeit des gesamten Verfahrens ist daherO(m+n) Zeiteinheiten.

(b): Wir benutzen die folgende Hilfsaussage ¨uberQ. In jedem Moment der Ausf¨uhrung gilt: f¨urQ = [q1, . . . , qt] ist die Liste der entsprechenden Distanzen [d[q1], . . . , d[qt]]

aufsteigend sortiert und enth¨alt h¨ochstens zwei verschiedene Werte. Mit anderen Worten hat [d[q1], . . . , d[qt]] die Form [α,· · ·, α] oder [α, . . . , α, α+ 1, . . . , α+ 1]. Man sieht, dass diese Eigenschaft am Anfang der Ausf¨uhrung erf¨ullt ist, und bei in jeder Iteration beibehalten bleibt. Wenn etwaQ 4 Knoten enth¨alt mit [d[q1], . . . , d[q4]] = [4,4,5,5] und der Knoten q1 2 Nachbarn hat, die noch nicht entdeckt wurden, so wird die Schlange q nach der Abarbeitung von q1 5 Knoten enthalten (denn q1 wird entfernt und die zwei noch nicht entdeckten Knoten werden hinzugef¨ugt). Die entsprechende Folge der Distanzen wird [4,5,5,5,5] sein, denn die zwei noch nicht entdeckten Knoten erhalten den Abstand d[u1] + 1 = 5. Das allgemeine Argument ist ¨ahnlich ist dem Leser ¨uberlassen.

Seien nun u1, . . . , uk alle Knoten, die w¨ahrend der Ausf¨uhrung entdeckt wurden, in der Reihenfolge ihrer Entdeckung. Dann gelten f¨ur die fur u1, . . . , uk gesetzten Distanzen die Ungleichungen

d[u1]≤d[u2]≤. . .≤d[uk] (1.1) Nehmen wir an der Knoten uj wird vom Knoten ui aus entdeckt. Wir haben also in einem Moment der Ausf¨uhrung Q = [ui, . . . , uj−1]. Nehmen wir bereits d[u1] ≤

· · · ≤ d[uj−1] ist bereits gezeigt worden (f¨ur j = 1 ist nichts zu zeigen). Dann ergibt die Hilfsaussage ¨uber die Distanzen in der Schlange d[uj−1] ≤ d[uj], was zu d[u1] ≤. . . ≤ d[uj] f¨uhrt. Die Ungleichungen (1.1) wird somit durch Induktion verifiziert.

Des Weiteren gilt

d[v]≥δ(s, v) ∀v∈V. (1.2)

denn diese Bedingung ist vor dem Antreten der while-Schleife erf¨ullt. Wenn wir annehmen, dass die Bedingung bis zu einem Zeitpunkt der Ausf¨uhrung erf¨ullt ist, dann ist die Bedingung auch der n¨achsten Ver¨anderung der Distanzen erf¨ullt. Denn man hat,d[v] =d[u] + 1≥δ(s, u) + 1 und man hat offensichtlichδ(s, u) + 1≥δ(s, v), wenn (u, v) eine Kante vonG ist. Es giltd[v]≥δ(s, v).

Aus (1.2) folgt, dass bei der Terminierungδ(s, v) =d[v] f¨ur alle Knoten v∈V mit δ(s, v) =∞ erf¨ullt ist. Wir zeigen nun durch Induktion, dass bei der Terminierung δ(s, v) =d[v] auch f¨ur Knotenv∈V mitδ(s, v)<∞ erf¨ullt ist.

(12)

δ(s, v) =d[v] gilt f¨ur den einzigen Knoten v∈V mitδ(s, v) = 0.

Sei α ∈ N0 sei δ(s, v) = d[v] bei der Terminierung f¨ur alle Knoten v ∈ V mit δ(s, v)≤α erf¨ullt. F¨urα= 0 ist das der Fall, denn v=sist der einzige Knoten mit δ(s, v) = 0. Wir betrachten nun einen beliebigen Knotenv0 ∈V mitδ(s, v0) =α+ 1 und zeigen, dass bei der Terminierungd[v0] =α+1 erf¨ullt ist. Es existiert ein Knoten u0 mit (u0, v0) ∈ E und δ(s, u0) = α. Wir w¨ahlen einen solchen Knoten u0, der als erster in der while-Schleife bearbeitet wird.

Nach der Induktionsvoraussetzung gilt f¨ur diesen Knoten δ(s, u0) = d[u0] = α. Im Moment der Bearbeitung von u0 ist der Knoten v0 noch nicht entdeckt. Wenn v0 bereits entdeckt w¨are, so h¨atte man wegen (1.1) d[v0] ≤ d[u0] = α, was aber der Bedingungd[v0]≥δ(s, v0) =α+ 1 (vgl. (1.2)) widerspricht.

Nun wird bei beim Sondieren der Nachbarn vonu0 der Knotenv=v0 entdeckt und der Abstandd[v0] =d[u0] + 1 =δ(s, u0) + 1 =α+ 1 richtig berechnet.

Bemerkung 1.9. Wenn man zu jedemv ∈V, der von sauch erreichbar ist, auch einen k¨urzesten (s, v)-Weg bestimmen m¨ochte, kann man v¨ollig analog zur Tiefen-

suche die Vorg¨anger-Abbildung benutzen.

Bemerkung 1.10. Wenn man die Tiefensuche ohne Rekursion umsetzen m¨ochte (was gewisse Vorteile hat, weil der Programmstack nicht belastet wird), so kann man das anhand der oben pr¨asentierten Breitensuche machen, in dem man die Schlange Qdurch einen Stack S ersetzt. Ein StackS ist eine Liste S = [s1, . . . , sk] mit zwei Grundoperationen:pop(S) – zur Entfernung und R¨uckgabe vonsk;push(S, x) – um xans Ende von S hinzuzuf¨ugen. Ist die maximale m¨ogliche Gr¨oße vonS h¨ochstens n∈N, so kann man ein Stack S auf der Basis eines Arrays der L¨angenumsetzten, sodass die Laufzeit der beiden Grundoperationen Θ(1) ist.

1.4 Der Bellman-Ford-Algorithmus

Ein gewichteter Digraph ist ein TripelG= (E, V, w), wobei (E, V) ein Digraph ist und w : E → R eine Funktion. Der Werte w(u, v) f¨ur (u, v) ∈ E heißt Gewicht der Kante (u, v). Wir betrachten im folgenden den Fall von nichtnegativen Kanten gewichten.

Die L¨ange eines Pfadesp= (p0, . . . , pk) in G wird ist der WertPk−1

i=0 w(pipi+1).

Der Abstandδ(u, v) inu, v∈V wird als minimale L¨ange aller (u, v)-Pfade definiert.

Man setztδ(u, v) =∞ wenn kein (u, v)-Pfad existiert.

Wir betrachten die folgende Rechenaufgabe: f¨ur einen Digraphen G= (E, V, w) mit nichtnegativen ganzzahligen Kantengewichten, der durch eine Adjazenzliste gegeben ist, und f¨ur einen Knoten s∈V soll f¨ur jedes v ∈V der Abstand δ(s, v) berechnet werden. Das Problem nennt man dasProblem der k¨urzesten Pfade mit einem Start- knoten (im Fall von nichtnegativen Kantengewichten). Wir benutzen die Abk¨urzung PKP.

Wie betrachten im Folgenden Algorithmen, bei denen wie in der Breitensuche die aktuellen Distanzend[v] mit v∈V gef¨uhrt werden, die am Anfang alsd[v] =∞f¨ur v∈V \ {s}und d[v] = 0 f¨urv=sgesetzt werden. Im Laufe der Ausf¨uhrung werden die Distanzen mit Hilfe der folgenden einfachen Prozedur ver¨andert. Istd[v] endlich

(13)

so heißt es, dass im Laufe der Ausf¨uhrung festgestellt wurde, dass ein (s, v)-Pfad der L¨anged[v] existiert. Die Gleichungd[v] =∞ heißt, dassv(noch) nicht entdeckt wurde.

Dist-Update(u, v)

1: if d[v]> d[u] +w(u, v) :

2: d[v] :=d[u] +w(u, v)

3: end

Es heißt also, wenn f¨uru ein (s, u)-Pfad der L¨ange u existiert, so existiert im Fall, dass (u, v) eine Kante ist, ein (s, v)-Pfad der L¨ange d[u] +w(u, v). Ist ein solcher (s, v)-Pfad k¨urzer als der aktuell Gefundene, wird ein Update durchgef¨uhrt.

DerBellman-Ford-Algorithmus (kurz BFA) l¨ost das PKP auf einem Digraphen mit Knotenmengenund Kantenmenge E mitm Kanten:

Bellman-Ford(s)

1: Array dmitd[v] =∞ f¨ur alle v∈V einf¨uhren.

2: d[s] := 0

3: for i= 1, . . . , n−1:

4: for (u, v)∈E :

5: Dist-Update(u, v)

6: end

7: end

Beispiel 1.11. Als Beispiel betrachten wir den folgenden Digraphen.

1

2 3

4 1

10 2 5

3

Die Eingabe hier istV ={1, . . . , n}, die Kanten als Liste (4,3),(2,4),(1,4),(2,3),(1,2)

definieren sowie der Startknotens= 1.

Hierbei kann der Digraph durch eine Liste der Kanten gegeben werden oder auch als eine Adjazenzliste gegeben werden (bei Adjazenzlisten muss die for-Schleife ¨uber (u, v) ∈ E durch zwei Schleifen ersetzt werden, in der ¨Außeren w¨ahlt man u ∈ V und un der Innerenv∈N[u]).

Theorem 1.12. Sei G = (V, E, w) gewichteter Digraph n Knoten und m Kanten und mit nichtnegativen Kantengewichten, der als eine Adjazenzliste oder als eine Kanteliste gegeben ist. Der Bellman-Ford-Algorithmus l¨ost das PKP auf G in der ZeitO(mn).

TODO: Bedeutung derO-Notation hier.

(14)

Beweis. Seis∈V der Startknoten.

Die Aussage ¨uber die Laufzeit ist trivial.

Zu jeder Zeit der Ausf¨uhrung gilt d[v]≥δ(s, v) f¨ur jedes v∈V, was man genau so wie bei der Analyse der Breitensuche nachweisen kann.

Es bleibt zu zeigen, dass nach der Terminierung die Bedingungd[v] =δ(s, v) erf¨ullt ist. F¨ur die Knoten mit δ(s, v) = ∞ folgt es aus d[v] ≥ δ(s, v). Man betrachte nun einen Knoten v mit δ(s, v) < ∞. Man betrachte einen k¨urzesten (s, v)-Pfad p= (p0, . . . , pk). Es ist klar, dass die Knoten p0, . . . , pk paarweise verschieden sind, sodass der Pfad eigentlich ein Weg ist und mank≤n−1 hat. Dapein k¨urzester Pfad ist, sind auch die Teilpfade vonpk¨urzeste Pfade. Wir zeigen, dass f¨ur jeden Knoten pinach der Terminierungd[pi] =δ(s, pi) gilt. F¨ur den Knotenp0 =sgilt das bereits zum Beginn der Ausf¨uhrung. F¨ur den Knoten p1 gilt d[p1] = δ(s, v1) nach dem ersten Iteration der ¨außeren Schleife, weil in dieser Iteration Dist-Update(v0, v1) durchgef¨uhrt wird, nach dem mand[v1] =δ(s, v1) hat. Wenn nach deri-ten Iteration miti < n−1 f¨ur den Knotenvi die Bedingungd[vi] =δ(s, vi) erf¨ullt ist, so ist auch nach der (i+ 1)-ten Iteration die Bedingungd[vi+1] =δ(s, vi+1) erf¨ullt, da w¨ahrend der (i+ 1)-iteration nach der Ausf¨uhrung Dist-Update(vi, vi+1) man d[vi+1] = δ(s, vi+1) hat.

Bemerkung 1.13 (Laufzeit f¨ur d¨unnbesetzte Graphen). F¨ur Digraphen mit m = O(n) (d¨unnbestzte Graphen) ist die Laufzeit von BFA O(n2), f¨ur Graphen mit m= Ω(n2) (viele Kanten) ist die LaufzeitO(n3). Nat¨urlich kann die Frage gestellt

werden, ob man das PKP schneller l¨osen kann.

Bemerkung 1.14 (Verbesserung der Laufzeit). Sind nicht alle Knoten von s er- reichbar, so kann die Laufzeit mit dem folgenden einfachen Trick verkleinert werden.

Man kann zuerst eine Breiten- oder eine Tiefensuche durchf¨uhren und dadurch die nichterreichbaren Knoten abarbeiten und weglassen. Nach dem Weglassen kann dann der BFA auf einem kleineren Digraphen ausgef¨uhrt werden.

Bemerkung 1.15 (Vorteile des BFA). Der BFA zeichnet sich unter den Algorith- men zur L¨osung von PKP durch seine Einfachheit aus. Er besteht lediglich aus

mehreren geschachtelten Schleifen.

Bemerkung 1.16 (Vorg¨anger-Abbildung). Neben der L¨angen der Pfade k¨onnen nat¨urlich auch k¨urzeste Pfade ermittelt werden (mit Vorg¨anger-Abbildung wie bei

TS und BS).

1.5 Der Dijkstra-Algorithmus

Der Dijkstra-Algorithmus (kurz DA) l¨ost PKP f¨ur Digraphen, die in der Form einer Adjazenzliste gegeben sind.

(15)

Dijkstra(s)

1: Array dmitd[v] =∞ f¨ur alle v∈V einf¨uhren.

2: d[s] := 0

3: Eine Priorit¨atsschlange Q einf¨uhren, die alle v ∈ V speichert und d[v] als Schl¨ussel benutzt (je niedriger d[v], desto h¨oher Priorit¨at).

4: while Qenth¨alt Knoten:

5: Ein Elementu inQ mit der kleinsten Distanzd[u] ausQentfernen.

6: forv∈N[u]:

7: Dist-Update(v)

8: end

9: end

Hierbei soll bemerkt werden, dass bei dem Update der Distanzen die Schl¨usswerte der Elemente vonQ ver¨andert werden (d.h., die Updates der Distanzen involvieren die Grundoperationen der Priorit¨atsschlange).

Als Beispiel betrachten wir den selben Digraphen wie bei der Diskussion des Bellman- Ford-Algorithmus.

Theorem 1.17. Sei G = (V, E, w) gewichteteger Digraph mit m ∈N Kanten und n ∈ N Knoten und nichtnegativen Kantengewichten, der durch eine Adjazenzliste geben ist (Kantengewichte sind Teil der Adjazenzliste). Seis∈V. Der DA l¨ost das Problem der k¨urzesten Pfade mit Startknoten s. Wenn die Warteschlange im DA auf der Basis von Heaps umgesetzt ist, so ist die Laufzeit des DAO((m+n) logn).

Beweis. Zur Laufzeit: Jeder Knoten und jede Kante werden h¨ochstens ein mal bear- beitet. Pro Knotenbearbeitung hat man eine Entfernung aus der Priorit¨atsschlange.

Pro Kantenbearbeitung hat man h¨ochstens eine Operation der Schl¨ussel¨anderung.

Somit ist die LaufzeitO(mlogn) + (nlogn) =O((m+n) logn).

Zur Korrektheit: Wie bei der Analyse von BFA sieht man, dass auch im DA man d[v] ≥ δ(s, v) f¨ur alle v ∈ V in jedem Zeitpunkt der Ausf¨uhrung gilt. Nun zeigen wir, dass f¨ur jeden Knoten u, der bereits ausQentfernt wurde, die Gleichungd[v] = δ(s, v) erf¨ullt ist. Angenommen, die Behauptung w¨are falsch. Sei u 6= s der erste Knoten, der aus Q am Anfang der while-Schleife entfernt werden muss und f¨ur den d[u] > δ(s, u) gilt. Dann existiert ein (s, u)-Pfad (p0, . . . , pk) mit der L¨ange δ(s, u)< d[u]. Wir betrachten die Kante (pi, pi+1) in diesem Pfad mitp0, . . . , pi6∈Q und pi+1 ∈ Q. Nach der Voraussetzung gilt d[pi] = δ(s, pi). Da pi aus Q entfernt wurde, ist auch das Update bzgl. (pi, pi+1) durchgef¨uhrt worden. Somit giltd[pi+1] = δ(s, pi) +w(pi, pi+1) = δ(s, pi+1) ≤δ(s, u) < d[v]. Das zeigt, dass in der aktuellen Iteration nicht der Knoten u sondern der Knoten pi+1 enfernt werden muss, weil dieser Knoten inQ liegt und eine kleinere Distanz hat. Ein Widerspruch.

Bemerkung 1.18(Vebesserung der Laufzeit). Wenn in der while-Schleife ein Kno- tenu dran kommt, f¨ur dend[u] =∞ gilt, kann man die Ausf¨uhrung terminieren, in diesem Moment hat man d[v] = ∞, f¨ur alle Knoten in Q die ¨ubrig geblieben sind, und die Updates ver¨andern die Distanzen nicht mehr.

Bemerkung 1.19(Dijkstra auf d¨unnbesetzten und dichten Graphen). Im Fallm= O(n) ist die Laufzeit O(nlogn), als viel Schneller als O(n2) bei Bellman-Ford. Im

(16)

Fallm= Θ(n2) ist die Laufzeit O(n2logn). Man kommt auf O(n2), wenn man die Priorit¨atsschlange auf der Basis von unsortierten Arrays umsetzt. Denn in diesem Fall verbraucht man pro Iteration O(n) Zeiteinheiten, um den Knoten mit dem minimalen Schl¨ussel zu finden. Die Updates erfolgen in der Zeit O(1) pro kante.

Also ist der GesamtaufwandnO(n) +O(m) =O(n2+m) =O(n2). F¨ur die meisten Zwecke ist Dijkstra mit einer Heap-basierten Priorit¨atsschlange deutlich schneller.

(17)

2 Algorithmen der linearen Algebra

Wir betrachten die Grund-Rechenaufgaben aus der linearen Algebra. Das sind:

• lineare Gleichung l¨osen,

• Determinante berechnen,

• Matrix invertieren.

Wir diskutieren Algorithmen zur L¨osungen dieser Aufgaben und diskutieren ihre Effizienz und Stabilit¨at. Bei der Diskussion werden wir die Begriffe aus dem Kurs Lineare Algebra verwenden.

2.1 Elementare Zeilentransformationen

SeiKK¨orper (Wichtige Beispiele:R,C,QundZ/pZf¨ur eine Primzahlp). F¨ur Matrix A = (ai,j) ∈ Km×n, wird als Ai,∗ die i-te Zeile und als A∗,j die j-te Spalte von A bezeichnen. Analog f¨uhren wir auch Bezeichnungen f¨ur die Untermatrix AI,J von A ein, f¨ur I ⊆ [m] und J ⊆ [n]. Wir bezeichnen als e1, . . . , en die Standardbasis- Vektoren vonKn. Als In bezeichnen wir dien×nEinheitsmatrix.

F¨ur eine MatrixA∈Km×n f¨uhren wir die elementaren Zeilentransformationen ein:

Typ 1: Vertauschen von zwei Zeilen: Ai,∗ und Aj,∗ vertauschen mit i, j ∈ [m] und i6=j. Bezeichnung:Ai,∗↔Aj,∗.

Typ 2: Addition eines vielfachen einer Zeile zu einer anderen Zeile.Ai,∗ :=Ai,∗+cAj,∗

miti6=j,i, j∈[m] und c∈K. Bezeichnung:Ai,∗:=Ai,∗+cAj,∗.

Typ 3: Multiplikation einer Zeile mit einer Konstante, die ungleich Null ist. Bezeich- nung:Ai,∗:=cAi,∗ mitc∈K\ {0}.

Jede dieser Transformation ben¨otigtO(m) arithmetische Operationen f¨ur allgemeine MatrizenA.

Das Lemma und die Propositionen dieses Abschnitts werden als Aufgaben gestellt.

Lemma 2.1. SeienA, A0 ∈Km×n. EntstehtA0 ausAdurch elementare Zeilentrans- formationen, so existiert eine regul¨are Matrix M mitM A=A0.

Beweis. Aufgabe

Als direkte Folgerung von Lemma 2.1 erh¨alt man:

Proposition 2.2. Sind Ax = b und A0x = b0 zwei lineare Gleichungsysteme, mit A, A0 ∈Km×n und b, b0∈Km, derart, dass die Matrix(A0 b0) durch Anwendung von endlich vielen Elementartransformationen zur Matrix (A b) entstanden ist, so sind die L¨osungsmengen vonAx=b und A0x=b0 gleich.

Beweis. Aufgabe

(18)

Proposition 2.3. SindA, A0∈Kn×nzwei Matrizen derart, dassA0 ausAdurch An- wendung von endlich viele Elementartransformationen vom Typ 1 und 2 entstanden ist, so gilt det(A0) = det(A), wenn die Anzahl der angewandten Transformationen vom Typ 1 gerade ist, unddet(A0) =−det(A) sonst.

Beweis. Aufgabe.

Proposition 2.4. Sind A, B ∈ Kn×n Matrizen derart, dass (In B) aus (A In) durch Anwendung von endlich vielen Elementartransformationen entstanden ist, so giltB =A−1. Des Weiteren kann f¨ur jede regul¨are MatrixAdie Matrix(A In)durch Anwendung von endlich vielen Elementartransformationen zur Matrix (In A−1)

¨uberf¨uhrt werden.

Beweis. Beweis

2.2 Gauß-Verfahren

Zur L¨osung den drei aufgelisteten Aufgaben aus der linearen Algebra kann das Gauß- Verfahren verwendet werden. Das Verfahren ¨uberf¨uhrt eine gegebene Matrix in eine Stufenform.

Um die ‘Formate’ der Matrizen zu notieren, benutzen wir die folgenden Bezeich- nungen:∗ steht f¨ur ein beliebiges Element aus Kund ∗◦ ein beliebiges Element aus K\ {0}. Eine beliebige 3×3 untere Dreiecksmatrix hat somit das Format:

∗ 0 0

∗ ∗ 0

∗ ∗ ∗

und eine beliebige 3×3 regul¨are untere Dreiecksmatrix das Format

◦ 0 0

∗ ∗◦ 0

∗ ∗ ∗◦

IstAi,∗ eine Nichtnull-Zeile von A, so besitzt diese Zeile eine Komponente ai,j mit ai,j 6= 0 mit ai,j0 = 0 f¨ur alle j0 < j. Wir nennen ai,j die Leitkomponente der ZeileAi,∗. Wir sagen, dass A eine Stufenform besitzt, wenn die Null-Zeilen von A sich unterhalb der Nichtnull-zeilen von A befinden und f¨ur zwei Nichtnull-Zeilen Ai,∗ und Ai+1,∗ mit Leitkomponenten ai,j und ai+1,k die Ungleichung k > j gilt.

Eine obere Dreiecksmatrix mit Nichtnull-Komponenten auf der Diagonale ist ein Spezialfall einer Matrix in einer Stufenform, bei der sich alle Leitkomponenten auf der Diagonale der Matrix befinden.

Theorem 2.5. Jede Matrix A ∈ Km×n l¨asst sich mit Hilfe von mn elementaren Zeilentransformation vom Typ 1 und 2 in eine Stufenform¨uberf¨uhren. Das heißt, die Uberf¨¨ uhrung in eine Zeilenstufenform kann mit Hilfe von O(m2n) arithmetischen Operationen (Operationen+,−,·, / in K) durchgef¨uhrt werden.

(19)

Beweis. Ist A = 0, so ist man gleich fertig. Ansonsten w¨ahlen wir die erste Spalte A∗,j, die ungleich 0 ist (das heißt, das kleinstejmitA∗,j 6= 0). Nach einem geeigneten Vertauschen von zwei Zeilen vonA, gilt a1,j6= 0. Mit Hilfe der ersten Zeile k¨onnen anschließend die Zeilen 2, . . . , m so transformiert werden, dass nach den Transfor- mation die Bedingunga2,j =· · ·=am,j = 0 erf¨ullt ist. Nun sind die Zeilen bisj−1 alle Gleich 0 und in der j-ten Zeile ist nur die erste Komponente ungleich 0. Nun k¨onnen wir die Untermatrix A{2,...,n},∗ (aus Spalten 2 bisn) iterativ genau so wie A oben bearbeitet werden.

Dies ist das sogenannte Gauß-Verfahren. Es ist klar, dass das Verfahren korrekt funktioneirt. Das Verfahren besteht aus m-Iterationen. In Iteration i macht man h¨ochstens n elementare Zeilentransformationen. Insgesamt also, hochstens mn ele- mentare Zeilentransformationen. Die Anzahl der Arithmetischen Operationen ist somit h¨ochstensO(m2n).

2.3 LU P-Faktorisierung

Um den Beweis des folgenden Theorem zu verfolgen, muss man in der Lage sein Produkt AB von zwei Matrizen mit Hilfe der Spalten vonA und der Zeilen von B zu interpretieren. Jede Zeile von AB ist Linearkombination der Zeilen von B und jede Spalten vonAB ist Linearkombination der Spalten vonA.

Theorem 2.6. F¨ur jede regul¨are MatrixA∈Kn×n existiert eine Permutationsma- trixP eine untere DreieckmatrixLund eine obere DreiecksmatrixU mitA=LU P. Entsprechenden MatrizenP, L, U k¨onnen anhand von A mit Hilfe vonO(n3) arith- metischen Operationen berechnet werden.

Beweis. Der konstruktive Beweis ist ¨ahnlich zu Gauß-Verfahren, allerdings werden wir nicht die Zeilen, sondern Spalten vertauschen. Da A regul¨ar ist, ist die erste Zeile vonA ungleich 0. Wir betrachten eine Komponente a1,i1 der ersten Zeile mit a1,i1 6= 0. Nun benutzen wir die elementaren Zeilentransformationen vom Typ 2 zu den Zeilen 2, . . . , n, um die Bedingung a2,i1 = . . . = an,i1 = 0 zu erstellen. Diese Anderung von¨ A entspricht der Matrix-Zuweisung

A:=M1A,

f¨ur eine untere DreicksmatrixM1 mit Einsen auf der Diagonale:

M1 =

 1 c2,1 1

... . ..

cn,1 1

DaM1regul¨ar ist, bleibtAnach der Ausf¨uhrung der Zuweisung eine regul¨are Matrix.

In der zweiten Spalte der Matrix findet man also eine Komponentea2,j2 mitj2 6=j1

mit, die ungleich 0 ist. Mit Hilfe der zweiten Zeile k¨onnen nu die Zeilen 3, . . . , n so transformiert werden, dass nach der Transformation a3,j2 = · · · = an,j2 = 0 gilt.

Diese Transformation entspricht wieder einer Zuweisung M2A, wo M2 eine untere Dreicksmatrix mit Einsen auf der Diagonale ist. Die MatrixM2 hat also die Form

(20)

M2 =

 1

1 c3,2 1

... . ..

cn,2 1

Die iterative Fortsetzung dieses Verfahrens ¨uberf¨uhrtAzu einer Form, mit aj,ij = 0 f¨ur allej > ij f¨ur gewisse Indizes i1, . . . , in mit{i1, . . . , in}={1, . . . , n}. Wenn wir nun die Spalten der MatrixAnun so vertauschen, dass dieijSpalte an diej-te Stelle kommt, wirdA zu einer oberen Dreiecksmatrix transformiert. Die Ver¨anderung der Reihenfolge der Spalten entspricht der Zuweisung A := AQ mit Q = (ei1· · ·ein).

Wenn etwa n = 5 und i1 = 3, i2 = 5, i3 = 4, i4 = 1, i5 = 2 gilt, so hat A vor dem Vertauschen der Spalten das Format:

A=

∗ ∗ ∗◦ ∗ ∗

∗ ∗ 0 ∗ ∗◦

∗ ∗ 0 ∗◦ 0

◦ ∗ 0 0 0 0 ∗◦ 0 0 0

Nach der ZuweisungA:=AQ mit

Q=

0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0

wirdA zum Format

A=

◦ ∗ ∗ ∗ ∗ 0 ∗◦ ∗ ∗ ∗ 0 0 ∗◦ ∗ ∗ 0 0 0 ∗◦ ∗ 0 0 0 0 ∗◦

¨uberf¨uhrt.

Aus der urspr¨unglich gegebener Matrix A erzeugt das vorige Verfahren eine obere DreiecksmatrixU mitU =Mn−1· · ·M1AQ. Hierbei istQ eine Permutationsmatrix undM1, . . . , Mn−1 sind obere Dreiecksmatrizen mit Einsen auf den Diagonalen. Die MatrixMi hat die Form

Mi:=

 1

. ..

1 ci+1,i 1

... . ..

ci+1,n 1

Somit istA=LU P mitL=M1−1· · ·Mn−1−1 undP =Q−1. Die MatrixP ist lediglich Transposition von Q (warum?). Das Produkt M1−1· · ·Mn−1−1 ist als Produkt von

(21)

unteren Dreicksmatrix mit Einsen auf den Diagonale wieder eine untere Matrix mit Einsen auf der Diagonale. Dies Produkt l¨asst sich durch iterative Berechnung der ProdukteM1−1· · ·Mi−1 ausrechnen.

Man setzt am AnfangL:=In und verwendet iterativ die ZuweisungenL:=LMi−1. Hierbei ist

Mi :=

 1

. ..

1

−ci+1,i 1 ... . ..

−ci+1,n 1

Somit entspricht die MatrixzuweisungL:=LMi−1 der Zuweisung L∗,i:=L∗,i−(ci+1,iL∗,i+1+· · ·ci+1,nL∗,n).

f¨ur diei-te Spalte der Matrix i.

Man sieht, dass man im VerfahrenO(n3) Operationen macht:n−1 Iterationen mit O(n2) Operationen pro Iteration.

Bemerkung 2.7 (Anwendungen vonLU P). Berechnung von (L, U, P) ausA kann als ein Vorverarbeitungsschritt zur L¨osung von SystemenAx=bmit verschiedenen bbenutzt werden. Dennb=A−1x=P−1U−1L−1b. Multiplikation mitL−1undU−1 ben¨otigt jeweilsO(n2) arithmetische Operationen, Multiplikation mitP−1 ist ledig- lich Vertauschen von Komponenten und ben¨otigt keine arithmetischen Operationen.

Somit geht das L¨osen vonAx=bnach der Vorerarbeitung mitO(n2) arithmetischen Operationen.

Im Vergleich zum direkten Invertieren der Matrix A−1 ist die LU P-Zerlegung kein effizienteres Verfahren (dennA−1 kann ebenfalls mit Hilfe vonO(n3) arithmetischen Operationen berechnet werden), dieLU P-Zerlegung wird aber oft vorgezogen. Einer der Gr¨unde ist: die in O-Notation versteckte Konstante ist besser.

2.4 Numerische Stabilit¨at der L¨osung von linearen Gleichungssy- stemen

Istk · keine Norm auf Rn so definieren wir die sogenannte Operatornorm kAk:= sup{kAxk : kxk ≤1}.

aufRn×n. Man kann sich vergewissern, dass die Operatornorm tats¨achlich eine Norm auf Rn×n ist und dass daf¨ur die Ungleichungen kAxk ≤ kAkkxk und kABk ≤ kAkkBkf¨ur alle A, B∈Rn×n und alle x∈Rn erf¨ullt sind. Ist A∈Rn×n regul¨ar, so f¨uhren die Konditionszahlκ(A) von A als

κ(A) =kAk · kA−1k ein.

(22)

Wir fixieren im folgenden f¨urRn die Euklidische Norm k(x1, . . . , xn)k:=

q

x21+· · ·+x2n.

(Resultate dieses Abschnitts gelten aber auch bzgl. einer allgemeinen Norm aufRn.) Bemerkung 2.8 (Geometrische Bedeutung der Konditionszahl). Wenn wir als Bn:={x∈Rn : kxk ≤1}die Einheitskugel bezeichnen, so ist kAk der Umkugelra- dius des EllipsoidsEA:={Ax : x∈Bn}. Ist Aregul¨ar so istkA−1k−1 die Inkugel- radius von EA. Die Konditionszahl κ(A) = kAkkA−1k ist somit das Verh¨altnis des

Umkugel- und Inkugelradius vonEA.

Zur Konditionszahl und Absch¨atzung f¨ur gest¨orte lineare Gleichungssysteme vgl.

[Lan69, LT85].

Theorem 2.9 (Relativer Fehler bei St¨orung der rechten Seite). Sei A ∈ Rn×n regul¨ar und seien b ∈ Rn\ {0} und ∆b ∈ Rn. Sei x die L¨osung von Ax = b und x+ ∆x die L¨osung vonAx=b+ ∆b. Dann ist x6= 0 und es gilt

k∆xk

kxk ≤κ(A)k∆bk kbk

Beweis. Man hat k∆xk =kA−1∆bk ≤ kA−1k · k∆bk. Es gilt kbk =kAxk ≤ kAk · kxk. Ist b 6= 0, dann istx 6= 0 da die Matrix A regul¨ar ist. Die Kombination der beiden vorigen Ungleichungen ergibt die Behauptung.

Nun wollen wir analog absoluten und relativen Fehler bei der St¨orung der linken Seite absch¨atzen. Daf¨ur werden wir die folgende Hilfsaussage ben¨otigen.

Lemma 2.10 (Geometrische Reihen f¨ur Matrizen). Sei B ∈ Rn×n mit kBk < 1.

Dann istIn−B regul¨ar und es gilt

(In−B)−1 =

X

i=0

Bi

(Das heißt, f¨ur Sk:=Pk

i=0Bi gilt k(In−B)−1−Skk →0 f¨urk→ ∞.)

Beweis. In−Bist regul¨ar, denn sonst w¨urde man einx6= 0 mit (In−B)x= 0 finden.

Das ergibtBx=x. OBdA k¨onnen wirkxk= 1 annehmen. Das ergibt kBk ≥1, was der AnnahmekBk<1 widerspricht.

Es gilt

k(In−B)−1

k

X

i=0

Bik ≤ k(In−B)−1k · kIn−(In−B)

k

X

i=0

Bik.

Hierbei ist

In−(In−B)

k

X

i=0

Bi =In−(In−Bk+1) =Bk+1. Man hat

kBk+1k ≤ kBkk→0 f¨urk→ ∞.

(23)

Theorem 2.11(Relativer Fehler bei St¨orung der linken Seite). SeienA,∆A∈Rn×n und b∈Rn\ {0}. SeiA regul¨ar und sei

k∆Ak kAk < 1

κ(A).

Dann ist die MatrixA+ ∆A ebenfalls regul¨ar und, f¨ur die L¨osungen x vonAx=b und x+ ∆x von (A+ ∆A)x=b gilt die folgende Absch¨atzung.

k∆xk

kxk ≤ κ(A)2k∆AkkAk 1−κ(A)k∆AkkAk .

Beweis. Wir zeigen zuerst, dassA+ ∆A regul¨ar ist. Daf¨ur reicht es zu zeigen, dass A−1(A+ ∆A) regul¨ar ist. Man hatA−1(A+ ∆A) =In−B mitB =−A−1∆A. Nach dem Lemma 2.10 reicht f¨ur die Regularit¨atkA−1∆Ak<1 aus.

Die Voraussetzung ergibtkA−1∆Ak ≤ kA−1k · k∆Ak<1.

(a): Ausx =A−1b undx+ ∆x= (A+ ∆A)−1bfolgt

k(A+ ∆A)−1b−A−1bk ≤ k(A+ ∆A)−1−A−1k · kbk.

Man hatA+ ∆A=A(In+A−1∆A). Das ergibt (A+ ∆A)−1= (In+A−1∆A)−1A−1, woraus wir

k(A+ ∆A)−1b−A−1bk ≤ k(In+A−1∆A)−1k · kA−1k · kbk erhalten. Mit der Verwendung von Lemma 2.10 erhalten wir die Absch¨atzung

k(In+A−1∆A)−1−Ink=k(In−B)−1−Ink

=k

X

i=0

Bi−Ink

=k

X

i=1

Bik

X

i=1

kBki

X

i=1

(kA−1k · k∆Ak)i

= kA−1k · k∆Ak 1− k∆Ak · kA−1k

= κ(A)k∆AkkAk 1−κ(A)k∆AkkAk

Des Weiteren giltkbk=kAxk ≤ kAk·kxk.Die Kombination der oben hergeleiteten Ungleichungen ergibt die Behauptung.

(24)

Theorem 2.12 (Relativer Fehler bei St¨orung der linken und rechten Seite). Sei A∈Rn×n regul¨ar sei ∆A∈Rn×n Matrix mit

k∆Ak kAk ≤ 1

κ(A).

sei b∈Rn\ {0} und ∆b∈Rn. Dann gilt: die Matrix A+ ∆A is regul¨ar und f¨ur die L¨osung x von Ax= b und die L¨osung x+ ∆x von (A+ ∆A)x =b+ ∆b gilt die Absch¨atzung

k∆xk

kxk ≤ κ(A)2k∆AkkAk

1−κ(A)k∆AkkAk +κ(A)k∆bk kbk . Beweis. Folgt aus Theorem 2.9 und Theorem 2.11 (Aufgabe).

(25)

3 Algorithmen der Analysis

3.1 Newton-Verfahren zur L¨osung von nichtlinearen Gleichungen Theorem 3.1. Sei f :U →R Funktion auf einer offenen Teilmenge U von Rund sei x ∈ U eine Nullstelle von f (d.h., f(x) = 0). Angenommen, es existiert eine UmgebungI = (x−ρ, x+ρ)⊆U vonx mitρ >0derart, dass in dieser Umgebung die Funktion f zweimal differenzierbar ist und dar¨uber hinaus die folgenden zwei Bedingungen erf¨ullt sind:

• F¨ur ein a >0 gilt |f0(x)| ≥af¨ur alle x∈I.

• F¨ur ein b >0 gilt |f00(x)| ≤bf¨ur alle x∈I.

Seiρ0 := min{ρ,ab} und sei x0 ∈(x−ρ0, x0). Dann existiert eine eindeutige Folge (xk)k∈N mit Werten aus (x−ρ0, x0), in welcher xk mit Hilfe von xk−1

aus der Gleichung

f(xk−1) +f0(xk−1)(xk−xk−1) = 0

bestimmt ist. Die Folge (xk)k∈N konvergiert gegen x mit der Konvergenzgeschwin- digkeit

|xk−x| ≤ρ0

|x0−x| ρ0

2k

. (3.1)

Beweis. Der Wert x0 liegt in (x−ρ0, x−ρ0) nach der Voraussetzung. Angenom- men, f¨ur ein k∈Nist bereits gezeigt worden, dass x0, . . . , xk−1 eindeutig durchx0 bestimmt sind und im Intervall (x−ρ0, x+ρ) liegen. Wir zeigen, dass nun auch xk in (x−ρ0, x−ρ0) liegt und eindeutig durch x0 bestimmt ist.

Die Relation f(xk) + f0(xk)(xk −xk−1) = 0 bestimmt xk durch xk−1, da diese Relation als

xk=xk−1− f(xk) f0(xk) umformuliert werden kann. Aus der Taylor-Formel folgt

0 =f(x) =f(xk−1) +f0(xk−1)(x−xk−1) +1

2f00(ξ)(x−xk−1)2. f¨ur einξ zwischen x und xk−1. Wir erhalten also

f0(xk−1)(xk−x) =f0(xk−1(xk−xk−1+xk−1−x)

=f0(xk−1)(xk−xk−1)

| {z }

=−f(xk−1)

+ f0(xk−1)(xk−1−x)

| {z }

=f(xk−1)+12f00(ξ)(x−xk−1)2

= 1

2f00(ξ)(x−xk−1)2.

(26)

Es folgt nun

|xk−x|= 1

2|f00(ξ)|

| {z }

≤b

· 1

|f0(xk−1)|

| {z }

1a

· |xk−1−x|2

| {z }

≤ρ20

≤ b

2a|xk+1−x|2

≤ b 2aρ0

| {z }

≤1

·ρ0

≤ρ0

Die Absch¨atzung |xk−x| ≤ 2ab |xk−1−x|2, die wir oben verwendet haben impli- ziertρ0|xk−x| ≤ |xk−1−x|2. Wir k¨onnen nun die Absch¨atzung der Konvergenz- geschiwndigkeit durch Induktion ¨uber k herleiten. F¨ur k= 0 gilt die Absch¨atzung offensichtlich. Aus

|xk−1−x| ≤ρ0

|x0−x| ρ0

2k−1

.

mitk∈Nfolgt nun

|xk−x| ≤ 1

ρ0|xk−1−x|2

= 1 ρ0 ρ0

|x0−x| ρ0

2k−1!2

0

|x0−x| ρ0

2k

Bemerkung 3.2. Die Absch¨atzung der Konvergenz zeigt, dass man in der k-ten Iteration Ω(2k) Nachkommastellen vonxbestimmen kann. Mit anderen Worten, die Anzahl der ermittelten Nachkommastellen verdoppelt sich in etwa mit jeder neuen Iteration. Das Newton-Verfahren konvergiert also extrem schnell. Die Voraussetzun- gen sind daf¨ur aber ziemlich restriktiv: der Startpunkt x0 muss nah genug an der

Startl¨osung sein.

Bemerkung 3.3. Newton-Verfahren kann zur Minimierung konvexer Funktionen verwendet werden, da f¨ur konvexe Funktion g : U → R, im Punkt x genau dann ein Minimum erreicht wird, wenng0(x) = 0 erf¨ullt ist. Also k¨onnen wir Newtonver- fahren f¨urf =g0 anwenden (wenng dreimal differenzierbar ist).

(27)

4 Grundlegende Komplexit¨ atsklassen

4.1 Rechenprobleme

IstS eine endliche Menge undn∈N0, so nennen wir Elemente vonSn Strings der L¨angen ¨uber dem Alphabet S. Das String der L¨ange 0 wird als bezeichnet. Oft schreiben wir x1· · ·xn ∈ Sn an der Stelle von (x1, . . . , xn) ∈ Sn. Wir f¨uhren die Menge

S := [

n∈N0

Sn

aller Strings ¨uber dem AlphabetS ein. Die L¨angeneines Stringsx=x1. . . xn∈S wird als |x|bezeichnet. F¨ur zwei Strings x = (x1, . . . , xn) und y = (y1, . . . , yk) aus S heißt das Stringxy = (x1, . . . , xn, y1, . . . , yk)∈S dieVerkettung oder Konkate- nation vonx und y.

Elemente vonx∈ {0,1} heißen Bit-Strings und die Zeichen vonxheißen Bits. Wir legen {0,1} als das Standardalphabet fest. Jedes andere endliche Alphabet kann durch {0,1} ersetzt werden. Eine String der L¨ange n ¨uber dem Unicode-Alphabet UTF-16 U mit |U| = 216 = 65536 kann durch das Kodieren eines jeden Zeichen mit 16 Bits zu einem String der L¨ange 16n uberf¨¨ uhrt werden. Man hat also eine Bijektion

{0, . . . ,216−1} ↔ {0,1}16 und dementsprechend auch eine nat¨urliche Einbettung

{0, . . . ,216−1},→ {0,1}.

des Unicode-Alphabets in das Alphabet der Bit-Strings. Das Unicode-Alphabet enth¨alt die ¨ublichen Buchstaben aus den Alphabeten verschiedener Sprachen, Satz- zeichen, Ziffern, Zeichen f¨ur arithmetische Operationen usw. In{0, . . . ,216−1} sind also beliebige Strings/Texte mit ¨ublichen Zeichen und Symbolen enthalten, die wir nun als alle als Bit-Strings interpretieren k¨onnen. In der Komplexit¨atstheorie inter- pretiert man also Strings aus{0,1}als beliebige potenziellen Eingaben/R¨uckgaben verschiedener Rechenprobleme (unabh¨angig von der Natur des zugrundeliegenden Rechenproblems).

In Mathematik arbeiten wir mit verschiedenen Klassen von ‘endlich beschreibbaren’

mathematischen Objekte wie etwa

Z,Zn,Zm×n,Q,Qn,Qm×n (4.1) mitn, m∈Nusw. Denn nat¨urlich kann man eine ganze ZahlenZdurch die Angabe des Vorzeichnen und der folge ihrer Ziffer in einem Stellenwertsystem beschreiben (zur Basis 10, aber auch zur Basis 2 oder einer anderen Basis). Wir k¨onnen als Elemente von Z als Strings ¨uber {+,−,0, . . . ,9}, wie 17 oder −203 oder +7. Da {+,−,0, . . . ,9} ein Teil des Unicode-Alphabets und wir das Unicode Alphabet in {0,1}eingebettet haben, ist f¨ur uns jede Zahl ausZ‘datentechnisch’ nichts anderes als ein Bit-Strings. Bei Benutzung eines Stellewert-Systems zur einer festen Basis b >0 wird z∈Zmit Hilfe von Θ(log|z|) kodiert.

(28)

F¨ur ein gegebenes mathematischen Objekt x wie oben bezeichnen wir durchxxy∈ {0,1} die (gew¨ahlte) Kodierung von x. Gelegentlich brauchen wir auch die so- genannte Un¨ardarsellung ganzer Zahlen. F¨urk∈N0, heißt

1k= 1· · ·1

| {z }

kmal

dieUn¨ardarstellung vonk. (Die Un¨arkodierung ist die Kodierung aus der Strichliste).

Da man eine Folge von ganzen Zahlen durch mit Verwendung von Trennzeichen, wird nun klar, dass man nat¨urliche Kodierungen der Elementen der in (4.1) aufgelisteten Mengen fixieren kann.

Mit der Ber¨ucksichtigung der obigen Kommentaren ¨uber die Interpretation von Bit- Strings k¨onnen wir nun endlich den Begriff einer Rechenaufgabe (den wir am Anfang des Teils 1 dieses Kurses nur informell beschrieben hatten) mathematisch exakt defi- nieren. Da eine Rechenaufgabe eine vorgegebene Eingagabe/R¨uckgabe-Relation ist, und wir nun die Eingaben und R¨uckgaben formal als Elemente von {0,1} definie- ren, ist eine Rechenaufgaben eine bin¨are Relation R ⊆ {0,1} × {0,1} f¨ur paare von Bit-Strings. Ist (x, y)∈Rso sagt, man yist eine R¨uckgabe zur Eingabexbzgl.

des RechenproblemsR.

Hier einige triviale Beispiele:

• Ein RechenproblemeR, das mit Worten so beschrieben wird: falls die Eingabe kein leeres String x ist, so entsteht die R¨uckgabe y durch das L¨oschen eines Zeichens in x(ohne Vorgabe welches Zeichen das sein soll).

R={(x1. . . xn, x1. . . xi−1xi+1. . . xn : n∈N,1≤i≤n, x1, . . . , x∈ {0,1}}.

• Hier

R={(x1. . . xn, x2. . . xn : n∈N,1≤i≤n, x1, . . . , x∈ {0,1}}

ein ¨ahnliches Problem, mit dem Unterschied, dass man das erste Zeichen l¨oscht.

Die R¨uckgabe y ist in diesem Fall im Unterschied zum vorigen Problem ein- deutig durch die Eingabe bestimmt.

Nat¨urlich existieren auch zahlreiche nichttriviale, wichtige Rechenaufgaben, darunter sehr viele im Kontext der mathematischen Berechnungen.

Eine Rechenaufgabe R f¨ur eine Eingabe x ∈ {0,1} zu l¨osen heißt zu entscheiden, ob f¨ur dieses x eine zugeh¨orige R¨uckgabe y ∈ {0,1} mit (x, y) ∈ R existiert und gegebenenfalls eine solche R¨uckgabey zu bestimmen. Man sagt, ein Algorithmus A l¨ost die RechenaufgabeR, wennAf¨ur jede Eingabex∈ {0,1} die AufgabeR l¨ost.

Berechnung einer Funktion f : {0,1} → {0,1} (auf Strings in Strings) und Be- antwortung einer ja/nein Frage f¨ur ein String sind nat¨urlich auch Rechenaufgaben.

Bei einer Funktion f wie oben ist f(x) die R¨uckgabe f¨ur x ∈ {0,1} (im Fall von Funktionen existiert also die R¨uckgabe f¨ur jede Eingabe und ist eindeutig). Die ja/n- ein Aufgaben werden in der Komplexit¨atstheorie meistens als so-genannte Sprachen modelliert. Eine Sprache ist lediglich eine beliebige Teilmenge L von {0,1}. Der

Referenzen

ÄHNLICHE DOKUMENTE

Für die Beurteilung von abweichenden Situationen wird angenommen, dass sich die Störwirkung in Abhängigkeit der Anzahl Stop &amp; Go Ereignisse verändert. Bei einer minimal

(3+4 P.) Geben Sie die definierenden Eigenschaften einer Norm an und entscheiden Sie, ob durch die folgenden Ausdr¨ ucke eine Norm auf M n (K) definiert wird.. Eine Begr¨ undung

(25%) Zeigen Sie, dass ein Graph G = (V, E) genau dann ein Cograph ist, wenn f¨ur je zwei Knoten x, y ∈ V , die in derselben Zusammenhangskom- ponente von G liegen, ein Weg der

• &lt; ist linear, d.h. zwischen zwei beliebigen Elemente existiert immer noch ein weiteres.. a) Welche der S¨ atze sind erf¨ ullt in den Strukturen R &lt; bzw.. Welche der S¨

L¨ osen Sie das folgende ( bereits in Zeilenstufenform vorliegende ) Gleichungssystem ¨ uber IF 3 , d.h.. Laza: Lineare Algebra individuell Online-Version

[r]

„ Siehe Bild: Für jeden Knoten sind alle Daten links kleiner und alle Daten rechts größer als die Daten des

  Felder mit einem Namen zzz, die den Access-Type exposedField haben, haben implizit den Namen zzz_changed, wenn sie als Ausgabe-Feld verwendet werden, und den Namen set_zzz,