178 66 4MB
German Pages x, 348 Seiten: Illustrationen; 235 x 155 mm, 545 g [357] Year 2014
Mathematik für Informatiker
Steffen Goebbels • Jochen Rethmann
Mathematik für Informatiker Eine aus der Informatik motivierte Einführung mit zahlreichen Anwendungsund Programmbeispielen
Steffen Goebbels Jochen Rethmann Fachbereich Elektrotechnik und Informatik Hochschule Niederrhein Krefeld, Deutschland
ISBN 978-3-642-55339-4 DOI 10.1007/978-3-642-55340-0
ISBN 978-3-642-55340-0 (eBook)
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar. Springer Vieweg © Springer-Verlag Berlin Heidelberg 2014 Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Jede Verwertung, die nicht ausdrücklich vom Urheberrechtsgesetz zugelassen ist, bedarf der vorherigen Zustimmung des Verlags. Das gilt insbesondere für Vervielfältigungen, Bearbeitungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften. Planung und Lektorat: Dr. Andreas Rüdinger, Barbara Lühker Gedruckt auf säurefreiem und chlorfrei gebleichtem Papier Springer Vieweg ist eine Marke von Springer DE. Springer DE ist Teil der Fachverlagsgruppe Springer Science+Business Media. www.springer-vieweg.de
Vorwort Wenn Sie gerade in den ersten Semestern eines Informatik-Studiums sind und sich fragen, warum Sie so viel Mathe lernen m¨ ussen, obwohl Sie doch Informatik studieren, dann halten Sie genau das richtige Buch in den H¨ anden. Ihre Frage ist sehr berechtigt, denn in der Software-Entwicklung, beim Design von Mensch-Maschine-Schnittstellen, bei Betriebssystemen, beim Planen und Betreiben von Computer-Netzwerken, beim Compilerbau, bei Programmiersprachen oder bei rechtlichen und gesellschaftlichen Aspekten der Informatik ben¨ otigt man so gut wie keine Mathematik. Das Argument, Mathematik schult das abstrakte Denken, ist zu fadenscheinig, als dass es wirklich Motivation w¨ are. Motivation ist aber f¨ ur ein erfolgreiches Lernen extrem wichtig. Wir wollen daher in diesem Buch genau in die Mathematik einf¨ uhren, die in den Kernf¨ achern der Informatik ben¨ otigt wird. Die Gesellschaft f¨ ur Informatik listet in Ihren Empfehlungen f¨ ur Informatik-Studieng¨ ange folgende Module auf, die auf jeden Fall unterrichtet werden sollen: Theoretische Informatik, Algorithmen und Datenstrukturen, Rechnerstrukturen, Rechnernetze, Webbasierte Anwendungen, Betriebssysteme, Verteilte Systeme, Datenbanken und Informationssysteme, Wissensbasierte Systeme sowie Sicherheit und Sicherheitstechniken. Wir haben uns diese Module angesehen und die wesentlichen Teile der daf¨ ur ben¨ otigten Mathematik in diesem Buch zusammengestellt. Andererseits ist die Informatik ein Dienstleistungsfach, das f¨ ur andere Disziplinen Software entwickelt. Die Probleme und Fragestellungen kommen aus anderen Wissensgebieten, die L¨ osungen und Programme aus der Informatik: Bio-, Chemo-, Geo-, Medizin-, Medien-, Sozio- oder Wirtschaftsinformatik. Es ist nicht Ziel dieses Buches, s¨ amtliche Mathematik f¨ ur alle Wissensgebiete bereit zu stellen. Dann m¨ usste man die Mathematik in der vollen Breite und Tiefe behandeln, da jedes dieser Wissensgebiete andere Teile der Mathematik ben¨ otigt. Wir beginnen mit der Bool’schen-Algebra, mit der wir ein Addierwerk bauen. Damit eng verwandt sind Aussagen- und Pr¨ adikatenlogik, die in ihrer elementaren Form beim Programmieren ben¨ otigt werden, aber auch die Grundlage f¨ ur Programmiersprachen wie Prolog sind. Dann sehen wir uns Abbildungen (Funktionen) an, die wir mittels Relationen einf¨ uhren. Das Konzept der Relationen ist die Grundlage f¨ ur die heute u ¨ berwiegend eingesetzten relationalen Datenbanken. Wie die unterschiedlichsten Probleme mittels mathematischer Modelle gel¨ ost werden k¨ onnen, sehen wir dann im Kapitel Graphentheorie. Viel Platz nimmt auch die Betrachtung der Zahlen, ihrer Rechenregeln (Algebra) und ihrer Darstellung im Computer ein. Die Absicherung von WLAN, die Authentifizierung der Server beim Client sowie die Verschl¨ usselung der Daten bei der ¨ Ubertragung vom Web-Browser zu einem Bank-Server sind Beispiele, in denen Primzahlen f¨ ur die Verschl¨ usselung eingesetzt werden. Wir nehmen das zum
vi
Vorwort
Anlass, um zu zeigen, wie schwere Probleme wie Primzahltests, die nur mit lang laufenden Programmen gel¨ ost werden k¨ onnen, sich mittels Randomisierung oft enorm beschleunigen lassen. Dazu machen wir einen Exkurs in die Wahrscheinlichkeitsrechnung. F¨ ur weitere Laufzeitabsch¨ atzungen, die wir f¨ ur einige Sortierverfahren durchf¨ uhren, sehen wir uns Folgen und Reihen an. Zum Vergleich von Laufzeiten nutzen wir Grenzwerte, bei deren Berechnung uns die Differenzial¨ und Integralrechnung hilft. Uber Codes und speziell lineare Codes motivieren wir im letzten Kapitel die wesentlichen Ergebnisse der Linearen Algebra, also der Vektorrechnung. Dazu geh¨ oren insbesondere S¨ atze u ¨ber lineare Gleichungssysteme, die elementarer Bestandteil der meisten mathematischen Modelle sind. F¨ ur die Computer-Grafik betrachten wir schließlich, wie die Lineare Algebra zum Drehen und Verschieben von Objekten benutzt werden kann. Wir setzen die Mittelstufenmathematik als bekannt voraus. Falls Sie Ihre Erinnerungen (z. B. an die Bruchrechnung) auffrischen m¨ ochten, empfehlen wir Gellrich und Gellrich (2003). Auf der Webseite zum Buch, http://www.springer-spektrum.de/978-3-64255339-4, finden Sie die L¨ osungen zu allen gestellten Aufgaben. F¨ uhlen Sie sich ermutigt, selbst u arungen ¨ber einige Aussagen nachzudenken, bevor Sie unsere Erkl¨ lesen. Nur indem Sie selbst Mathematik machen“, lernen Sie sie richtig. Außer” dem werden Sie so Erfolgserlebnisse bekommen. Dann macht Mathematik Spaß!
Dank Wir m¨ ochten unseren Kollegen in Krefeld und D¨ usseldorf danken, die uns bei der Erstellung des Buchs unterst¨ utzt haben. Besonderer Dank gilt Prof. Dr. Christoph Dalitz, Dr. habil. Frank Gurski, Prof. Dr. Regina Pohle-Fr¨ ohlich, Prof. Dr. Ulrich Tipp, Prof. Dr. Peer Ueberholz sowie der Stadt Krefeld, die uns Daten f¨ ur ein Stadtmodell zur Verf¨ ugung gestellt hat. Zum Schluss m¨ ochten wir uns noch ganz besonders bei Herrn Dr. R¨ udinger und Frau L¨ uhker von Springer-Spektrum bedanken, die das Buchprojekt erm¨ oglicht haben und uns mit professioneller Hilfe zur Seite standen.
Hier verwendete Programmiersprachen Wir werden einige Programmbeispiele in der Programmiersprache C angeben. Um diese zu verstehen, ben¨ otigen Sie ganz elementare Kenntnisse in einer Sprache, die eine C-¨ ahnliche Syntax wie beispielsweise Java, C# oder C++ hat. Wenn Sie noch nicht programmiert haben, dann empfehlen wir die ersten Seiten des auch im Internet kostenlos verf¨ ugbaren Buchs Wolf (2009).
Vorwort
vii
Algorithmen sind Kochrezepte, die eindeutig beschreiben, wie ein Problem gel¨ ost werden kann. Solche Algorithmen werden wir halb-formal beschreiben. Dazu benutzen wir eine Art Programmiersprache, sogenannten Pseudo-Code, deren Anweisungen in der Regel wie in C von oben nach unten abgearbeitet wer¨ den. Anderungen in dieser Reihenfolge bewirken die folgenden Schl¨ usselworte: if Bedingung then Anweisungen A else Anweisungen B Ist die Bedingung erf¨ ullt, dann werden die unter dem if einger¨ uckten Anweisungen A ausgef¨ uhrt. Ist die Bedingung nicht erf¨ ullt, dann werden die Anweisungen B abgearbeitet. Die else-Anweisung zusammen mit den Anweisungen B ist optional. for Variable := Start- bis Endwert do Anweisungen Die Anweisungen werden in der for-Schleife f¨ ur jeden Wert der Variable vom Startwert bis zum Endwert in dieser Reihenfolge ausgef¨ uhrt. for all Element aus Menge do Anweisungen Bei dieser for-Schleife werden die Anweisungen f¨ ur alle Elemente einer Menge aufgerufen, wobei die Reihenfolge der Aufrufe nicht festgelegt ist. while Bedingung do Anweisungen repeat Anweisungen until Bedingung Die Anweisungen werden in diesen Programmfragmenten so lange immer wieder ausgef¨ uhrt, wie es die Bedingung vorgibt. Bei der kopfgesteuerten while-Schleife wird zuerst die Bedingung gepr¨ uft. Ist sie erf¨ ullt, werden die Anweisungen ausgef¨ uhrt. Dagegen werden bei der fußgesteuerten repeat-until-Schleife die Anweisungen vor der Pr¨ ufung der Bedingung abgearbeitet. Diese Schleife wird im Gegensatz zur while-Schleife solange ausgef¨ uhrt, bis die Bedingung wahr wird. Wollen wir einen Programmteil als Prozedur (als Funktion) realisieren, die wir mit Parametern aufrufen k¨ onnen und die daraus einen R¨ uckgabewert berechnet, so definieren wir die Prozedur u ¨ ber procedure Prozedurname(Variable 1, Variable 2, . . . ) Anweisungen return R¨ uckgabewert
viii
Vorwort
Nach Ausf¨ uhrung einer return-Anweisung ist die Prozedur beendet. Die Prozedur wird im Programm anhand des Namens aufgerufen, wobei in den Klammern konkrete Werte oder Variablen des aufrufenden Programmteils stehen: Ergebnis := Prozedurname(Wert 1, Wert 2,. . . ) Wir haben in diesen Programmschnipseln die Zuweisung := verwendet. In der Mathematik ist x = x + 1 eine stets falsche Aussage, da auf der linken Seite ein anderer Wert als auf der rechten Seite steht. In Algorithmen sieht man dagegen h¨ aufig solche Ausdr¨ ucke (z. B. bei C-Programmen). Gemeint ist hier kein Vergleich sondern die Zuweisung ¨ andere den Wert von x zum Wert x + 1“, ” die wir in den halbformalen Algorithmen mit := vom Vergleich unterscheiden.
Inhaltsverzeichnis Vorwort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
v
Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mengen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.1 Mengen und Schreibweisen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.2 Mengenoperationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Logik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.1 Rechnen mit Nullen und Einsen: Boole’sche Algebra . . . . . . . . . . 1.2.2 Aussagenlogik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.3 Pr¨ adikatenlogik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.4 Sprache der Mathematik und Beweise . . . . . . . . . . . . . . . . . . . . . . 1.2.5 Vollst¨ andige Induktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.6 Resolutionskalk¨ ul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Relationen und Abbildungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1 Automaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.2 Eigenschaften von Relationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.3 Eigenschaften von Abbildungen . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1 1 1 6 9 9 16 18 20 26 35 41 41 49 53
1 1.1
1.2
1.3
2 2.1 2.2 2.3
2.4
2.5 3 3.1 3.2
3.3
Graphen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Einf¨ uhrung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Graphen und ihre Darstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Grundlegende Probleme in gerichteten Graphen . . . . . . . . . . . . . . . . . . 66 2.3.1 Tiefensuche und ihre Anwendungen . . . . . . . . . . . . . . . . . . . . . . . . 67 2.3.2 Erreichbarkeit und starker Zusammenhang . . . . . . . . . . . . . . . . . . 72 2.3.3 K¨ urzeste Wege . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Grundlegende Probleme in ungerichteten Graphen . . . . . . . . . . . . . . . . 90 2.4.1 B¨ aume und minimale Spannb¨ aume . . . . . . . . . . . . . . . . . . . . . . . . . 90 2.4.2 Bipartite und planare Graphen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 2.4.3 Euler-Touren und Hamilton-Kreise . . . . . . . . . . . . . . . . . . . . . . . . . 105 Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Zahlen und Strukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 Einf¨ uhrung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 Ganze Zahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 3.2.1 Nat¨ urliche und ganze Zahlen, Gruppen und Ringe . . . . . . . . . . . 116 3.2.2 Stellenwertsysteme und Darstellung ganzer Zahlen im Computer 122 3.2.3 Primzahlen und Teiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 3.2.4 Abz¨ ahlen: Kombinatorik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 Wahrscheinlichkeiten und Primzahltests . . . . . . . . . . . . . . . . . . . . . . . . . 146 3.3.1 Diskrete Wahrscheinlichkeitsrechnung . . . . . . . . . . . . . . . . . . . . . . 146 3.3.2 Primzahltests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
x
3.4 3.5 3.6
Inhaltsverzeichnis
3.7
Rationale Zahlen und K¨ orper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RSA-Verschl¨ usselung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Reelle Zahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6.1 Von den Br¨ uchen zu den reellen Zahlen . . . . . . . . . . . . . . . . . . . . . 3.6.2 Einige reelle Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.6.3 Darstellung reeller Zahlen in verschiedenen Stellenwertsystemen 3.6.4 Darstellung reeller Zahlen im Computer . . . . . . . . . . . . . . . . . . . . ¨ Abz¨ ahlbarkeit und Uberabz¨ ahlbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . .
164 167 172 172 175 187 195 200
4 4.1 4.2 4.3 4.4 4.5 4.6 4.7
Ausgew¨ ahlte Kapitel der Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . Folgen und Landau-Symbole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Reihen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Laufzeit rekursiver Algorithmen: Master-Theorem . . . . . . . . . . . . . . . . Konvergenz von Folgen und Reihen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Analyse des randomisierten Quicksort . . . . . . . . . . . . . . . . . . . . . . . . . . . Stetigkeit und Differenzierbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Integral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
203 205 211 217 225 241 244 263
5 5.1 5.2 5.3 5.4
Ausgew¨ ahlte Kapitel der Linearen Algebra . . . . . . . . . . . . . . . . . Blockcodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lineare Codes und Vektorr¨ aume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Informationsbits und Dimension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Matrizen und Gleichungssysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.1 Matrizen und die Generatormatrix eines linearen Codes . . . . . . . 5.4.2 Gleichungssysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.3 Inverse Matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Orthogonalit¨ at, Fehlererkennung und verlustbehaftete Kompression . Lineare Abbildungen und Vektorgrafik . . . . . . . . . . . . . . . . . . . . . . . . . .
273 273 277 284 293 294 299 311 316 332
5.5 5.6
Literaturverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
1 Grundlagen
¨ Ubersicht 1.1 1.2 1.3
Mengen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Logik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Relationen und Abbildungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1
1 9 41
Mengen
Beim Programmieren besch¨ aftigen wir uns einerseits mit Datenstrukturen und andererseits mit Algorithmen, die auf diesen Datenstrukturen arbeiten. In der Mathematik ist das ¨ ahnlich. So werden beispielsweise Arrays (zusammenh¨ angende Speicherbereiche) f¨ ur Zahlen ben¨ otigt, die in der Mathematik Vektoren oder Matrizen heißen. In einer Matrix gibt es feste Pl¨ atze, denen Zahlen zugeordnet sind. Damit kann die gleiche Zahl an verschiedenen Pl¨ atzen stehen und damit mehrfach vorkommen. Außerdem ist durch die Anordnung eine Reihenfolge der Zahlen vorgegeben. Oft sind aber Reihenfolge und Anzahl unwichtig. Eine Struktur, mit der nur gespeichert“ wird, ob ein Wert vorkommt ” oder nicht, ist die Menge.
1.1.1
Mengen und Schreibweisen
Definition 1.1 (Mengenbegriff von Cantor) Eine Menge M ist eine gedankliche Zusammenfassung von unterscheidbaren Dingen. Diese Dinge heißen die Elemente von M . Diese Definition ist nicht besonders genau, da wir beispielsweise von Dingen“ ” sprechen und nicht erkl¨ aren, was wir genau darunter verstehen. H¨ aufig sind es Zahlen, aber es k¨ onnen auch ganz andere Objekte sein. Was eine gedankliche ” Zusammenfassung“ ist, verraten wir auch nicht, aber Mengen werden in der Regel durch eine in geschweifte Klammern gesetzte Auflistung der Elemente beschrieben. Damit dr¨ ucken die Klammern {“ und }“ die Zusammenfassung ” ” S. Goebbels, J. Rethmann, Mathematik für Informatiker, DOI 10.1007/978-3-642-55340-0_1, © Springer-Verlag Berlin Heidelberg 2014
2
1 Grundlagen
aus. Die Menge der ganzen Zahlen von eins bis sechs wird also als {1, 2, 3, 4, 5, 6} geschrieben. Hat eine Menge kein einziges Element, dann nennen wir sie die leere Menge und schreiben {} oder ∅. Vorsicht: Die Menge {∅} ist nicht leer! Sie hat ein Element, n¨ amlich die leere Menge. Wenn wir zweimal hintereinander W¨ urfeln, dann k¨ onnen wir das Ergebnis u ¨ ber eine Menge von Paaren darstellen: {(1, 1), (1, 2), . . . , (1, 6), (2, 1), (2, 2), (2, 3), . . . , (6, 6)}. Wenn wir dagegen das Ergebnis als Summe der beiden W¨ urfe notieren, ist es Element von {2, 3, . . . , 12}. So werden wir Mengen zur Modellierung in der Wahrscheinlichkeitsrechnung einsetzen. Die Menge der Quadratzahlen ist {1, 4, 9, 16, 25, . . . } = {n2 : n ∈ {1, 2, 3, . . . }}, die Menge der Zweierpotenzen lautet {1, 2, 4, 8, 16, 32, . . . } = {2n : n ∈ {0, 1, 2, 3, . . . }}. Hier haben wir eine weitere Schreibweise verwendet: Wir beschreiben die Elemente mit n2 und 2n , wobei wir dann n weiter spezifizieren. Der Doppelpunkt, f¨ ur den h¨ aufig auch ein senkrechter Strich verwendet wird, wird als wof¨ ur ” gilt“ gelesen. Nun soll n null oder eine nat¨ urliche Zahl sein, also in der Menge N0 := {0, 1, 2, 3, . . . } enthalten sein. Das Zeichen ∈“ bedeutet Element von“. ” ” ur n Damit ist die Menge der Quadratzahlen die Menge aller der Zahlen n2 , wof¨ Element von N := {1, 2, 3, . . . } gilt. Die Mengen der Quadratzahlen und der Zweierpotenzen werden u ¨ber die bereits bekannte Menge der nat¨ urlichen Zahlen definiert. Man bildet gerne neue Mengen mit der Hilfe von bereits definierten Mengen. So kann man auch Mengen mit unendlich vielen Elementen gut beschreiben. Außerdem gibt es mit diesen Mengen keine Existenzprobleme. Anders sieht es beispielsweise bei der Menge aus, die aus allen Mengen besteht. Es l¨ asst sich zeigen, dass diese Allmenge nicht existieren kann, da sonst Widerspr¨ uche entstehen (siehe Aufgabe 1.9 auf Seite 26). Definition 1.1 verbietet die Allmenge aber nicht. Daher spricht man von einem naiven Mengenbegriff. F¨ ur unsere Zwecke reicht er aber v¨ ollig aus. Eine genauere Definition, die auf Axiomen beruht, k¨ onnen Sie aber in (Ebbinghaus, 2003, Kapitel III) nachlesen. Definition 1.2 (Mengenschreibweisen) So wie wir bereits u ∈ V geschrieben haben, um auszudr¨ ucken, dass u Element der Menge V ist, schreiben wir u ∈ V , falls u kein Element von V ist.
1.1 Mengen
3
Zwei Mengen U und V heißen gleich genau dann, wenn sie die gleichen Elemente besitzen, d. h., jedes Element der einen Menge findet sich in der anderen und umgekehrt. Wir schreiben U = V . Gilt dies nicht, so schreiben wir U = V . Dann besitzt eine der Mengen ein Element, das kein Element der anderen ist. Wegen dieser Definition der Gleichheit spielt die Reihenfolge, mit der wir Elemente einer Menge auflisten, keine Rolle. Auch pr¨ uft man nur, ob ein Element vorkommt – nicht wie oft es vorkommt, da die Elemente unterscheidbar sind und damit nur einmal vorkommen k¨ onnen. Damit eignet sich der klassische Mengenbegriff nicht, das mehrfache Enthaltensein eines Elements zu modellieren. Unter der Anzahl der Elemente einer Menge (auch M¨ achtigkeit der Menge) verstehen wir also die Anzahl der verschiedenen Elemente. U heißt Teilmenge von V genau dann, wenn jedes Element von U auch Element von V ist. Wir schreiben U ⊂ V . Offensichtlich ist ∅ ⊂ V , aber auch V ⊂ V ist richtig. Einige Autoren verwenden das Symbol ⊆“ um explizit auszudr¨ ucken, dass Gleichheit gestattet ist. Sie benutzen ” dann ⊂“ nur, wenn U eine echte Teilmenge von V ist, d. h. wenn U ” Teilmenge von V ist, es in V aber mindestens ein Element gibt, das in U nicht enthalten ist. Daf¨ ur finden Sie allerdings auch die Schreibweise U V. Ist U keine Teilmenge von V , so schreiben wir U ⊂ V . Wir k¨ onnen nun zu einer gegebenen Menge V alle Teilmengen betrachten und diese als Elemente einer neuen Menge auffassen. Diese Menge aller Teilmengen von V heißt die Potenzmenge P(V ) von V . P(V ) ist eine Menge von Mengen. Offensichtlich ist ∅ ∈ P(V ) und V ∈ P(V ). Das Komplement einer Menge V ist die Menge mit den Elementen, die in V nicht enthalten sind. Diese Formulierung hat ein Problem: Wir ben¨ otigen eine Grundmenge G, aus der wir diese Elemente nehmen k¨ onnen. Sei also V ⊂ G. Dann ist das Komplement CG V der Menge V hinsichtlich der Grundmenge G definiert u ¨ ber CG V := {u ∈ G : u ∈ V }. Wenn aus dem Zusammenhang die Grundmenge G bekannt ist, dann k¨ onnen wir sie in der Notation auch weglassen. H¨ aufig findet man daher die Schreibweisen V := CV := CG V. Mengen U und V heißen disjunkt oder elementfremd genau dann, wenn sie keine gemeinsamen Elemente besitzen.
4
1 Grundlagen
M¨ ochten wir besondere Elemente aus einer Menge auslesen“, so k¨ onnen ” wir der Menge einen entsprechenden Operator voranstellen. Sind die Elemente beispielsweise der Gr¨ oße nach vergleichbar und unterschiedlich groß, so liefert max V das gr¨ oßte Element, falls es existiert. Es existiert in jedem Fall, wenn die Menge nur endlich viele Elemente hat. Entsprechend bezeichnet min V das kleinstes Element. Dass wir bei Potenzmengen Mengen selbst wieder als Elemente einer Menge auffassen, erscheint merkw¨ urdig. Betrachten wir eine Firma, die n Produkte herstellt (Menge mit n Elementen) und nun B¨ undel aus k Produkten f¨ ur eine Anzahl 0 < k ≤ n verkaufen m¨ ochte: Jedes B¨ undel ist eine Teilmenge mit k Elementen (sp¨ ater werden wir solche Teilmengen Kombinationen von k aus n ” Elementen“ nennen, siehe Kapitel 3.2.4). Jedes B¨ undel ist also eine Teilmenge der Menge der Produkte. Die Menge aller B¨ undelprodukte ist eine Teilmenge der Potenzmenge. Einzig die leere Menge als Element der Potenzmenge w¨ are kein sinnvolles B¨ undelprodukt (sofern die Kunden nicht betrogen werden sollen). Beispiel 1.3 Im Kapitel 2 besch¨ aftigen wir uns intensiv mit Graphen. Diese bestehen aus Knoten, die z. B. durch gerichtete Kanten verbunden sein k¨ onnen. Ist V die Menge der Knoten, so k¨ onnen wir eine gerichtete Kante von einem Knoten u zu einem Knoten v u oglichen ¨ ber ein Paar (u, v) darstellen. Die Menge aller m¨ Kanten werden wir u ¨ ber {(u, v) : u, v ∈ V, u = v} definieren, wobei wir wegen u= v (u ungleich v) keine Kanten von einem Knoten zu sich selbst zulassen. Wir betrachten einen konkreten Graphen mit Knoten V := {a, b, c} und gerichteten Kanten E := {(a, b), (b, a), (c, a)}. In Abbildung 1.1 sind diese Kanten als Pfeile gezeichnet. Das Element (b, a) ist eine Kante, aber (b, c) ist keine Kante, denn (b, a) ∈ E und (b, c) ∈ E. Es ist E ⊂ {(u, v) : u, v ∈ V, u = v} = {(a, b), (a, c), (b, a), (b, c), (c, a), (c, b)}. Das Komplement von E bez¨ uglich der Menge aller m¨ oglichen Kanten G := {(u, v) : u, v ∈ V, u = v} ist die Menge CG E = {(a, c), (b, c), (c, b)}. P(V ) = {∅, {a}, {b}, {c}, {a, b}, {a, c}, {b, c}, V }.
c
a
b
Abb. 1.1 Graph zu Beispiel 1.3
1.1 Mengen
5
Satz 1.4 (Potenzmenge) Eine Menge V mit n Elementen besitzt 2n verschiedene Teilmengen, also hat die zugeh¨ orige Potenzmenge 2n Elemente.
Beweis Wie h¨ aufig in der Informatik benutzen wir einen Entscheidungsbaum. Beim Bilden einer Teilmenge k¨ onnen wir f¨ ur jedes Element von V entscheiden, ob wir es in die Teilmenge aufnehmen oder nicht. Eine abweichende Entscheidung f¨ uhrt zu einer anderen Teilmenge. Die n Entscheidungen f¨ uhren damit zu n arbaum in Abbildung 1.2. den 2 verschiedenen Teilmengen, siehe dazu den Bin¨ (Bei einem Bin¨ arbaum folgen auf jeden Knoten, hier als K¨ astchen gezeichnet, maximal zwei nachgelagerte Knoten. Wir betrachten Bin¨ arb¨ aume auf Seite 33 genauer.)
∋
∋
b U {
∋ ∋
{ ∋
a U
c U {}
b U {b
{c}
c U c U {b}
{b,c}
∋
∋ ∋
c U c U {a}
{ b U {a ∋
∋ ∋
∋
a U
{a,c}
c U c U {a,b}
{a ∋
b U {a,b ∋
c U
=U
{a,b,c}
Abb. 1.2 Entscheidungsbaum zum Auffinden aller 23 Teilmengen U von V := {a, b, c}
¨ Der Uberlieferung nach durfte der Erfinder des Schachspiels als Belohnung f¨ ur seine Erfindung einen Wunsch an seinen K¨ onig ¨ außern. Er w¨ unschte sich Weizenk¨ orner - und zwar so viele, wie sich ergeben, wenn man auf das erste Schachfeld ein Korn legt und dann von Feld zu Feld die Anzahl verdoppelt. Das orner. Der K¨ onig hielt diesen Wunsch sind insgesamt 1 + 2 + 4 + 8 + · · · + 263 K¨ zun¨ achst f¨ ur bescheiden, aber dann kam das b¨ ose Erwachen. Denn wenn wir die Zahlen addieren, erhalten wir 264 − 1 = 18 446 744 073 709 551 615. Die Zahl ur die geometrische Summe, siehe 264 − 1 ergibt sich u ¨ brigens u ¨ ber eine Formel f¨ Seite 34. Was bedeutet nun diese Zahl? Wir treffen die Annahme, dass ein Korn etwa 0,05 Gramm wiegt (das ist unsere Sch¨ atzung, wir sind daf¨ ur aber keine Exorner wiegen dann zusammen 922 337 203 685 477 perten). Alle 264 − 1 Weizenk¨ kg. Ein ISO-Container, der u ¨ blicherweise in der Handelsschifffahrt eingesetzt wird, hat die Maße 12,192 m ×2,438 m ×2,591 m und ein maximales Ladegewicht von 26 630 kg. Wir ben¨ otigen also 34 635 268 632 Container, die zusammen eine L¨ ange von 416 731 552 187 Metern haben. Das Licht legt in einer Sekunde etwa 300 000 km zur¨ uck. Reihen wir also die Container aneinander, so ben¨ otigt das Licht f¨ ur diese Strecke 1389 Sekunden, oder anders gesagt: mehr als 23 Minu-
6
1 Grundlagen
ten. Das Licht ben¨ otigt f¨ ur die Strecke von der Sonne zur Erde nicht einmal 9 Minuten! achst und f¨ ur n = 64 f¨ ur Wir sehen also, dass 2n sehr schnell mit n anw¨ praktische Zwecke bereits viel zu groß ist. Leider f¨ uhren viele Probleme in der Informatik bei naiver L¨ osung zu Programmlaufzeiten, die sich in Abh¨ angigkeit n ussen wir dann nach der Eingabegr¨ oße n des Problems wie 2 verhalten. Hier m¨ geschickteren L¨ osungen suchen.
1.1.2
Mengenoperationen
Wir ben¨ otigen Mengen zur Beschreibung von komplizierten realen Problemen durch Modelle. Beispielsweise werden Ereignisse, deren Eintrittswahrscheinlichkeit berechnet werden soll, u uckt (siehe Kapitel 3.3.1). Da¨ ber Mengen ausgedr¨ bei ist es n¨ otig, gewisse Operationen auf Mengen durchf¨ uhren zu k¨ onnen – ahnlich wie wir es von den Zahlen kennen. ¨ Definition 1.5 (Mengenoperationen) Es seien U und V Mengen. Die Schnittmenge von U und V ist die gr¨ oßte gemeinsame Teilmenge von U und V , d. h., sie enth¨ alt alle Elemente von U , die auch in V enthalten sind: U ∩ V := {u ∈ U : u ∈ V }. Offensichtlich gilt: U ∩V = V ∩U . Wir sprechen U ∩V als U geschnitten ” mit V “. Die Vereinigungsmenge von U und V ist die kleinste Menge, die U und V als Teilmengen hat: U ∪ V := {u : u ∈ U oder u ∈ V }. Auch das Vereinigen von Mengen ist kommutativ (vertauschbar): U ∪ V = V ∪ U , und wir sprechen U ∪ V als U vereinigt mit V “. ” Wenn wir eine Menge V von einer Menge U subtrahieren, dann lassen wir in U die Elemente weg, die in V enthalten sind. Genauer ist die Differenz von U und V definiert u ¨ ber U \ V := {u ∈ U : u ∈ V }. Wir sprechen U \ V als U ohne V “. V darf auch Elemente besitzen, die ” keine Elemente von U sind.
1.1 Mengen
7
Um Paare (u, v) zu bilden, deren erster Eintrag aus einer Menge U und deren zweiter Eintrag aus einer Menge V stammt, verwenden wir das Kreuzprodukt (das kartesische Produkt) von U und V : U × V := {(u, v) : u ∈ U und v ∈ V }. Entsprechend k¨ onnen wir n-Tupel bilden (Paare sind 2-Tupel). Bei Relationen und in der Linearen Algebra ben¨ otigen wir den Fall, dass alle Eintr¨ age eines n-Tupels aus der gleichen Menge stammen, U n := U × U × · · · × U = {(u1 , u2 , . . . , un ) : u1 , u2 , . . . , un ∈ U }. n-mal U
Die eingangs beschriebene Modellierung eines zweimaligen W¨ urfelns ist ein Kreuzprodukt: {(1, 1), (1, 2), . . . , (1, 6), (2, 1), . . . , (6, 6)} = {1, . . . , 6} × {1, . . . , 6}. In Beispiel 1.3 sind die Kanten Elemente der Menge V 2 = V × V . Kombiniert man Mengenoperationen, so ist es oft l¨ astig, mit Klammern die Abarbeitungsreihenfolge vorzugeben. Daher wird festgelegt, dass das Komplement am engsten bindet, dann folgen Durchschnitt und Vereinigung, also ist beispielsweise CU ∪ V ∩ W = (CU ) ∪ (V ∩ W ). Das ist vergleichbar mit den Punkt-vor-StrichRegeln beim Rechnen mit Zahlen: 3 + 4 · 5 = 3 + (4 · 5). Beispiel 1.6 (Mengenverkn¨ upfungen) Seien M1 und M2 die Mengen der Methoden zweier Klassen eines objektorientierten Programms: M1 := {getName, getAddress, setName, setAddress, getChangeDate} M2 := {getName, getAddress, print} Wir k¨ onnten gemeinsame Methoden in eine Basisklasse verlagern: M1 ∩ M2 = {getName, getAddress}. Dann w¨ aren gegebenenfalls alle Methoden M1 ∪ M2 = {getName, getAddress, setName, setAddress, getChangeDate, print} nur einmal zu implementieren. Speziell f¨ ur M2 muss nur M2 \ M1 = {print} programmiert werden.
8
1 Grundlagen
Komplement und Differenz von Mengen f¨ uhren h¨ aufig zu Irritationen. Beim otigen wir zu einer Menge U eine Grundmenge, die U Komplement CG U ben¨ enth¨ alt: U ⊂ G. Bei der Mengendifferenz k¨ onnen die beteiligten Mengen beliebig zueinander liegen. Allerdings l¨ asst sich das Komplement als Mengendifferenz schreiben. Seien U ⊂ G und V ⊂ G, dann gilt: U \ V = U ∩ CG V,
U
V
U
V
V
U\V
V
U
U
U V
CG U = G \ U.
UU V
U
CVU
Abb. 1.3 Mengenoperationen, dargestellt als Venn-Diagramme
Um zu veranschaulichen, was bei den Mengenoperationen geschieht, ist es u achen zu visualisieren. Streng genommen betrachtet ¨ blich, Mengen durch Fl¨ man dabei nur Teilmengen von Punkten der Zeichenebene, die aber beliebige Mengen repr¨ asentieren sollen. Die Schnittmenge zweier Mengen ist dann die Fl¨ ache, auf der sich die Mengen u ugt man ¨ berlappen. Bei der Vereinigung f¨ Fl¨ achen zu einer gemeinsamen zusammen. Diese Darstellungsart nennt man Venn-Diagramm. Dabei ist es u achen, Ovale oder ¨ blich, die Mengen als Kreisfl¨ Rechtecke zu malen, siehe Abbildung 1.3. Mit Venn-Diagrammen k¨ onnen Sie leicht die G¨ ultigkeit der folgenden Regeln nachpr¨ ufen: Satz 1.7 (Eigenschaften von Mengen) Es seien U , V und W Mengen. Dann gilt: Aus U ⊂ V ⊂ W folgt U ⊂ W , d. h., die Teilmengenbeziehung ist transitiv. Ist U ⊂ V und gleichzeitig V ⊂ U , dann folgt U = V . Kommutativgesetze (Vertauschung der Reihenfolge, s. o.): U ∪ V = V ∪ U,
U ∩ V = V ∩ U.
Im Gegensatz dazu spielt aber z. B. bei der Mengendifferenz die Reihenfolge durchaus eine Rolle. Assoziativgesetze: Bei gleichartigen Operationen kann die Reihenfolge beliebig gew¨ ahlt werden, d. h., die Klammerung ist unwichtig: U ∪ (V ∪ W ) = (U ∪ V ) ∪ W,
U ∩ (V ∩ W ) = (U ∩ V ) ∩ W.
1.2 Logik
9
Distributivgesetze: Analog zur Ausmultiplikation x·(y+z) = x·y+x·z f¨ ur Zahlen x, y und z gilt: U ∩ (V ∪ W ) = (U ∩ V ) ∪ (U ∩ W ),
U ∪ (V ∩ W ) = (U ∪ V ) ∩ (U ∪ W ).
Die Regeln gelten also auch bei Vertauschung von Vereinigung und Durchschnitt. Das ist beim Distributivgesetz f¨ ur Zahlen nicht der Fall: In der Regel ist x + (y · z) = (x + y) · (x + z), wie wir am Beispiel 4 + (2 · 5) = (4 + 2) · (4 + 5) sehen. Bei der Bildung des Komplements sind die De Morgan’schen Regeln zu beachten. F¨ ur U, V ⊂ W gilt: CW (U ∪ V ) = CW U ∩ CW V,
CW (U ∩ V ) = CW U ∪ CW V.
Unter der Komplementbildung kehrt sich das Operatorsymbol um. Wir werden analoge Regeln gleich anschließend f¨ ur die Digitaltechnik und Logik kennen lernen. Aufgabe 1.1 Gegeben sind die Mengen U := {1, 3, 5}, V := {1, 2, 4, 5, 7, 8, 9, 10} und G := {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}. a) Geben Sie alle Teilmengen von U an. b) Berechnen Sie: U ∪ V , U ∩ V , U \ V , V \ U , CG (U ∩ V ), (CG U ) \ V sowie CG [(CG U ) ∩ V ] ∪ U . Diese Aufgabe ist vergleichsweise leicht. Sie werden im Folgenden Aufgaben vorfinden, die einen unterschiedlichen Schwierigkeitsgrad besitzen. Diese sollten von Ihnen nicht in der Art gel¨ ost werden, dass Sie die Internet-Seite zum Buch aufsuchen und sich die L¨ osung dort ansehen. Wir verstehen unter einer ¨ Ubungsaufgabe, dass Sie selbst Ihren Verstand zum L¨ osen einsetzen sollen. Das ist zwar m¨ uhsamer, aber auch sehr viel lehrreicher und befriedigender.
1.2
Logik
1.2.1
Rechnen mit Nullen und Einsen: Boole’sche Algebra
In digitalen Computern gibt es nur die elementaren Zust¨ ande null und eins. Was sich mit diesen Bits alles codieren l¨ asst, beschreiben wir in sp¨ ateren Kapiteln. Hier beschr¨ anken wir uns zun¨ achst auf die beiden elementaren Zust¨ ande. Es gibt 16 M¨ oglichkeiten, Verkn¨ upfungen von zwei Bits (als Werte der Varia-
10
1 Grundlagen
blen A und B) zu definieren. In der Tabelle 1.1 werden diese 16 verschiedenen Verkn¨ upfungen als Spalten 0 bis 15 dargestellt. Tab. 1.1 M¨ ogliche Verkn¨ upfung zweier Bits A
B
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0 0 1 1
0 1 0 1
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 1
1 0 0 0
1 0 0 1
1 0 1 0
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1
Einige dieser Verkn¨ upfungen haben einen Namen und werden durch spezielle Symbole beschrieben: Spalte 1: Die Werte von A und B werden und-verkn¨ upft. Nur wenn beide Werte 1 sind, ist auch das Ergebnis 1. Wir schreiben daf¨ ur A ∧ B (A und B) oder auch A B um anzudeuten, dass hier zwei Bits multipliziert werden. Spalte 6: Die Werte von A und B werden entweder-oder-verkn¨ upft. Nur wenn genau ein Wert 1 ist, ist auch das Ergebnis 1. Wir schreiben dieses exklusive Oder mit A xor B bzw. A ⊕ B. Die Schreibweise mit ⊕ deutet an, dass zwei ¨ Bits ohne Ber¨ ucksichtigung eines Ubertrags addiert werden. Spalte 7: Die Werte von A und B werden oder-verkn¨ upft. Genau dann, wenn mindestens ein Wert 1 ist, ist auch das Ergebnis 1. Wir schreiben A ∨ B (A oder B). Im Gegensatz zum exklusiven Oder ist das Ergebnis auch dann 1, wenn sowohl A als auch B gleich 1 sind. In der Umgangssprache wird h¨ aufig nicht sauber zwischen oder“ und entweder oder“ unterschieden. Hier ” ” m¨ ussen wir genauer sein. Spalte 9: Hier steht das Ergebnis der Verkn¨ upfung A ⇐⇒ B, das genau dann 1 ist, wenn entweder A und B beide 1 oder A und B beide 0 sind. ¨ Diese Aquivalenz von A und B liefert also genau dann eine 1, wenn A ¨ und B den gleichen Wert haben. Auf die Bedeutung der Aquivalenz beim Aufschreiben von Mathematik gehen wir sp¨ ater ein, hier ist sie erst einmal ein Bit-Operator. Spalte 12: Die Werte sind genau umgekehrt zu denen von A. Hier ist die Negation von A beschrieben, die mit ¬A bezeichnet wird. Damit k¨ onnen wir ¨ die Aquivalenz auch so ausdr¨ ucken: (A ⇐⇒ B) = (A ∧ B) ∨ (¬A ∧ ¬B). Das Gleichheitszeichen bedeutet, dass f¨ ur alle vier Wertkombinationen von A und B beide Seiten das gleiche Ergebnis liefern. Die Formel (A ⇐⇒ B) ⇐⇒ [(A ∧ B) ∨ (¬A ∧ ¬B)]
1.2 Logik
11
w¨ urde also f¨ ur alle Wertbelegungen von A und B stets die 1 berechnen. F¨ ur das exklusive Oder gilt: A ⊕ B = (¬A ∧ B) ∨ (A ∧ ¬B). Spalte 13: Hier steht das Ergebnis der Verkn¨ upfung A =⇒ B, das genau dann 1 ist, wenn B gleich 1 oder A gleich 0 ist. Dies ist die Folgerung von B aus A, also (A =⇒ B) = (¬A ∨ B). ¨ Den Einsatz von Aquivalenzen und Folgerungen werden wir uns sp¨ ater noch wesentlich genauer ansehen. Die Ergebnisse der anderen Spalten k¨ onnen wir jetzt ebenfalls mit diesen Begriffen ausdr¨ ucken, siehe Tabelle 1.2. Tab. 1.2 Schreibweisen f¨ ur die Bit-Verkn¨ upfungen A
B
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0 0 1 1
0 1 0 1
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 1
1 0 0 0
1 0 0 1
1 0 1 0
1 0 1 1
1 1 0 0
1 1 0 1
1 1 1 0
1 1 1 1
0
A ∧ B
A ∧ ¬B
A
¬A ∧ B
B
A ⊕ B
A ∨ B
¬A ∧ ¬B
A ⇐⇒ B
¬B
A ∨ ¬B
¬A
A =⇒ B
¬A ∨ ¬B
1
In der Programmiersprache C stehen diese bitweisen Verkn¨ upfungen zur Verf¨ ugung: Der Und-Operator ∧ heißt hier &, statt ∨ wird | verwendet, und ⊕ wird als ^ geschrieben. Dabei werden Worte, die aus mehreren Bits bestehen, positionsweise wie angegeben verkn¨ upft. Ausmaskieren: M¨ ochte man gezielt einzelne Bits auf null setzen, dann undverkn¨ upft man eine Bitfolge mit einer Folge von Einsen, bei der nur die betroffenen Bits null sind. Wir l¨ oschen beispielsweise das f¨ uhrende Bit in 101011 durch Verkn¨ upfen mit 011111, also mittels 101011 & 011111 = 001011. Wenn man testen m¨ ochte, ob ein spezielles Bit gesetzt ist, dann kann man alle anderen ausmaskieren und das Ergebnis mit der Null vergleichen. Auff¨ ullen: Mit der oder-Verkn¨ upfung k¨ onnen gezielt einzelne Bits eingeschaltet werden. Die unteren (hinteren bzw. rechten) vier Bits von 101010 werden auf 1 gesetzt mittels 101010 | 001111 = 101111. Codieren: Die Xor-Verkn¨ upfung l¨ asst sich r¨ uckg¨ angig machen, indem man sie nochmal mit der gleichen Bitfolge anwendet: (A ⊕ B) ⊕ B = A.
12
1 Grundlagen Auf diese Weise erh¨ alt man eine hervorragende Verschl¨ usselung. Dazu muss man ein Referenzdokument als Schl¨ ussel auf sicherem Weg austauschen, z. B. mit dem RSA-Verfahren, siehe Kapitel 3.5. Statt eines vollst¨ andigen Dokuments gen¨ ugt auch eine Startzahl f¨ ur einen Zufallszahlengenerator, der basierend auf dieser Zahl ein Dokument (reproduzierbar) generiert. Dann kann man andere Dokumente mit diesem bitweise Xor-verkn¨ upfen um sie zu verund entschl¨ usseln.
Aufgabe 1.2 Zeigen Sie mit einer Wertetabelle, dass (A ⊕ B) ⊕ B = A gilt.
Satz 1.8 (Rechenregeln) Seien A, B und C Variablen, die die Werte 0 und 1 annehmen k¨ onnen: Kommutativgesetze: A ∧ B = B ∧ A,
A∨B =B∨A
Assoziativgesetze: (A ∧ B) ∧ C = A ∧ (B ∧ C),
(A ∨ B) ∨ C = A ∨ (B ∨ C)
Distributivgesetze: A ∧ (B ∨ C) = (A ∧ B) ∨ (A ∧ C),
A ∨ (B ∧ C) = (A ∨ B) ∧ (A ∨ C).
V¨ ollig analog zum Rechnen mit Mengen gelten auch hier die De Morgan’schen Regeln: ¬(A ∧ B) = ¬A ∨ ¬B,
¬(A ∨ B) = ¬A ∧ ¬B.
Der Beweis des Satzes ist ganz einfach, man muss nur alle Werte f¨ ur A, B und C durchprobieren und dabei die jeweilige Formel u ufen. Das kann man mit ¨ berpr¨ einer Wertetabelle wie Tabelle 1.2 tun. Wir haben beispielsweise ¬A ∧ ¬B geschrieben und meinen damit (¬A) ∧ (¬B). Auf die Klammern verzichten wir aber, weil die Operatoren (wie zuvor bei Mengen) Priorit¨ aten haben: Die Negation bindet enger als Und, und Und bindet enger als Oder. Es gilt also: A ∧ ¬B ∨ C ∧ D = (A ∧ (¬B)) ∨ (C ∧ D). Die Verkn¨ upfungen A ∧ B, A ∨ B, ¬A, ¬(A ∧ B), ¬(A ∨ B), A ⊕ B, usw. lassen sich vergleichsweise einfach mittels Hardware als sogenannte Gatter realisieren. Mit solchen Gattern kann man dann kompliziertere Aufgaben
1.2 Logik
13
bew¨ altigen. Als Beispiel machen wir einen Vorgriff auf das u achste Kapi¨ bern¨ tel und schreiben Zahlen im Dualsystem (Zweiersystem). Es ist ein Verdienst des deutschen Computer-Pioniers Konrad Zuse, dass er die erste programmierbare Rechenmaschine konzipiert hat, die auf dem Dualsystem basierte. Dabei gibt es nur die Ziffern 0 und 1; statt Zehnerpotenzen werden Potenzen von 2 verwendet. Die Zahl 10110011 im Dualsystem entspricht der Dezimalzahl 1 · 128 + 0 · 64 + 1 · 32 + 1 · 16 + 0 · 8 + 0 · 4 + 1 · 2 + 1 · 1 = 179. Solchen Zahlendarstellungen widmen wir uns intensiv in Kapitel 3. Die Addition einstelliger Dualzahlen ist recht einfach. Nur im Fall 1 + 1 muss ¨ ein Ubertrag an die n¨ achst h¨ ohere Stelle ber¨ ucksichtigt werden. 0
0
1
1
+0
+1
+0
+1
0
1
1
10
Mehrstellige Zahlen k¨ onnen, wie wir es aus der Schule kennen, ziffernweise ad¨ diert werden. Dabei m¨ ussen Ubertr¨ age an die n¨ achst h¨ ohere Stelle ber¨ ucksichtigt ¨ werden. Stellen, an denen ein Ubertrag entsteht, sind unterstrichen: Dezimal:
Dual:
37
00100101 +00110001
+49 1
1
86
1
01010110
Tab. 1.3 Wertetabelle eines Volladdierers
A B Cin
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
S
0
1
1
0
1
0
0
1
Cout
0
0
0
1
0
1
1
1
Wir stellen nun Formeln f¨ ur die Summe zweier Ziffern A und B mit einem ¨ Ubertrag Cin auf. Bei dieser Addition entsteht ein Summenbit S sowie ein neuer ¨ Ubertrag Cout f¨ ur die n¨ achste Stelle. Wir erhalten die Formel f¨ ur S als disjunktive Normalform, indem wir in der Wertetabelle 1.3 genau die Spalten betrachten, in denen S = 1 ist. Zu jeder Spalte erstellen wir einen Term, der f¨ ur die hier vorliegende Eingabe A, B und Cin die Eins liefert. Ist die Eingabe einer dieser Variablen null, so verwenden wir die negierte Variable, sonst die nicht-negierte. Diese Literale (d. h. negierte und nicht-negierte Variablen) werden dann mit Und verkn¨ upft. Das Ergebnis ist eine Formel, die genau bei der
14
1 Grundlagen
vorliegenden Eingabekonstellation eine Eins erzeugt und sonst stets den Wert null hat. So erhalten wir f¨ ur S die Formeln ¬A ∧ ¬B ∧ Cin ,
¬A ∧ B ∧ ¬Cin ,
A ∧ ¬B ∧ ¬Cin ,
A ∧ B ∧ Cin .
Wir m¨ ussen diese Terme nun lediglich oder-verkn¨ upfen um S zu berechnen. V¨ ollig analog verfahren wir f¨ ur Cout und erhalten zusammen S = (¬A ∧ ¬B ∧ Cin ) ∨ (¬A ∧ B ∧ ¬Cin ) ∨ (A ∧ ¬B ∧ ¬Cin ) ∨(A ∧ B ∧ Cin ),
(1.1)
Cout = (¬A ∧ B ∧ Cin ) ∨ (A ∧ ¬B ∧ Cin ) ∨ (A ∧ B ∧ ¬Cin ) ∨ (A ∧ B ∧ Cin ). Die Oder-Verkn¨ upfung wird auch als Disjunktion und die Und-Verkn¨ upfung als Konjunktion bezeichnet. Die beiden Formeln liegen in disjunktiver Normalform vor. Dabei sind die geklammerten Teilformeln durch Disjunktionen verbunden, und in den Teilformeln, die Disjunktionsglieder heißen, d¨ urfen die Literale nur mit Und verkn¨ upft sein. Wir haben einen Volladdierer beschrieben: Wir k¨ onnen nun stellenweise von rechts nach links die Summe zweier Zahlen unter Ber¨ ucksichtigung von ¨ Ubertr¨ agen bilden, siehe Abbildung 1.4. A B
&
>1
A3 B3
Cout
&
A2 B2
=1 =1 Cin
S VA
A1 B1 0
S4 VA S3
VA S2
VA S1
Abb. 1.4 Additionswerk mittels Volladdierer (VA): Ein VA ist u ¨ber Gatter aufgebaut, die es als Hardwarebausteine gibt. Das &-Gatter realisiert ∧, das =1-Gatter verkn¨ upft die Eing¨ ange mit dem exklusiven Oder ⊕, und das ≥ 1-Gatter implementiert das Oder ∨. Damit wird S = (A ⊕ B) ⊕ Cin und Cout = (A ∧ B) ∨ ((A ⊕ B) ∧ Cin ) berechnet. Vergewissern Sie sich, dass diese Formeln die gleichen Warheitswertetabellen besitzen wie die disjunktiven Normalformen (1.1).
Die Digitaltechnik besch¨ aftigt sich mit weiteren Hardware-Komponenten wie dem Volladdierer. In der Praxis m¨ ussen Signallaufzeiten ber¨ ucksichtigt werden, daher sind fast alle Baugruppen getaktet. In der Logik brauchen wir uns mit solchen Details nicht zu besch¨ aftigen. Bereits beim Volladdierer entstehen l¨ angliche Formeln. Wenn man diese in Hardware gießen m¨ ochte, ist es aus Kostengr¨ unden wichtig, diese m¨ oglichst weit zu vereinfachen, also zusammenzufassen. Auch Programme werden u allig, wenn Berechnungen ¨ bersichtlicher, schneller und weniger fehleranf¨ kurz und pr¨ agnant werden. Um k¨ urzere Formeln zu erhalten, k¨ onnen wir mit
1.2 Logik
15
den Rechenregeln vereinfachen. Das l¨ asst sich aber schwierig mit einem Programm automatisieren. Leichter wird es, wenn man das Ablesen einer disjunktiven Normalform geschickter gestaltet. Dazu schreibt man die Wertetabelle als Karnaugh-Veitch-Diagramm, so dass man Terme ablesen kann, die m¨ oglichst große Rechtecke von Einsen abdecken. Tab. 1.4 Geschickte Darstellung der Wertetabelle f¨ ur Cout
A= B=
0 0
0 1
1 1
1 0
Cin = 0 1
0 0
0 1
1 1
0 1
Die beiden fett gedruckten Einsen bzw. die beiden unterstrichenen Einsen bilden Bl¨ ocke, die unabh¨ angig von Cin bzw. A u ¨ber A ∧ B bzw. B ∧ Cin beschrieben werden k¨ onnen.
¨ Wir optimieren so die Darstellung des Ubertrags: Die Belegungen der Variablen A, B, Cin sind in Tabelle 1.4 so angeordnet, dass sich genau einer der Variablenwerte ¨ andert, wenn man in der Tabelle eine Spalte nach rechts oder links oder eine Zeile nach oben oder unten geht. Das gilt sogar u ander ¨ ber die R¨ hinaus, wenn wir uns die Tabelle zyklisch fortgesetzt vorstellen (Wrap-Around). Findet man nun horizontal oder vertikal benachbarte Einsen f¨ ur Cout vor, so k¨ onnen diese mit einem Disjunktionsglied beschrieben werden, f¨ ur das eine Variable weggelassen werden kann, die hier sowohl den Wert 0 also auch den Wert 1 annimmt. F¨ ur die fett gedruckten Einsen lesen wir aus Tabelle 1.4 den Term A ∧ B ab. Hier spielt der Wert von Cin offensichtlich keine Rolle: (A ∧ B ∧ ¬Cin ) ∨ (A ∧ B ∧ Cin ) = A ∧ B ∧ (¬Cin ∨ Cin ) = A ∧ B. Entsprechend liefern die unterstrichenen Einsen B ∧ Cin . Jetzt ist nur noch eine ¨ Eins nicht abgedeckt: A∧Cin u ¨berdeckt auch diese. Dabei spielt die Uberlappung mit der fetten und unterstrichenen Eins keine Rolle, im Gegenteil: Je mehr u ¨ berdeckt wird, um so kleiner werden die Terme. Insgesamt erhalten wir eine ¨ k¨ urzere disjunktive Normalform f¨ ur den Ubertrag: Cout = (A ∧ B) ∨ (A ∧ Cin ) ∨ (B ∧ Cin ). H¨ aufig findet man noch gr¨ oßere Rechtecke von Einsen, die u ¨ber mehrere Zeilen und Spalten ragen, wobei auch der Rand u ¨ berschritten werden kann. Allerdings kann nicht jedes Rechteck zusammengefasst werden. Das gelingt beispielsweise nicht f¨ ur die Zeile mit den drei Einsen im Beispiel. Die Seitenl¨ angen des Rechtecks m¨ ussen Zweierpotenzen sein. Aufgabe 1.3 ¨ Uberf¨ uhren Sie ¬(A ∨ B ∧ C) und (¬A ∨ B ∨ ¬C) ∧ (A ∨ C) in eine disjunktive Normalform.
16
1.2.2
1 Grundlagen
Aussagenlogik
Ein Ballonfahrer hat im dichten Nebel die Orientierung verloren. Deshalb l¨ asst er den Ballon soweit sinken, bis er den Erdboden erkennen kann. Als er am Boden einen Menschen sieht, ruft er diesem zu, ob er ihm sagen kann, wo er ist. Nach u ¨ ber einer Minute bekommt er die Antwort: Du bist in einem Ballonkorb!“ Die ” Antwort kann nur von einem Mathematiker kommen, denn sie ist wohl u ¨ berlegt, sie ist eine wahre Aussage, und sie ist v¨ ollig nutzlos. Viele Aussagen sind in der Mathematik aber sehr wohl n¨ utzlich, und ohne Aussagenlogik kann man auch gar nicht programmieren. Aussagen treten in Programmen haupts¨ achlich bei bedingten Anweisungen (if) und Abbruchbedingungen f¨ ur Schleifen auf. Definition 1.9 (Aussage) Unter einer Aussage A versteht man ein sprachliches Gebilde, welches einen der beiden Wahrheitswerte wahr (1) oder falsch (0) hat. Wichtig ist, dass eine Aussage eindeutig wahr oder falsch ist. Dabei ist es unerheblich, ob wir wissen, ob sie wahr oder falsch ist. So ist Es gibt außer” irdisches Leben“ entweder wahr oder falsch – und damit eine Aussage. Keine Aussage ist Frau Xy ist sch¨ on“, da der Wahrheitswert im Auge des Betrachters ” liegt und damit nicht eindeutig feststeht. Da wir hier keine Romane schreiben wollen, bezeichnen wir Aussagen mit Variablen (Platzhaltern) wie A bzw. B, die die Werte wahr“ = 1 oder falsch“ ” ” = 0 annehmen k¨ onnen, und verkn¨ upfen sie mit logischen Operatoren. Dabei handelt es sich exakt um die Verkn¨ upfungen mit den Regeln, die wir im vorangehenden Abschnitt bereits f¨ ur Bits kennen gelernt haben. W¨ ahrend aber in der Programmiersprache C z. B. mit & bitweise und-verkn¨ upft wird und so wieder ein neues Wort bestehend aus mehreren Bits entsteht, werden Aussagen mittels && verkn¨ upft – und das Ergebnis ist ein einzelner Wahrheitswert (wobei 0 als falsch und alles Andere als wahr definiert ist). In der Abfrage if ((x==3) && (y>2)) steht eine Aussage, falls Werte f¨ ur die Variablen x und y bekannt sind. Genauer ist (x==3) && (y>2) eine Aussageform (siehe Abschnitt 1.2.3), die durch Einsetzen von Werten in die Variablen x und y zu einer wahren oder falschen Aussage wird. Wir betrachten jetzt aussagenlogische Formeln wie ¬A ∧ (B ∨ C). Dabei verwenden wir aussagenlogische Variablen wie A, B und C, die nur die Werte wahr und falsch annehmen k¨ onnen, und verkn¨ upfen diese mit den bekannten logischen Operatoren. In der obigen If-Abfrage steht die Formel A ∧ B, wobei A
1.2 Logik
17
f¨ ur den Wahrheitswert von x==3 und B f¨ ur den Wert von y>2 verwendet wird. Sind die Werte aller aussagenlogischer Variablen bekannt, dann ist damit auch der Wert der aussagenlogischen Formel bestimmt. Aussagenlogische Formeln in der Mathematik unterscheiden sich bisweilen in ihrer Bedeutung von der Umgangssprache. W¨ ahrend A ∧ B = B ∧ A ist, dr¨ uckt das Und in der Umgangssprache h¨ aufig einen zeitlichen und kausalen Ablauf aus: A := Der Studierende besteht die Pr¨ ufung“ und B := Der Studierende ist ” ” Bachelor“. Eine aussagenlogische Formel heißt erf¨ ullbar genau dann, wenn es eine Belegung der Variablen gibt, die die Formel wahr werden l¨ asst. Sie heißt unerf¨ ullbar genau dann, wenn die Formel bei jeder Belegung der Variablen falsch ist, z. B. ist A ∧ ¬A unerf¨ ullbar. Eine Formel, die bei jeder Variablenbelegung wahr ist, heißt eine Tautologie. Sie ist allgemeing¨ ultig. Beispielsweise ist A ∨ ¬A eine Tautologie. Es ist prinzipiell sehr leicht, eine aussagenlogische Formel auf Erf¨ ullbarkeit zu testen: Man muss lediglich alle m¨ oglichen Wertkombinationen f¨ ur die Variablen durchprobieren. Bei n Variablen sind das maximal 2n Tests. Das ist jetzt eine agt – und wir erinnern uns an Seite 5, dass Stelle, an der eine Laufzeit 2n betr¨ das problematisch sein kann. Haben wir dagegen eine Formel in disjunktiver Normalform, dann ist sie erf¨ ullbar, wenn genau ein Disjunktionsglied erf¨ ullbar ist. Bei jedem Glied, bei dem keine Variable mehrfach (also negiert und nicht negiert) vorkommt, l¨ asst sich aber die Belegung der Variablen so w¨ ahlen, dass wahr herauskommt. Man kann solch eine disjunktive Normalform nur dann hinschreiben, wenn die Formel erf¨ ullbar ist. Schwieriger wird es aber, wenn die Formel in konjunktiver Normalform vorliegt: Hier sind Konjunktionsglieder mit Und verbunden und in den Konjunktionsgliedern sind Literale u upft. Bereits f¨ ur kon¨ ber Oder verkn¨ junktive Normalformen mit n Variablen, bei denen h¨ ochstens drei Literale pro Konjunktionsglied vorkommen, ist kein Verfahren bekannt, das im schlechtesten ullbarkeit ben¨ otigt, wobei Fall weniger als c · bn Tests zum Feststellen der Erf¨ c > 0 und b > 1 Konstanten sind. Aufgabe 1.4 ¨ Schreiben Sie die Formeln f¨ ur das Summenbit und den Ubertrag des Volladdierers in einer konjunktiven Normalform (siehe Tabelle 1.3). ¨ Es besteht nicht nur zuf¨ allig eine Ahnlichkeit zwischen dem Aussehen der Mengen- und dem der Logik-Operatoren ∪ und ∨ sowie ∩ und ∧. Tats¨ achlich gelten die gleichen Rechenregeln, und wir k¨ onnen die Logik-Operationen auch mittels der Gegenst¨ ucke f¨ ur Mengen schreiben: Wir stellen den Wahrheitswert falsch durch die leere Menge und den Wahrheitswert 1 durch die Menge {1} dar. Die Negation ist dann das Komplement bez¨ uglich der Grundmenge {1}, ∧ wird zu ∩ und ∨ zu ∪.
18
1.2.3
1 Grundlagen
Pr¨ adikatenlogik
In der Abfrage if ((x==3) && (y>2)) haben wir mit dem Term (x = 3) ∧ (y > 2) bereits eine Aussageform verwendet, die erst f¨ ur gewisse Werte f¨ ur x und y eine Aussage wird. Die Pr¨ adikatenlogik besch¨ aftigt sich mit solchen Aussageformen, die man auch Pr¨ adikate nennt. Jetzt nehmen also die Variablen wie bei aussagenlogischen Formeln nicht nur Wahrheitswerte an, sondern f¨ ur die Variablen sind alle m¨ oglichen Werte aus einer gewissen Grundmenge m¨ oglich. Erst wenn die Variablen durch feste Werte ersetzt werden, entsteht eine Aussage, von der feststeht, ob sie wahr oder falsch ist. Solange nicht alle Variablen belegt sind, hat man weiterhin eine Aussageform. Wir haben zuvor Aussagen durch Variablen wie A, B, usw. ersetzt, die f¨ ur den Wahrheitswert der Aussage stehen. Jetzt f¨ uhren wir f¨ ur eine Aussageform eine entsprechende Abk¨ urzung ein. Da der Wahrheitswert von den Variablen abh¨ angt, m¨ ussen wir daf¨ ur allerdings Platzhalter vorsehen. Die Aussage in unserer If-Abfrage k¨ onnen wir z. B. mit A(x, y) bezeichnen, also A(x, y) := [(x = 3) ∧ (y > 2)]. Damit ist A(3, 3) eine wahre Aussage, A(3, 2) ist eine falsche Aussage, und B(x) := A(x, 4) ist ein Pr¨ adikat, das genau f¨ ur x = 3 zu einer wahren Aussablicherweise f¨ ur die Darstellung von ge wird. Die Bezeichnung Pr¨ adikat wird u ¨ Aussageformen u ¨ ber A(x, y), B(x), . . . verwendet. Aus der Aussagenlogik entsteht durch diese Erweiterung die Pr¨ adikatenlogik. Mit den Logik-Verkn¨ upfungen k¨ onnen aus Pr¨ adikaten pr¨ adikatenlogische Formeln analog zu den aussagenlogischen Formeln aufgebaut werden. Wichtig beim Programmieren ist insbesondere der richtige Umgang mit den De Morgan’schen Regeln. Sei x eine Variable, in der nach einer Berechnung eine Zahl mit Nachkommastellen stehen kann. Wenn Sie nun eine fußgesteuerte Schleife solange ausf¨ uhren m¨ ochten, wie x = 0 ist, dann sollten Sie wegen m¨ oglicher Rechenungenauigkeiten nicht auf x = 0 abfragen, da vielleicht x = 0,000001 ist. Besser ist die Verwendung einer kleinen positive Zahl eps, die die Genauigkeit vorgibt: repeat Anweisungen until (x > −eps) ∧ (x < eps) Wenn wir dieses Programmfragment in C realisieren wollen, dann m¨ ussen wir bei einer do-while-Schleife die Bedingung negieren. Dazu formen wir sie mit den De Morgan’schen Regeln um: ¬((x > − eps) ∧ (x < eps)) = ¬(x > − eps) ∨ ¬(x < eps) = (x ≤ − eps) ∨ (x ≥ eps). Wir k¨ onnen die Abfrage in C also so realisieren:
1.2 Logik
19
do { Anweisungen } while((x = eps)). Zus¨ atzlich zur Aussagenlogik gibt es jetzt aber noch Quantoren. Diese benutzt man, wenn man ausdr¨ ucken m¨ ochte, dass eine Formel f¨ ur alle oder f¨ ur einen gewissen Wert einer Variablen gelten soll. Zu einer Aussageform A(x) definieren wir eine Aussage B u ¨ber B := ∀x ∈ E : A(x). B ist wahr genau dann, wenn beim Einsetzen aller Elemente x der Menge E in die Aussageform A(x) eine wahre Aussage entsteht. Wenn f¨ ur ein einziges x ∈ E die Aussageform A(x) zu einer falschen Aussage wird, dann ist die Aussage B falsch. Das Symbol ∀ bezeichnet den Allquantor und wird f¨ ur ” alle“ gesprochen. Der Algorithmus 1.1 berechnet demnach den Wahrheitswert von B f¨ ur eine Menge E = {1, 2, . . . , n}. Der Algorithmus ist in einer PseudoProgrammiersprache geschrieben, die wir kurz im Vorwort erl¨ autern. Algorithmus 1.1 Allquantor k := 1, B :=wahr while (k ≤ n) ∧ B do B := A(k), k := k + 1 Genau dann, wenn es mindestens einen Wert x ∈ E gibt, so dass daf¨ ur die Aussageform A(x) zu einer wahren Aussage wird, ist B := ∃x ∈ E : A(x) wahr. Das Symbol ∃ bezeichnet den Existenzquantor und wird es existiert ” mindestens ein“ gesprochen. Die Berechnung des Wahrheitswerts von B f¨ ur E = {1, 2, . . . , n} geschieht in Algorithmus 1.2. Algorithmus 1.2 Existenzquantor k := 1, B :=falsch while (k ≤ n) ∧ ¬B do B := A(k), k := k + 1 Wir haben hier Aussageformen verwendet, die nur von einer Variable abh¨ angen, die dann durch einen Quantor gebunden wird. Haben Aussageformen weitere Variablen, dann k¨ onnen durch Quantoren einige Variablen gebunden werden und weitere frei bleiben. Beispielsweise k¨ onnen so Quantoren hintereinander geschrieben werden: ∀x ∈ E
∃y ∈ F : A(x, y).
20
1 Grundlagen
¨ Ubersetzt heißt dies: Zu jedem x ∈ E existiert ein y ∈ F (das von x abh¨ angen ” darf, zu jedem x ist also ein anderes y erlaubt), so dass A(x, y) wahr ist“. In der Umgangssprache f¨ allt der Umgang mit Quantoren schwer. So ist die Negation von Alle Fußballer schießen ein Tor“ nicht Kein Fußballer schießt ” ” ein Tor“, sondern Es gibt einen Fußballer, der kein Tor schießt“. ” Bei der Negation wird aus einem Existenz- ein Allquantor und umgekehrt: ¬[∀x ∈ E ∃y ∈ F : A(x, y)] = ∃x ∈ E : ¬[∃y ∈ F : A(x, y)] = ∃x ∈ E ∀y ∈ F : ¬A(x, y). Auch ist zu beachten, dass die Reihenfolge verschiedener Quantoren nicht vertauscht werden darf, da sonst v¨ ollig unterschiedliche Aussagen entstehen: F¨ ur ” ur jedes Auto mindestens einer“ ist eialle Autos existiert ein K¨ aufer, n¨ amlich f¨ ne andere Aussage als Es existiert ein (einzelner) K¨ aufer, der alle Autos kauft ” (und damit einen riesigen Fuhrpark hat)“.
1.2.4
Sprache der Mathematik und Beweise
Bei einem Programm muss man sich an eine vorgegebene Syntax halten. So ist das auch, wenn man Mathematik aufschreiben m¨ ochte. Die Ergebnisse werden als wahre Aussagen aufgeschrieben. Dass sie tats¨ achlich wahr sind, ist zu beweisen. Man muss sie also l¨ uckenlos begr¨ unden. Dabei ist es leider erforderlich, offensichtliche Zusammenh¨ ange als wahr vorauszusetzen. Das macht man, indem man Axiome postuliert, d. h. als anerkannte Grundlage akzeptiert. Die elementaren Rechenregeln sind solche Axiome. Dabei muss man darauf achten, dass sich diese als wahr vorausgesetzten Aussagen nicht widersprechen. Dann kann man aus den Axiomen interessante Konsequenzen herleiten. Solche wahren Aussagen, die aus den Axiomen folgen, heißen S¨ atze. Andere Bezeichnungen f¨ ur einen Satz sind Folgerung und Lemma (Hilfssatz). In der Mathematik schreibt man sehr knapp. Einen Literaturpreis wird man f¨ ur einen Mathe-Text nicht bekommen. Daf¨ ur sollte er aber pr¨ azise sein. Um das zu erreichen, verwendet man Definitionen. Mit einer Definition wird ein Begriff eingef¨ uhrt, der eine eindeutige Abk¨ urzung f¨ ur eine Aussage (Eigenschaft) oder ein Objekt ist. Man benutzt dann immer diesen Begriff – im Gegensatz zu einem literarischen Text, bei dem vermieden wird, das gleiche Wort mehrfach zu benutzen. Mathematik machen“ bedeutet also, aus bekannt oder vorausgesetzt wahren ” Aussagen neue wahre Aussagen abzuleiten, die dann beim L¨ osen konkreter Probleme helfen. Wenn man x2 = 1 ⇐⇒ x = 1 ∨ x = −1 hinschreibt, dann will man damit sagen, dass diese Aussageform f¨ ur alle Elemente x einer Zahlenmenge, die aus dem Zusammenhang bekannt ist, wahr wird. Ein mathematischer Text besteht also aus wahren Aussagen.
1.2 Logik
21
Ein Satz wird bewiesen, indem man seine Aussage mittels wahrer Folgerungen aus bekannt wahren Aussagen ableitet. Dazu sehen wir uns den Begriff der Folgerung oder Implikation genauer an, den wir bereits f¨ ur die BitVerkn¨ upfungen eingef¨ uhrt haben. Definition 1.10 (Implikation) Seien A und B Aussagen oder Aussageformen. Die Folgerung bzw. Implikation A =⇒ B ist definiert als ¬A ∨ B und wird als aus A folgt B“ ” gesprochen. Die Implikation ist transitiv, d. h., es gilt [A =⇒ B =⇒ C] =⇒ [A =⇒ C]. Schreiben wir in einem mathematischen Text A =⇒ B f¨ ur Aussageformen A und B, dann dr¨ ucken wir damit aus, dass die Folgerung f¨ ur alle (relevanten) Variablenbelegungen von A und B wahr ist. In diesem Fall nennen wir A eine hinreichende Bedingung f¨ ur B. Denn wenn wir wissen, dass A wahr ist, dann wissen wir wegen der wahren Folgerung auch, dass B wahr ist. Umgekehrt heißt B eine notwendige Bedingung f¨ ur A. Da A =⇒ B wahr ist, kann A nur ullt ist. Die dann wahr sein, wenn B wahr ist, wenn also notwendigerweise B erf¨ notwendige Bedingung kann aber auch erf¨ ullt sein, wenn A nicht gilt, sie muss also nicht hinreichend sein. ur x = 1. Wegen x = 1 =⇒ x2 = 1 ist x2 = 1 eine notwendige Bedingung f¨ 2 ullt sein, damit x = 1 gelten kann. Die notwendige Bedingung x = 1 muss erf¨ ist aber auch f¨ ur x = −1 erf¨ ullt. Eine notwendige Bedingung kann also zu viele L¨ osungskandidaten liefern. Umgekehrt ist x = 1 eine hinreichende Bedingung f¨ ur x2 = 1. Wenn x = 1 ist, 2 osungen, die dann gilt auch x = 1. Aber es gibt mit x = −1 auch noch andere L¨ wir mit der hinreichenden Bedingung nicht finden (vgl. Bemerkungen zu (1.6)). In Kapitel 2.4.3 werden wir f¨ ur Problemstellungen der Graphentheorie notwendige und hinreichende Bedingungen diskutieren. Eine ber¨ uhmte notwendige Bedingung f¨ ur lokale Extremstellen kennen Sie aber vielleicht noch aus der Schulzeit, deshalb greifen wir hier jetzt vor: Eine differenzierbare Funktion kann an einer Stelle nur dann eine lokale Extremstelle haben, wenn die Ableitung dort null ist (siehe Satz 4.29 auf Seite 250). Es handelt sich aber wirklich nur um eine notwendige Bedingung, die Ableitung kann null sein, ohne dass ein Extremum vorliegt. Wissen wir aber zus¨ atzlich, dass die zweite Ableitung ungleich null ist, so haben wir eine hinreichende Bedingung f¨ ur eine lokale Extremstelle (siehe Satz 4.34 auf Seite 262). Diese Bedingung ist aber nicht mehr notwendig, denn es gibt lokale Extremstellen, bei denen die zweite Ableitung null ist.
22
1 Grundlagen
¨ Definition 1.11 (Aquivalenz) ¨ Seien A und B Aussagen oder Aussageformen. Die Aquivalenz A ⇐⇒ B ist definiert u ¨ber (A =⇒ B) ∧ (B =⇒ A). ¨ Die Aquivalenz ist dann stets wahr, wenn A und B immer den gleichen Wahrheitswert haben, wenn also A = B gilt. ¨ Auch die Aquivalenz ist transitiv, d. h., es gilt [A ⇐⇒ B ⇐⇒ C] =⇒ [A ⇐⇒ C]. ¨ Jetzt sehen wir uns an, wie man mittels Folgerungen und Aquivalenzen Mathematik aufschreibt. Die Schreibweise x = 1 =⇒ x2 = 1 ist sinnvoll, denn aus ihr wird f¨ ur jeden Zahlenwert f¨ ur x eine wahre Aussage. Ist beispielsweise x = 2, dann ist die linke Seite falsch, d. h., die Folgerung ist wahr. Ist hingegen x = 1, dann sind sowohl linke als auch rechte Seite wahr, die Folgerung also auch. Dagegen w¨ urde man nicht x2 = 1 =⇒ x = 1 schreiben, wenn man f¨ ur x auch negative Zahlen einsetzen darf. Denn f¨ ur x = −1 ist die linke Seite wahr, die rechte aber falsch, so dass die Folgerung falsch ist. Rechnungen kommentieren wir aber ausschließlich mit stets wahren Folgerungen ¨ und Aquivalenzen. Korrekt ist daher x2 = 1 ⇐⇒ x = −1 ∨ x = 1. ¨ Diese Aquivalenz ist stets wahr. Die Wahrheitswerte beider Seiten sind also ¨ immer gleich. Statt der Aquivalenz k¨ onnten wir also auch ein Gleichheitszeichen hinsichtlich der Wahrheitswerte verwenden. Das w¨ urde aber Verwirrung stiften, da wir ein Gleichheitszeichen schon f¨ ur den Vergleich der Zahlen nutzen. Zum Vermeiden von Fehlern beim Beweisen ist es ganz wichtig zu verstehen, dass man aus einer falschen Aussage alles folgern kann: 0 = 1 =⇒ 1 + 1 = 3. Diese Folgerung ist wahr, da die linke Seite falsch ist. Obwohl die Folgerung wahr ist, gilt nat¨ urlich nicht 1 + 1 = 3. Einige Gottesbeweise des Mittelalters beginnen mit einer Aussage, von der nicht sicher bekannt ist, ob sie wahr ist. Damit wissen wir das aber leider auch nicht vom Ergebnis (Gott existiert oder Gott existiert nicht), das mit wahren Folgerungen daraus gewonnen wird.
1.2 Logik
23
Aufgabe 1.5 Sei M eine Menge, und A(x) und B(x) seien Aussageformen, die f¨ ur alle x ∈ M zu Aussagen werden. Welche der folgenden Aussagen sind unabh¨ angig von der Definition von M , A und B wahr? [(∃x ∈ M : A(x)) ∨ (∃x ∈ M : B(x))] ⇐⇒ ∃x ∈ M : (A(x) ∨ B(x)), [(∃x ∈ M : A(x)) ∧ (∃x ∈ M : B(x))] ⇐⇒ ∃x ∈ M : (A(x) ∧ B(x)), [(∀x ∈ M : A(x)) ∨ (∀x ∈ M : B(x))] ⇐⇒ ∀x ∈ M : (A(x) ∨ B(x)), [(∀x ∈ M : A(x)) ∧ (∀x ∈ M : B(x))] ⇐⇒ ∀x ∈ M : (A(x) ∧ B(x)). Wenn man mittels Folgerungen etwas beweisen m¨ ochte, dann muss die Startaussage wahr sein. Dann kann man mit einer Kette von (wahren) Folgerungen arbeiten, bis man schließlich bei der zu zeigenden Aussage ankommt. Dieses Beweisverfahren nennt man direkten Beweis. Als erstes Beispiel beweisen wir direkt, dass 0 · x = 0 gilt. Dieses Beispiel kann nur von einem Mathematiker stammen, denn allen anderen ist das auch ohne Beweis klar. Die Zahlen und Grundrechenarten werden aber u ¨ blicherweise u ¨ ber Axiome festgelegt, in denen diese Regel nicht enthalten ist. Sie muss daher streng genommen u ¨ ber die Axiome bewiesen werden. Die Ausgangssituation ist dann so, dass f¨ ur eine Zahlenmenge K, f¨ ur die eine Addition +“ und eine ” Multiplikation ·“ erkl¨ art ist, die folgenden Axiome gelten: ” Neutrales Element der Addition: Zu jedem x ∈ K gibt es genau eine Zahl 0 ∈ K, so dass x + 0 = x ist. Dabei handelt es sich unabh¨ angig von x immer um die gleiche Zahl. Anders formuliert: ∃0 ∈ K : [(∀x ∈ K : x + 0 = x) ∧
(1.2)
(∀x ∈ K ∀y ∈ K : x + y = x =⇒ y = 0)].
(1.3)
Distributivgesetz: ∀x ∈ K ∀y ∈ K ∀z ∈ K : (x + y) · z = (x · z) + (y · z).
(1.4)
Unter der Voraussetzung der Axiome zeigen wir jetzt mit wahren Folgerungen, dass 0 · x = 0 gilt. Dazu beginnen wir mit einer Aussage, die aufgrund der Wohldefiniertheit der Multiplikation wahr ist. ∀x ∈ K : 0 · x = 0 · x (1.4)
(1.2): 0+0=0
=⇒
∀x ∈ K : (0 + 0) · x = 0 · x
=⇒ ∀x ∈ K : (0 · x) + (0 · x) = 0 · x
(1.3)
=⇒
∀x ∈ K : 0 · x = 0,
denn mit y := 0 · x folgt wegen (1.3) aus (0 · x) + y = 0 · x, dass y = 0 ist, also 0 · x = 0. Es ist u urzer als Gleichungs¨ blich, eine solche Argumentation auch k¨ kette zu schreiben: 0 · x = (0 + 0) · x = (0 · x) + (0 · x),
24
1 Grundlagen
so dass mit (1.3) auch jetzt 0 · x = 0 folgt. Wir betrachten einen Graphen mit der Knotenmenge V = {a, b, c, d}. Die Knoten sind durch gerichtete Kanten verbunden. Die Menge der Kanten sei E = {(a, b), (b, c), (c, d)}. Wir sagen, dass von einem Knoten x zu einem anderen Knoten y ein gerichteter Weg existiert, wenn wir mittels Kanten von x nach y gelangen k¨ onnen. Um exakter zu sein, f¨ uhren wir ein Pr¨ adikat W (x, y) ein, das genau dann wahr ist, wenn es einen gerichteten Weg zwischen x ∈ V und y ∈ V gibt. Insbesondere gilt also: ∀x ∈ V ∀y ∈ V : (x, y) ∈ E =⇒ W (x, y), ∀x ∈ V ∀y ∈ V ∀z ∈ V : [(x, z) ∈ E ∧ W (z, y)] =⇒ W (x, y).
(1.5)
Es gibt einen gerichteten Weg von x ∈ V nach y ∈ V , wenn es eine direkte Kante oder wenn es eine Kante zu einem anderen Knoten z und von dort einen gerichteten Weg zu y gibt. In Expertensystemen werden Fakten (wie die Definition der Kanten) und Regeln (wie die beiden Folgerungen) hinterlegt, so dass mit diesen Regeln auf Fragen geantwortet werden kann. Dabei muss die Antwort mittels Folgerungen abgeleitet werden k¨ onnen. Die Programmiersprache Prolog basiert auf diesem Prinzip, das wir uns in Kapitel 1.2.6 noch genauer ansehen. Wir wollen jetzt beweisen, dass W (a, d) wahr ist, dass es also einen gerichteten Weg von a nach d gibt: (c, d) ∈ E =⇒ W (c, d). Da auch (b, c) ∈ E ist, folgt mit der zweiten Regel: (b, c) ∈ E ∧ W (c, d) =⇒ W (b, d). Ebenso erhalten wir wegen (a, b) ∈ E mit dieser Regel: (a, b) ∈ E ∧ W (b, d) =⇒ W (a, d). Wie in diesen Beweisen geht man auch vor, wenn man nur“ Terme umformt: ” x2 + 4x + 4 = 0 =⇒ (x + 2)2 = 0 =⇒ x = −2.
(1.6)
¨ In diesem Fall k¨ onnen wir aber auch Aquivalenzen verwenden. Das ist deshalb gestattet, weil sich bei den Umformungen die L¨ osungsmenge der Gleichung nicht andert. Kommen L¨ osungen hinzu, dann m¨ ussen wir wie zuvor bei x = 1 =⇒ ¨ osung 1 kommt −1 hinzu) den Folgerungspfeil verwenden. Die x2 = 1 (zur L¨ umgekehrte Richtung ist dann nicht f¨ ur alle Werte von x wahr.
1.2 Logik
25
Neben dem direkten Beweis wird h¨ aufig ein indirekter Beweis gef¨ uhrt. Wenn man nicht sieht, wie man durch Folgerungen zum Ziel kommt, dann negiert man die zu beweisende Aussage und f¨ uhrt dies zu einem Widerspruch. Man zeigt also, dass die Negation der Aussage falsch und damit die Aussage wahr ist. Das ist ein Trick, denn indem man annimmt, dass die negierte Aussage wahr ist, hat man zus¨ atzliches Wissen (n¨ amlich die als wahr angenommene negierte Aussage), mit dem man im Beweis arbeiten kann. Daher ist es oft leichter, einen Beweis indirekt zu f¨ uhren. Aufgabe 1.6 Ein Kommissar hat drei Verd¨ achtige A, B und C f¨ ur einen Mord. Er weiß, dass der oder die M¨ order l¨ ugen und die anderen die Wahrheit sagen. A sagt: Wir ” drei haben den Mord gemeinschaftlich begangen“. B sagt: Es gibt genau zwei ” M¨ order“. Bestimmen Sie den oder die M¨ order, indem Sie Annahmen wie A ist ” kein M¨ order“ oder B ist ein M¨ order“ auf Widerspr¨ uche f¨ uhren. ” Im Gegensatz zu 0 · x = 0 wollen jetzt einen wirklich wichtigen und nicht offensichtlichen Satz aus der Theoretischen Informatik beweisen. Man darf nicht glauben, dass alles programmierbar ist, was sich sinnvoll anh¨ ort. Beim Halteproblem geht es darum zu entscheiden, ob ein gegebenes Programm (das hier zur Vereinfachung keine Eingabe erwartet) bei Ausf¨ uhrung jemals beendet wird oder bis in alle Ewigkeit abgearbeitet wird. Da unser Leben endlich ist und wir nicht unendlich lange auf ein Ergebnis warten k¨ onnen, w¨ are es sch¨ on, wenn wir eine Prozedur Halt h¨ atten, die beliebige andere Prozeduren darauf hin untersucht, ob sie f¨ ur eine vorgegebene Eingabe jemals fertig werden, und uns die Antwort auf diese Frage wiederum in endlicher Zeit liefert. Algorithmus 1.3 Die Prozedur Gegenbeispiel benutzt den Algorithmus Halt, der das Halteproblem l¨ osen soll. procedure Gegenbeispiel if Halt(Gegenbeispiel) = h¨ alt“ then ” Gehe in eine Endlosschleife, die unendlich lange ausgef¨ uhrt wird. Wir k¨ onnen nun sehr lange versuchen, eine solche Prozedur Halt zu schreiben. Besser ist, sich zun¨ achst dem Problem mathematisch zu n¨ ahern. Wir beweisen n¨ amlich, dass es Halt nicht gibt. Um das zu zeigen, f¨ uhren wir einen indirekten Beweis. Wir nehmen dazu an, dass es Halt gibt. Damit k¨ onnen wir Halt innerhalb einer Prozedur Gegenbeispiel aufrufen. Das machen wir in Algorithmus 1.3 so, dass Halt nicht das Verhalten von Gegenbeispiel voraussagen kann. Der Trick dabei ist die Anwendung von Halt auf die Prozedur Gegenbeispiel, die sich damit selbst untersucht. Die Anwendung auf sich selbst ist ein ganz typisches Vorgehen in der Theoretischen Informatik (vgl. Aufgabe 1.7).
26
1 Grundlagen Falls die Laufzeit von Gegenbeispiel endlich ist, kann Gegenbeispiel nicht in die Endlosschleife gehen, d. h., Halt muss feststellen, dass Gegenbeispiel nicht h¨ alt. Damit w¨ urde Halt im Widerspruch zu seinen angenommenen F¨ ahigkeiten ein falsches Ergebnis liefern. Es bleibt jetzt nur der Fall, dass Gegenbeispiel nicht nach endlicher Zeit h¨ alt und – da die Laufzeit von Halt endlich ist – somit in die Endlosschleife gelangt. Dazu muss Halt feststellen, dass Gegenbeispiel nach endlicher Zeit fertig wird. Auch in diesem Fall muss Halt also im Widerspruch zur Annahme ein falsches Ergebnis berechnen.
Da wir alle m¨ oglichen F¨ alle zum Widerspruch f¨ uhren, kann die Annahme nicht richtig sein, das Programm Halt existiert nicht. Aufgabe 1.7 Da sich das Halteproblem bereits f¨ ur Programme ohne Eingabe nicht l¨ osen l¨ asst, gilt das erst recht f¨ ur Programme mit Eingabe. Schreiben Sie dazu ein Gegenbeispiel, das ein Programm als Eingabe erwartet, so dass der Aufruf des Gegenbeispiels mit sich selbst als Eingabe zu einem Widerspruch f¨ uhrt. Aufgabe 1.8 Verwandt mit dem Halteproblem aber doch viel einfacher und vor Allem l¨ osbar ist die folgende Aufgabe: Schreiben Sie ein C-Programm, das seinen Quelltext auf dem Bildschirm ausgibt. Das Programm soll aber nicht die Quelltextdatei lesen. Die Schwierigkeit besteht darin, dass beim Hinzuf¨ ugen einer printf-Anweisung auch die Ausgabe l¨ anger wird, was dann vielleicht wieder eine weitere printfAnweisung erforderlich macht. Diesen (rekursiven) Teufelskreis, der zu einem unendlich langen Programm f¨ uhren w¨ urde, gilt es geschickt zu durchbrechen. Aufgabe 1.9 Ebenfalls verwandt mit dem Halteproblem und mindestens ebenso problematisch ist die Frage nach der Allmenge A, das ist die Menge aller Mengen. Hier haben wir direkt auch eine Rekursion, da A ∈ A gelten muss. Diese Menge kann es nicht geben. Um das zu zeigen, nehmen Sie an, dass es sie gibt und zerlegen sie in zwei disjunkte Teilmengen A = A1 ∪ A2 , wobei A1 die Menge aller Mengen ist, die sich selbst als Element enthalten und A2 die Menge aller Mengen ist, die sich selbst nicht als Element enthalten. In welcher Menge finden Sie A2 ?
1.2.5
Vollst¨ andige Induktion
Einer besonderen Variante des direkten Beweises mittels Folgerungen begegnet man in der Informatik h¨ aufig: der vollst¨ andigen Induktion. Wir schweifen jetzt erst einmal ab und betrachten als Beispiel einen sehr einfachen Sortieral-
1.2 Logik
27
gorithmus, dessen Laufzeit wir untersuchen wollen. Die Formel, mit der wir die Laufzeit beschreiben werden, wird mit vollst¨ andiger Induktion bewiesen. Algorithmus 1.4 Einfaches Sortierverfahren for i := 1 bis n − 1 do for j := i + 1 bis n do if val[i] >val[j] then tausche(val[i], val[j]) Wir gehen davon aus, dass die zu sortierenden Daten in einem Array val gespeichert sind. Zun¨ achst wird in Algorithmus 1.4 das kleinste Element der Daten an den Anfang des Arrays gebracht. Danach wird von den restlichen Daten wiederum das kleinste Element an die zweite Position des Arrays gebracht. Auf diese Art setzt sich das Verfahren fort, und die Zahlenfolge wird aufsteigend sortiert. Tab. 1.5 Zur Anzahl V der Vergleiche in Algorithmus 1.4
i
1
2
3
...
n−3
n−2
n−1
j
2, . . . , n
3, . . . , n
4, . . . , n
...
n − 2, . . . , n
n − 1, n
n
V
n−1
n−2
n−3
...
3
2
1
Wenn wir die Laufzeit des Algorithmus 1.4 bestimmen wollen, so u ¨ berlegen wir zun¨ achst, welche Operationen uns interessieren. Die Additionen, um die Schleifenvariablen zu erh¨ ohen, sind beim Sortieren nicht interessant. Typisch f¨ ur das Sortieren sind Vergleiche und Vertauschungen von Schl¨ usselwerten. Wir z¨ ahlen in Tabelle 1.5, wie oft zwei Werte verglichen werden. Dies ist auch eine Obergrenze f¨ ur die Anzahl der Vertauschungen. Um nun die maximale Anzahl von Vergleichen zu ermitteln, m¨ ussen wir die Werte der letzten Zeile aus Tabelle 1.5 summieren. Damit erhalten wir: V (n) =
n−1
k = 1 + 2 + 3 + . . . + n − 1.
(1.7)
k=1
(großes Sigma) wird verwendet, um kurz eine Summe Das Summen-Symbol mit vielen gleichartigen Summanden hinzuschreiben. n−1
ak := a1 + a2 + · · · + an−1 .
k=1
Dabei verwendet man eine Laufvariable, auch Index genannt (hier k), die die ganzen Zahlen von einem Startwert (hier 1) bis zu einem Zielwert (hier n − 1) durchl¨ auft. Wenn die Laufvariable k von m bis n laufen soll, dann schreibt man n ur ¨ blicherweise der Startwert f¨ k=m . Unten am Summenzeichen steht also u
28
1 Grundlagen
die Laufvariable (hier k = m) und oben der Zielwert (hier n). F¨ ur jeden Wert der Laufvariable wird ein Summand berechnet und zur Summe addiert. Die Summanden d¨ urfen damit von der Laufvariablen abh¨ angen. Beispiel 1.12 a) Die Summe der ersten 5 Quadratzahlen kann man schreiben als 5
k2 = 12 + 22 + 32 + 42 + 52 = 1 + 4 + 9 + 16 + 25 = 55.
k=1
Lassen wir die Laufvariable in einem anderen Bereich laufen, ohne dass sich die Summe ¨ andert, z. B. 5
k2 =
k=1
6
(k − 1)2 =
k=2
2
(k + 3)2 = 55,
k=−2
dann sprechen wir von einer Index-Transformation. b) Die Summe der Zahlen von −1000 bis +1001 kann man schreiben als 1001
k = (−1000) + (−999) + (−998) + . . . + 999 + 1000 + 1001
k=−1000
= 1001 + 1000 − 1000 + 999 − 999 + · · · + 1 − 1 + 0 = 1001. An diesem Beispiel sieht man sehr sch¨ on, dass es hilfreich sein kann, die Summanden in einer anderen Reihenfolge aufzuschreiben, um den Wert der Summe zu berechnen. Dies darf man in der Regel nur bei endlichen Summen. n c) k=−n a = (2n + 1) · a, wobei a eine Konstante ist. Man beachte, dass es hier 2n + 1 Summanden gibt, da auch der Index 0 mitgez¨ ahlt werden muss. Die Summanden a sind hier nicht von der Laufvariablen k abh¨ angig. Neben dem Summenzeichen verwenden wir v¨ ollig analog ein Zeichen (großes Pi) f¨ ur das Produkt von vielen Zahlen: n
ak := a1 · a2 · a3 · · · an .
k=1
Wir kehren zum Sortieralgorithmus zur¨ uck und versuchen, eine geschlossene (d. h. ohne Summe auskommende) Formel f¨ ur (1.7) zu formulieren. Schon Carl Friedrich Gauß soll im 18. Jahrhundert als kleiner Junge erkannt haben, dass Folgendes gilt: Schreiben wir die Zahlen einmal aufsteigend und einmal abfallend sortiert untereinander, dann ist die Summe zweier u ¨bereinander stehender Zahlen immer genau n: aufsteigend
1
2
3
··· n − 3 n − 2 n − 1
abfallend n − 1 n − 2 n − 3 · · ·
3
2
1
···
n
n
n
Summe
n
n
n
.
1.2 Logik
29
Da es n − 1 Zahlenpaare sind, ergibt sich also der Wert (n − 1) · n als Summe der Zahlenpaare. Da wir aber nicht die Summe der Zahlenpaare berechnen wollen, sondern nur die Summe der einzelnen Werte, m¨ ussen wir den Wert noch durch 2 dividieren. Damit erhalten wir als Formel: n−1 k=1
k=
(n − 1) · n 1 = (n2 − n). 2 2
(1.8)
Halt! Stopp! Haben Sie auch das Gef¨ uhl, dass wir hier rechnen und rechnen, und fragen sich: Warum implementieren die nicht einfach den Algorithmus ” in einer konkreten Sprache wie C++ oder Java und messen die Laufzeit? Dann br¨ auchte man diese ganze Mathematik gar nicht“. Das ist nicht ganz falsch, aber auch nicht wirklich gut. Wenn wir eine Aufgabe mit verschiedenen Algorithmen l¨ osen k¨ onnen, m¨ ussen wir Algorithmen bewerten bzw. vergleichen. Wir fragen uns, ob ein Algorithmus besser als ein anderer ist. Wir fragen uns, wie schnell das Problem u ost werden kann. Gerade die letzte Frage ist sehr ¨berhaupt gel¨ theoretisch. Wie implementiert man einen Algorithmus, den man noch gar nicht kennt? Aber auch wenn wir nicht so esoterische Fragen stellen, wirft das Messen der Laufzeit einige Probleme auf. Welchen Einfluss haben unterschiedliche Betriebssysteme, Laufzeitumgebungen oder Compiler auf die Laufzeit? Welchen Einfluss hat die neueste Hardware auf die Laufzeit? K¨ onnte das Programm auf der Grafikkarte schneller ausgef¨ uhrt werden? Um die Einfl¨ usse zu verdeutlichen, haben wir unser kleines Sortierprogramm in C implementiert und auf unterschiedlichen Systemen getestet. Die erste Systemumgebung war ein uraltes Notebook mit Pentium III mobile, 1 GHz und 256 MB Hauptspeicher. Als Betriebssysteme dienten ein Linux mit Kernel 2.4.10 und eine Windows XP Home-Edition mit Service-Pack 1. Als Compiler war unter Linux der gcc 2.95.3 im Einsatz, unter Windows XP Home verrichtete der Borland C++ Compiler der Version 5.02 seinen Dienst. Als zweite Systemumgebung w¨ ahlten wir ein altes Notebook mit Pentium M (Centrino), 1,5 GHz und 512 MB Hauptspeicher. Als Betriebssystem war ein Linux mit Kernel 2.6.4 installiert, der Compiler gcc 3.3.3 durfte das Programm u ¨ bersetzen. Unter Windows XP Home (SP2) war der Borland C++ Compiler der Version 5.5.1 am Werk. Die Laufzeiten f¨ ur unterschiedlich lange Eingabefolgen sind in der Tabelle 1.6 angegeben. Aber was sagen uns diese Werte? Ist der ¨ altere Rechner so langsam, weil die Hardware langsamer ist, oder liegt es an der ¨ alteren Version des Compilers? Oder liegt es daran, dass nicht alle Daten im Hauptspeicher gehalten werden konnten und daher Cache-Effekte auftraten? Zumindest die extrem hohen Werte in der letzten Zeile lassen so etwas vermuten. W¨ are das Programm in einer anderen Sprache wie Java implementiert, w¨ urden wir wahrscheinlich noch andere Werte messen. Um diese vielen Einfl¨ usse zu reduzieren und dadurch Vergleichbarkeit zu erreichen, m¨ ussten wir alle Algorithmen in einer konkreten Sprache implementieren, mit einem konkreten Compiler u ¨ bersetzen, auf
30
1 Grundlagen
Tab. 1.6 Laufzeiten des Sortierprogramms auf unterschiedlicher Hardware (System 1 und 2) und unterschiedlichen Betriebssystemen f¨ ur Eingaben der Gr¨ oße n.
n 8192 16384 32768 65536 131072
System 1 Linux XP [s] 1 3 9 34 221
System 2 Linux XP [s]
0 2 4 17 137
1 2 6 21 72
0 1 3 9 29
einer konkreten Hardware mit konkretem Betriebssystem ausf¨ uhren und uns auf konkrete Eingabefolgen festlegen. Und dann passiert der gr¨ oßte anzunehmende Unfall: Das Referenzsystem geht kaputt, und es ist kein Rechner mehr aus dem Jahre 1793 aufzutreiben! Oder Unternehmen X behauptet, dass sein Programm nur deshalb so schlecht abschneidet, weil das Referenzsystem nicht mit der Technik Y ausgestattet ist. Ergebnisse w¨ aren also nicht u ¨ bertragbar, oder man m¨ usste mehrere Referenzsysteme haben und miteinander vergleichen. Wie Sie sehen, ist auch das Messen der Laufzeit nicht frei von Problemen. Daher wollen wir die Laufzeiten lieber mit Hilfe der Mathematik bestimmen. Kommen wir zur¨ uck zu der Formel (1.8) vom kleinen Gauß. Um diese Formel auch tats¨ achlich zu akzeptieren, geht der Mathematiker hin und beweist die Formel mittels vollst¨ andiger Induktion. In diesem Fall ist die obige Bestimmung der Summe eigentlich bereits ein Beweis. Oft kann aber die geschlossene Formel nicht so einfach bestimmt und bewiesen werden. Daher wollen wir an diesem Beispiel den Beweis durch vollst¨ andige Induktion vorf¨ uhren. F¨ ur jedes n ≥ 2 m¨ ussen wir den Wahrheitsgehalt der Formel, also den Wahrheitsgehalt der Aussage n−1
(n − 1) · n k= A(n) := 2 k=1
pr¨ ufen. Dazu wird die Formel zun¨ achst f¨ ur einen Startwert gezeigt. Wir nehmen den Wert n = 2 und stellen fest, dass die Formel f¨ ur diesen Wert gilt: 2−1 k=1
k=1=
(2 − 1) · 2 . 2
A(2) ist also wahr. Dieser Beweisschritt heißt Induktionsanfang. Er war einfach. Jetzt m¨ ussen wir das Gleiche nur noch f¨ ur die Werte n = 3, n = 4, . . . tun. Damit w¨ aren wir aber unendlich lange besch¨ aftigt. Daher zeigt man, dass wenn f¨ ur ein n ≥ 2 die Aussage A(n) gilt, auch die Aussage A(n + 1) wahr ist. Die Voraussetzung f¨ ur den n¨ achsten Beweisschritt ist also, dass A(n) f¨ ur ein
1.2 Logik
31
beliebiges, festes n ≥ 2 wahr ist. Diese Voraussetzung nennt man Induktionsannahme (oder Induktionsvoraussetzung). Der Beweis, dass unter dieser Annahme auch A(n + 1) wahr ist, ist der Induktionsschluss (oder der Induktionsschritt): (n+1)−1
n−1 k = k +n
k=1
k=1
(n − 1) · n +n 2 (n − 1) · n 2n = + 2 2 [2 + (n − 1)] · n = 2 (n + 1) · n = 2
=
(letztes Element aus der Summe abtrennen) (Einsetzen der Induktionsannahme) (Hauptnenner bilden) (Faktoren zusammenfassen) (Summe bilden).
Wir erhalten durch diese Rechnung genau die Formel, die wir erwarten w¨ urden, wenn wir in der urspr¨ unglichen Formel f¨ ur n den Wert n + 1 einsetzen. Damit ist gezeigt, dass unter der Voraussetzung, dass A(n) gilt, dann auch A(n + 1) gilt. Insbesondere haben wir bewiesen, dass A(n) =⇒ A(n + 1) f¨ ur alle n ≥ 2 wahr ist. Denn um zu zeigen, dass eine Folgerung wahr ist, m¨ ussen wir nur den Fall betrachten, dass die linke Seite wahr ist. Nur dann muss auch die rechte Seite wahr sein. Damit ist man bereits fertig und hat die Aussage f¨ ur jeden Parameterwert als wahr identifiziert: Aus der wahren Aussage A(2) folgt mittels der zutreffenden Folgerung A(n) =⇒ A(n + 1): n=2
n=3
n=4
A(2) =⇒ A(3) =⇒ A(4) =⇒ A(5) =⇒ . . . Das ist wie beim Umfallen von Dominosteinen: Weiß man, dass, wenn ein Stein f¨ allt (A(n) ist wahr) auch sein Nachfolger f¨ allt (dann ist A(n+1) wahr), so reicht das Umwerfen des ersten Steins (hier: A(2) ist wahr), um in einer Kettenreaktion auch alle anderen umzuwerfen: Da A(2) wahr ist, ist auch A(3) wahr. Da A(3) wahr ist, ist auch A(4) wahr usw. Wir werden die vollst¨ andige Induktion noch sehr oft in diesem Buch anwenden, so dass diese f¨ ur Sie noch vertrauter wird. Das Konzept der vollst¨ andigen Induktion ist sehr eng verwandt mit der rekursiven Programmierung, die nach unserer Erfahrung ebenfalls oft nur schwer verstanden wird und daher ge¨ ubt n onnte (iterativ) mit einem Programm wie werden muss. Die Summe k=1 k k¨ in Algorithmus 1.5 ermittelt werden. Die Summe kann allerdings auch mittels einer rekursiven Funktion berechnet werden. Rekursiv heißt, dass sich die Funktion bei der Ausf¨ uhrung selbst wieder aufruft. Das macht sum in Algorithmus 1.6. Wird diese Funktion mittels sum(4) aufgerufen, so erhalten wir folgende Berechnungskette:
32
1 Grundlagen
Algorithmus 1.5 Iterative Summenberechnung summe := 0 for i := 1 bis n do summe := summe +i
sum(4) = sum(3) + 4 = (sum(2) + 3) + 4 = ([sum(1) + 2] + 3) + 4 = ([1 + 2] + 3) + 4.
Algorithmus 1.6 Rekursive Summenberechnung function sum(n) if n = 1 then return 1 else return sum(n − 1) + n Damit das rekursive Aufrufen der Funktion irgendwann einmal endet und wir keine Endlosschleife programmieren, muss ein Rekursionsende angegeben werden. Dieses finden wir in der ersten Zeile der Funktion: Falls die Funktion mit dem Wert eins aufgerufen wird, kann das Ergebnis direkt zur¨ uck gegeben und die Funktion beendet werden. Das Rekursionsende nennen wir bei der vollst¨ andigen Induktion den Induktionsanfang. Der Induktionsschluss wird hier rekursiver Aufruf genannt. Eng verwandt mit der vollst¨ andigen Induktion sind auch formale Korrektheitsbeweise. Bei der Entwicklung von Software testet man, um Fehler zu finden. Dabei wird man bei gr¨ oßeren Programmen nie alle Fehler finden. Wenn, wie in der Raumfahrt oder Medizin, Fehler erhebliche Konsequenzen haben k¨ onnen, dann kann es notwendig werden, die Korrektheit von Programmen formal zu beweisen (wobei man dann leider auch wieder Fehler machen kann und die Unterst¨ utzung eines Softwarewerkzeugs ben¨ otigt). Algorithmus 1.7 Suche des Maximums max := a[0] for k := 1 bis n do if a[k] > max then max := a[k] Wir betrachten mit Algorithmus 1.7 ein Programmfragment, das den gr¨ oßten Zahlenwert aller in einem Array a[ ] gespeicherten n+1 Zahlen a[0], a[1],. . . , a[n] finden soll: Die Beweisidee f¨ ur die Korrektheit besteht in der Verwendung einer Schleifeninvariante. Das ist eine Bedingung, die vor dem ersten Durchlauf und nach jedem Schleifendurchlauf erf¨ ullt ist. Wir w¨ ahlen hier die Invariante: Nach dem k-ten Schleifendurchlauf ist max die gr¨ oßte der Zahlen a[0], a[1], ” . . . a[k]“. Wenn wir diese Bedingung zeigen k¨ onnen, dann liefert das Programm
1.2 Logik
33
nach den n programmierten Schleifendurchl¨ aufen tats¨ achlich das gesuchte Maximum. Die Schleifeninvariante zeigt man nun analog zur vollst¨ andigen Induktion. Dem Induktionsanfang entspricht die Initialisierung max := a[0]. Nach null Schleifendurchl¨ aufen (also vor dem ersten Durchlauf) ist die Bedingung also erf¨ ullt. Jetzt m¨ ussen wir zeigen: Ist die Bedingung nach k Durchl¨ aufen erf¨ ullt (Induktionsannahme), dann auch nach k + 1 (Induktionsschluss). Das ist hier aber offensichtlich, da das bisherige Maximum mit dem k + 1-ten Wert verglichen und entsprechend modifiziert wird. Korrektheitsbeweise im Stile einer vollst¨ andigen Induktion werden wir f¨ ur einige Graph-Algorithmen durchf¨ uhren, damit wir ihre Funktionsweise besser verstehen. Wir sehen uns ein weiteres Beispiel f¨ ur eine vollst¨ andige Induktion an. Dazu betrachten wir eine Datenstruktur, die einer Informatikerin immer wieder u ¨ ber den Weg l¨ auft: den Bin¨ arbaum. Wir sind ihm als Entscheidungsbaum bereits in Abbildung 1.2 auf Seite 5 begegnet. Ein Bin¨ arbaum besteht aus Knoten, in denen Daten gespeichert werden. Es gibt einen ausgezeichneten Knoten – die Wurzel. Die Wurzel hat keinen Vorg¨ angerknoten, alle anderen Knoten haben genau einen Vorg¨ anger. Jeder Knoten hat null bis zwei (daher der Name) Nachfolger, siehe Abbildung 1.5. Ein Knoten ohne Nachfolger heißt Blatt. Die graphische Darstellung eines Baumes ist f¨ ur Nicht-Informatiker schwer verst¨ andlich: Die Wurzel ist oben, und die Bl¨ atter des Baums sind unten. Das ist in der Botanik oft anders. Die Knoten werden in Ebenen angeordnet, wobei die Nachfolger eines Knotens auf der jeweils n¨ achsten Ebene gezeichnet werden. Die H¨ ohe eines Bin¨ arbaums ist die Anzahl seiner Ebenen, wobei die Ebene 0 der Wurzel nicht mitgez¨ ahlt wird. 20 2 2 2
1
Abb. 1.5 In einem Bin¨ arbaum hat jeder Knoten maximal zwei Nachfolger. Der oberste Knoten ist die Wurzel, die Knoten der untersten Ebene sind die Bl¨ atter. Die Zahlen sind die maximale Knotenzahl der Ebene.
2 3
Hier fragen wir uns, wie viele Elemente ein Bin¨ arbaum der H¨ ohe h maximal speichern kann. Ein Bin¨ arbaum der H¨ ohe 0 besteht nur aus einem einzigen Knoten. Dieser Knoten kann bei einem Baum der H¨ ohe 1 ein bis zwei Nachfolger haben, also k¨ onnen maximal drei Elemente gespeichert werden. Jeder Knoten der ersten Ebene kann wiederum jeweils zwei Nachfolger speichern usw., wir arbaum der H¨ ohe erhalten also in der Ebene l maximal 2l viele Knoten. Ein Bin¨ h hat also maximal h l=0
2l = 20 + 21 + 22 + 23 + . . . + 2h
34
1 Grundlagen
viele Elemente gespeichert. Auch dies wollen wir wieder in einer geschlossenen Formel darstellen. In Matheb¨ uchern (wie diesem) findet man f¨ ur q = 0 und q = 1 unter dem Stichwort geometrische Summe die Formel h l=0
ql =
q h+1 − 1 . q−1
(1.9)
Der Name der Formel erkl¨ art sich, wenn wir q = 12 setzen. Darauf kommen wir sp¨ ater zur¨ uck, wenn wir unendliche Summen betrachten (vgl. Abbildung 4.9 auf Seite 216). F¨ ur q = 2 folgt aus (1.9), dass ein Bin¨ arbaum der H¨ ohe h insgesamt 2h+1 − 1 viele Elemente speichern kann. Bei h = 20 sind das schon 221 − 1 = 2 097 151. Das reicht aus, um die Daten eines Telefonbuchs einer Stadt wie D¨ usseldorf aufzunehmen (vgl. Seite 5). Auch hier zeigt die vollst¨ andige Induktion die Korrektheit der Formel. Wir beginnen mit dem Induktionsanfang f¨ ur h = 0: 0
ql = q0 = 1 =
l=0
q1 − 1 . q−1
Nachdem wir f¨ ur die erste Zahl h = 0 gezeigt haben, dass die Formel gilt, m¨ ussen wir nun zeigen, dass die Formel f¨ ur h + 1 aus der Formel f¨ ur h folgt. Induktionsannahme: F¨ ur eine beliebige, im Folgenden nicht mehr ver¨ anderte Zahl h ∈ N0 gelte die Formel (1.9). Induktionsschluss: Unter dieser Annahme m¨ ussen wir zeigen, dass die Formel auch f¨ ur h + 1 gilt: h h+1 l l q = q + q h+1 (letzten Wert abtrennen) l=0
l=0
q h+1 − 1 = + q h+1 q−1
(Induktionsannahme verwenden)
=
q h+1 − 1 (q − 1) · q h+1 + (Hauptnenner bilden) q−1 q−1
=
q h+2 − q h+1 q h+1 − 1 + q−1 q−1
(ausmultiplizieren)
=
q h+2 − 1 q−1
(Summe bilden).
Damit haben wir die geschlossene Formel (1.9) f¨ ur alle h ≥ 0 bewiesen, da wir durch diese Rechnung genau die Formel erhalten haben, die durch Einsetzen von h + 1 in (1.9) entsteht.
1.2 Logik
35
Da ein Bin¨ arbaum der H¨ ohe h maximal 2h+1 − 1 Elemente besitzen kann, muss ein Bin¨ arbaum mit n Knoten mindestens eine H¨ ohe h mit 2h+1 − 1 ≥ n haben. Die f¨ ur einen Bin¨ arbaum mit n Knoten minimal m¨ ogliche H¨ ohe h erf¨ ullt also (1.10) 2h − 1 < n ≤ 2h+1 − 1 ⇐⇒ 2h ≤ n < 2h+1 . Diese H¨ ohe entsteht z. B., wenn wir alle Ebenen bis auf die letzte vollst¨ andig mit Knoten f¨ ullen. Andererseits entsteht die maximale H¨ ohe, wenn jeder Knoten h¨ ochstens einen Nachfolger hat. Dann ist der Bin¨ arbaum eine lineare Liste: h = n − 1. Aufgabe 1.10 Beweisen Sie mit vollst¨ andiger Induktion f¨ ur nat¨ urliche Zahlen n, m ≥ 1: n−1 k=1
2n3 − 3n2 + n k = , 6 2
n n+2 k =2− , 2k 2n
k=1
n k=1
3
k =
n
2 k
.
k=1
Aufgabe 1.11 Nehmen Sie an, dass Sie vor einer unendlich langen Mauer stehen, die links oder rechts von Ihnen eine T¨ ur hat, durch die Sie auf die andere Seite der Mauer gelangen k¨ onnen. Sie wissen nur leider nicht, ob sich die T¨ ur links oder rechts von Ihnen befindet. Wie finden Sie in endlicher Zeit diese T¨ ur? Wenn die T¨ ur l Meter von Ihrer Anfangsposition entfernt ist, wie viele Meter legen Sie bei Ihrer L¨ osung h¨ ochstens zur¨ uck?
1.2.6
Resolutionskalk¨ ul
In diesem Abschnitt beweisen wir mittels einer etwas aufw¨ andigeren vollst¨ andigen Induktion den Resolutionskalk¨ ul der Aussagenlogik. Dieser Kalk¨ ul ist die Grundlage der Logikprogrammierung und damit nicht nur f¨ ur Logiker, sondern auch f¨ ur Informatiker interessant, die beispielsweise die Sprache Prolog einsetzen oder ein Expertensystem schreiben wollen. Der Abschnitt ist f¨ ur das Verst¨ andnis des restlichen Buchs aber nicht erforderlich, so dass Sie ihn u onnen ¨ berspringen k¨ – was aber schade w¨ are. Wir untersuchen hier die Frage, ob eine gegebene Formel unerf¨ ullbar ist. In der Aussagenlogik ist der Test auf Unerf¨ ullbarkeit aber sehr einfach: Probiere alle Variablenbelegungen (wahr/falsch) aus. Falls immer falsch herauskommt, ist die Formel unerf¨ ullbar. Bei n Variablen gibt es damit 2n Versuche im schlechtesten Fall. Leider klappt das Ausprobieren bei Formeln der Pr¨ adikatenlogik nicht mehr. Hier gibt es Variablen, die irgendwelche Werte wie Zahlen annehmen d¨ urfen. Ein Pr¨ adikat A(x) kann in Abh¨ angigkeit der unendlich vielen Zahlenwerte von x wahr oder falsch werden. Wir k¨ onnen aber nicht f¨ ur jeden Zahlenwert
36
1 Grundlagen
A(x) = wahr und A(x) = falsch probieren. Daher benutzt man den Resolutionskalk¨ ul. Obwohl wir den Resolutionskalk¨ ul f¨ ur die Aussagenlogik eigentlich gar nicht ben¨ otigen, erkl¨ aren wir dessen Funktionsweise. Denn er funktioniert genau so wie in der Pr¨ adikatenlogik, ist aber viel einfacher zu verstehen. Danach sehen wir uns an einem Beispiel an, wie er auf die Pr¨ adikatenlogik u ¨bertragen werden kann. Wir beginnen mit einer Problem, das mit der Aussagenlogik gel¨ ost werden kann. Drei Personen stehen unter Verdacht, eine Straftat (eventuell gemeinsam) begangen zu haben. Erwiesen ist: Wenn A schuldig und B unschuldig ist, dann ist C schuldig. C arbeitet niemals allein, d. h., wenn C schuldig ist, dann auch A oder B. A arbeitet niemals mit C, d. h., wenn A schuldig ist, dann ist C unschuldig. Nur A, B oder C kommen als T¨ ater in Frage. Wir vermuten, dass B einer der T¨ ater ist und wollen dies beweisen. Dazu u uhren wir das Problem in eine aussagenlogische Aussage mit den Varia¨ berf¨ blen A, B und C, wobei eine Variable genau dann wahr sein soll, wenn die entsprechende Person ein T¨ ater ist: (A ∧ ¬B =⇒ C) ∧ (C =⇒ A ∨ B) ∧ (A =⇒ ¬C) ∧ (A ∨ B ∨ C) ∧ ¬B. Hier haben wir zu den erwiesenen Daten ¬B hinzugef¨ ugt. Wenn wir zeigen k¨ onnen, dass diese Formel unerf¨ ullbar ist, dann kann das nicht an den erwiesenen Aussagen liegen, nur ¬B kann nicht stimmen, B muss also T¨ ater sein. Seien A1 , A2 , A3 , . . . aussagenlogische Variablen. Eine endliche Menge K ⊂ {A1 , A2 , A3 , . . . } ∪ {¬A1 , ¬A2 , ¬A3 , . . . } heißt eine Klausel. Die Konjunktionsglieder einer konjunktiven Normalform (siehe Seite 17) k¨ onnen u ¨ ber Klauseln dargestellt werden. Bei einer konjunktiven Normalform sind Terme durch Und verkn¨ upft, die ihrerseits nur Oder-Verkn¨ upfungen von negierten oder nicht-negierten Variablen aufweisen. In unserem Beispiel erhalten wir durch Aufl¨ osen der Folgerungen die konjunktive Normalform (¬(A ∧ ¬B) ∨ C) ∧ (¬C ∨ A ∨ B) ∧ (¬A ∨ ¬C) ∧ (A ∨ B ∨ C) ∧ ¬B = (¬A ∨ B ∨ C) ∧ (¬C ∨ A ∨ B) ∧ (¬A ∨ ¬C) ∧ (A ∨ B ∨ C) ∧ ¬B. Die Menge K der Klauseln zu den Konjunktionsgliedern einer aussagenlogischen Formel heißt die zugeh¨ orige Klauselmenge. Im Beispiel lautet sie {{¬A, B, C}, {A, B, ¬C}, {¬A, ¬C}, {A, B, C}, {¬B}}. Wir f¨ uhren nun eine Verkn¨ upfung von Klauseln ein, mit der wir anschließend Klauseln so weit vereinfachen, dass wir Unerf¨ ullbarkeit erkennen k¨ onnen. Dabei suchen wir nach einer Variablen, die einmal negiert und einmal nicht negiert
1.2 Logik
37
vorkommt und nutzen sp¨ ater aus, dass bei jeder Belegung der Variablen an einer Stelle der Wert wahr und an der anderen der Wert falsch vorliegt. Seien dazu K1 , K2 und R Klauseln. R heißt Resolvente von K1 und K2 , falls es eine aussagenlogische Variable A gibt mit A ∈ K1 und ¬A ∈ K2 und R = (K1 \ {A}) ∪ (K2 \ {¬A}) oder A ∈ K2 und ¬A ∈ K1 und R = (K1 \ {¬A}) ∪ (K2 \ {A}). Beispielsweise k¨ onnen wir {A, B, ¬C} und {A, ¬B, ¬C} zu {A, ¬C} resolvieren. Sei K eine Klauselmenge. Wir bezeichnen die Menge aller Resolventen von Klauseln aus K mit Res(K) := K ∪ {R : R ist Resolvente zweier Klauseln von K}. Die Ergebnisse der Resolution k¨ onnen f¨ ur weitere Resolutionen herangezogen werden. Damit erhalten wir (rekursiv) die Mengen Res0 (K) := K,
Resn+1 (K) := Res (Resn (K)) ,
Res∗ (K) := Res0 (K) ∪ Res1 (K) ∪ Res2 (K) ∪ . . . Wir berechnen einige Resolventen f¨ ur unser Beispiel: Aus {¬A, B, C} und {A, B, C} resolvieren wir {B, C}. Aus {A, B, ¬C} und {¬A, ¬C} entsteht {B, ¬C}. Damit k¨ onnen wir die beiden vorangehenden Ergebnisse zu {B} resolvieren. Schließlich ergibt Resolution von {B} mit der Klausel {¬B} die leere Menge. Aufgabe 1.12 ¨ Uberlegen Sie sich, dass f¨ ur eine Formel mit endlich vielen Variablen irgendwann die Resolventenmengen nicht weiter anwachsen, d. h., dass es ein n0 gibt mit ur alle n > n0 . Resn+1 (K) = Resn (K) f¨
Lemma 1.13 (Unerf¨ ullbarkeit bleibt unter Resolution erhalten) F¨ ugen wir Resolventen als weitere Konjunktionsglieder einer aussagenlogischen Formel in konjunktiver Normalform hinzu, dann ¨ andert sich die Erf¨ ullbarkeit oder Unerf¨ ullbarkeit der Formel nicht.
Beweis Falls die Formel zu K unerf¨ ullbar ist und weitere Klauseln hinzukommen, dann ist die Formel zur neuen Menge erst recht unerf¨ ullbar. Denn die einzelnen Klauseln geh¨ oren zu und-verkn¨ upften Termen. Damit ist also auch die ullbar. Formel zu Res(K) unerf¨
38
1 Grundlagen Falls die Formel zu K erf¨ ullbar ist: Beide Eingangsklauseln eines Resolutionsschritts geh¨ oren zu Formeln, die mit einer Variablenbelegung erf¨ ullt sind. Damit ist auch die Formel zur Resolvente erf¨ ullt, z.B.: Ist (A ∨ B ∨ ¬C) ∧ (¬A ∨ ¬C ∨ D) erf¨ ullt, so ist – bei A = wahr aufgrund der zweiten Klausel ¬C ∨ D wahr, – bei A = falsch ist aufgrund der ersten Klausel B ∨ ¬C wahr. Also ist B ∨ ¬C ∨ D bzw. {B, ¬C, D} wahr.
Damit haben wir gezeigt: Unter wiederholter Resolution ¨ andert sich die Erf¨ ullbarkeit nicht. Da wir im Beispiel die leere Klausel erreicht haben, wissen wir aufgrund des folgenden Satzes, dass unsere Formel unerf¨ ullbar und B ein T¨ ater ist: Satz 1.14 (Resolutionskalk¨ ul der Aussagenlogik) Eine Formel in konjunktiver Normalform mit Klauselmenge K ist genau dann unerf¨ ullbar, falls ∅ ∈ Res∗ (K). ullbar. Zun¨ achst Beweis Wir zeigen die Richtung ∅ ∈ Res∗ (K) =⇒ Formel unerf¨ ∗ k k aquivalent zu ∅ ∈ Res (K) f¨ ur ein k ∈ N. Sei also ∅ ∈ Res (K): ist ∅ ∈ Res (K) ¨ In Resk−1 (K) gibt es dann zwei Klauseln vom Typ {A} und {¬A}, da nur durch deren Resolution die leere Klausel entstehen kann. A ∧ ¬A ist aber unerf¨ ullbar, k−1 (K) unerf¨ ullbar und somit auch K, da gem¨ aß Lemma 1.13 beide also ist Res Mengen die gleiche Erf¨ ullbarkeit haben. ullbar Es bleibt die umgekehrte Richtung zu zeigen: Falls die Formel zu K unerf¨ ist, dann kann man durch fortgesetzte Resolution die leere Menge erzeugen. Wir beweisen dies mit einer vollst¨ andigen Induktion u ¨ ber die Anzahl der Variablen n einer Klauselmenge K. Induktionsanfang f¨ ur n = 1: K = {{A}, {¬A}} oder K = {{A}, {¬A}, {A, ¬A}} sind die einzigen Klauselmengen zu einer unerf¨ ullbaren Formel in konjunktiver Normalform mit der einzigen Variable A, und ∅ entsteht bei der Resolution. Induktionsannahme: Fortgesetzte Resolution liefert f¨ ur jede Klauselmenge zu einer unerf¨ ullbaren Formel mit n Variablen A1 , A2 , . . . , An die leere Menge. Induktionsschluss: Wir zeigen, dass auch f¨ ur jede Klauselmenge K zu einer unerf¨ ullbaren Formel mit n + 1 Variablen A1 , A2 , . . . , An+1 die leere Menge resolviert werden kann. – K0 entstehe aus K durch Weglassen von An+1 aus allen Klauseln und Weglassen aller Klauseln mit ¬An+1 , wir belegen also An+1 mit dem Wert falsch und vereinfachen.
1.2 Logik
39
– K1 entstehe aus K durch Weglassen von ¬An+1 aus allen Klauseln und Weglassen aller Klauseln mit An+1 , wir belegen jetzt An+1 mit dem Wert wahr und vereinfachen. Da die Formel zu K unerf¨ ullbar ist, ist sie insbesondere f¨ ur die Variablen ullbar, wenn wir An+1 durch wahr oder falsch ersetzen. DaA1 , . . . , An unerf¨ ullbar. Wie wir gleich zeigen mit sind auch die Formeln zu K0 und zu K1 unerf¨ werden, k¨ onnen wir f¨ ur beide Klauselmengen mittels Resolution ∅ erzeugen: ∅ ∈ Res∗ (K0 ),
∅ ∈ Res∗ (K1 ).
F¨ ugt man An+1 den Klauseln aus K0 und ¬An+1 den Klauseln aus K1 wieder hinzu, aus denen sie zuvor entfernt wurden, so liefert die Resolution f¨ ur das ˜ ur das erweiterte K0 ⊂ K eine Menge, in der ∅ oder {An+1 } enthalten ist, f¨ ˜0 ∪ K ˜ 1 , ist ˜ 1 ⊂ K ist ∅ oder {¬An+1 } enthalten. Falls ∅ ∈ K erweiterte K ∅ ∈ Res∗ (K), und wir sind fertig. Sonst ist {{An+1 }, {¬An+1 }} ⊂ Res∗ (K˜0 ) ∪ Res∗ (K˜1 ) ⊂ Res∗ (K). Die Resolvente von beiden Mengen ist ∅, also gilt ∅ ∈ Res∗ (K). Im Beweis mittels Induktion werden also aus einer Formel mit n + 1 Variablen zwei neue Formeln mit n Variablen erzeugt, aus denen ihrerseits jeweils die leere Klausel resolviert werden kann. Mit dem Resolutionskalk¨ ul k¨ onnen wir auch die Unerf¨ ullbarkeit von pr¨ adikatenlogischen Formeln zeigen. Dabei sind zwei Klauseln, in denen ein Pr¨ adikat einmal negiert und einmal nicht-negiert vorkommt, fast wie zuvor resolvierbar. Allerdings m¨ ussen dabei die Parameter der Pr¨ adikate so angeglichen werden, dass sie u ¨ bereinstimmen. Dies nennt man Unifikation. Wenn die Unifikation nicht durchf¨ uhrbar ist, dann darf auch nicht resolviert werden. Die Idee der Logikprogrammierung und insbesondere der Programmiersprache Prolog besteht darin, Werte f¨ ur Variablen einer Anfrage so zu bestimmen, dass mit diesen Werten Programm =⇒ Anfrage allgemeing¨ ultig wird. Dabei ist ein Programm eine Kollektion von Regeln und Fakten, wobei sich ein Programm als pr¨ adikatenlogische Formel in konjunktiver Normalform schreiben l¨ asst. Wir sehen uns das am Beispiel (1.5) von Seite 24 an, das wir zun¨ achst mit der Menge V = {a, b, c, d} von Knoten und den Variablen X, Y und Z, die wir zur Abgrenzung gegen die Konstanten jetzt groß schreiben, so umformulieren: W (a, b) ∧ W (b, c) ∧ W (c, d) ∧ (∀X∈V ∀Y ∈V ∀Z∈V W (X, Z) ∧ W (Z, Y ) =⇒ W (X, Y )) .
40
1 Grundlagen
Dies ist eine Definition der Wege in einem Graphen mit den Kanten (a, b), (b, c) und (c, d). Als Programm zur Wegsuche erhalten wir wegen (W (X, Z) ∧ W (Z, Y ) =⇒ W (X, Y )) = (¬(W (X, Z) ∧ W (Z, Y )) ∨ W (X, Z)) = (¬W (X, Z) ∨ ¬W (Z, Y ) ∨ W (X, Z)) daraus die Klauselmenge {{W (a, b)}, {W (b, c)}, {W (c, d)}, {¬W (X, Z), ¬W (Z, Y ), W (X, Y )}}. Die letzte Klausel ist eine Kurzschreibweise: Sie steht f¨ ur alle Klauseln, die man durch Einsetzen der Werte von V in die Variablen gewinnen kann. Es gibt genau dann einen Weg von a nach c im Sinne des Programms, wenn Programm =⇒ W (a, c) allgemeing¨ ultig ist, d. h., f¨ ur jede Wahrheitswertebelegung der 16 m¨ oglichen Wahrheitswerte von W in Abh¨ angigkeit der Parameter, also von W (a, a), W (a, b), . . . , W (d, d), muss die Folgerung wahr werden. Das Pr¨ adikat W (X, Y ) l¨ asst sich also hier durch 16 aussagenlogische Variablen ersetzen. Dabei interessiert nicht die Anschauung, dass wir W mit Weg verbinden. Die Folgerung muss f¨ ur alle m¨ oglichen Wahrheitswertebelegungen wahr sein. Wir verlangen also eine stets wahre Folgerung wie in Beweisen. Eine Bedingung erw¨ achst daraus nur, wenn durch die Belegung das Programm wahr wird, also alle einzelnen und-verkn¨ upften Fakten und Regeln des Programms erf¨ ullt sind. Die Allgemeing¨ ultigkeit bedeutet, dass dann stets auch W (a, c) gilt. Dieser Fall passt dann auch zu unserer Interpretation von W als Weg-Pr¨ adikat. Statt auf Allgemeing¨ ultigkeit zu testen, wendet man den Unerf¨ ullbarkeitstest mittels Resolution an. Die Aufgabe ist ¨ aquivalent dazu, Werte f¨ ur die Variablen einer Anfrage zu bestimmen, so dass f¨ ur diese Werte ¬(Programm =⇒ Anfrage) = ¬(¬Programm∨Anfrage) = Programm∧¬Anfrage ullbar wird. Die Klauselmenge des Programms wird also um die Klausel unerf¨ {¬Anfrage} erweitert, im Beispiel wird {{W (a, b)},{W (b, c)},{W (c, d)},{¬W (X, Z),¬W (Z, Y ),W (X, Y )},{¬W (a, c)}} auf Unerf¨ ullbarkeit getestet: Wir resolvieren {¬W (X, Z), ¬W (Z, Y ), W (X, Y )} mit {¬W (a, c)} zu {¬W (a, Z), ¬W (Z, c)}, indem wir X = a und Y = c setzen (Unifikation). {¬W (a, Z), ¬W (Z, c)} wird mit {W (a, b)} zu {¬W (b, c)} resolviert, wobei Z = b unifiziert wird. Schließlich f¨ uhrt Resolution von {¬W (b, c)} mit {W (b, c)} zur leeren Klausel.
1.3 Relationen und Abbildungen
41
Da wir die leere Klausel erhalten, folgt die Anfrage allgemeing¨ ultig aus dem Programm, d. h., es gibt einen Weg von a nach c. Logikprogramme beschreiben ein Problem, aber geben kein L¨ osungsverfahren an. Das Verfahren ist letztlich der Resolutionskalk¨ ul. Man spricht daher von deklarativer Programmierung (das Problem wird deklariert) im Gegensatz zur verbreiteten imperativen Programmierung, bei der mittels Befehlen vorgegeben wird, was zu tun ist. Diese Form der deklarativen Programmierung eignet sich z. B. zum Erstellen von Expertensystemen, f¨ ur die sich Fakten und Regeln direkt aus dem fachlichen Zusammenhang ergeben.
1.3
Relationen und Abbildungen
Eine Abbildung kennen Sie unter den Namen Funktion, Prozedur oder Methode vom Programmieren. Sie u ¨ bergeben der Funktion f Eingabeinformationen x und erhalten einen berechneten Wert y zur¨ uck: y = f (x). In vielen Programmiersprachen k¨ onnen Sie innerhalb einer Funktion auf weitere Daten lesend oder schreibend zugreifen und Ausgaben machen. Das Ergebnis y kann dann in Abh¨ angigkeit der u ¨brigen Daten variieren. Diese Seiteneffekte gibt es bei Funktionen in der Mathematik nicht: Der Ausgabewert y wird ausschließlich aus x berechnet, und es gibt auch keine Nebenausgaben“. Eine Funktion kann sich ” keinen Zustand f¨ ur den n¨ achsten Aufruf merken. Bei jedem Aufruf mit x erhalten wir das gleiche Ergebnis y, zu einem x gibt es also genau ein y. Einige funktionale Programmiersprachen wie Haskell oder Erlang erzwingen ebenfalls dieses Verhalten. Um es Ihnen nicht zu einfach zu machen, werden wir Funktionen im Folgenden u ¨ ber ein wichtiges Modell der Theoretischen Informatik motivieren: Automaten. Dieses Modell hat den Vorteil“, dass wir nicht nur Funktionen, sondern auch ” die allgemeineren Relationen ben¨ otigen. Diese bilden wiederum die Grundlage der relationalen Datenbanken.
1.3.1
Automaten
Ein Modell, das in der Informatik oft verwendet wird, um dynamische Abl¨ aufe darzustellen, ist der Automat. Die Hardware, mit der wir t¨ aglich arbeiten, wird in der Elektrotechnik, speziell in der Digitaltechnik, mittels Automaten beschrieben. Im Abschnitt Logik haben wir in Abbildung 1.4 auf Seite 14 ein Additionswerk kennen gelernt. F¨ ur jede zu addierende Stelle wird dort ein eigener Volladdierer eingesetzt. Wir k¨ onnen die Hardware wesentlich vereinfachen, wenn wir die Zahlen sequentiell mit einem Automaten addieren, der zudem f¨ ur Zahlen mit beliebig vielen Stellen funktioniert: Der Addierer auf der linken Seite in Abbil-
42
1 Grundlagen
dung 1.6 ersetzt eine Kette von Volladdierern. Die Bin¨ arzahlen werden an den Eing¨ angen E1 und E2 angelegt und vom Addierer schrittweise Stelle f¨ ur Stelle in einer zeitlichen Abfolge (sequentiell) von rechts nach links gelesen. Ebenso wird schrittweise die Summe am Ausgang A zur Verf¨ ugung gestellt. Wie ein solcher Rechenautomat realisiert werden kann, zeigt die rechte Seite in Abbildung 1.6. Dort ist ein Automat dargestellt, der zwei Zahlen in Bin¨ ardarstellung Ziffer f¨ ur Ziffer addiert und dabei jeweils eine Stelle der Summe ausgibt.
[] /0 [] /1 [] /1
[] /0 1 1
0 0
10011011 00110010
E1 Addierer E2
A
11001101
0 1
A
1 0
Start
0 1
B
[] /1 0 0
[] /0 [] /0 [] /1 1 0
1 1
Abb. 1.6 Automat zum bitweisen Addieren zweier Zahlen
Automaten k¨ onnen verschiedene Zust¨ ande annehmen, je nachdem, welche Eingabe gelesen wurde. Zust¨ ande werden als Kreise gezeichnet. Ein (deterministischer) Automat befindet sich immer in einem bestimmten Zustand, zu Beginn im Startzustand, der immer speziell gekennzeichnet ist. In unseren Abbildungen ist stets A der Startzustand. Die Pfeile in den Abbildungen zeigen m¨ogliche Zustandswechsel an. Bei dem Rechenautomaten besagt ein mit ee12 /p beschrifteter Pfeil, dass der Zustandswechsel ausgef¨ uhrt wird, falls an Eingabe E1 ein e1 und an Eingabe E2 ein e2 gelesen wird. Bei diesem Zustandswechsel wird p ausgegeben. Ein Automat, der bei Zustandswechseln eine Ausgabe erzeugt, heißt u ¨ brigens ein Mealy-Automat. Die ganze Logik des Beispielautomaten ¨ liegt darin zu unterscheiden, ob ein Ubertrag bei der letzten Addition aufge¨ treten ist oder nicht. Trat ein Ubertrag auf, so befindet sich der Automat im Zustand B, sonst in A. Werden zwei Ziffern im Zustand B addiert, muss auch ¨ noch ein Ubertrag addiert werden. Mealy-Automaten k¨ onnen Ausgaben erzeugen und sind deshalb etwas Besonderes. Wir wollen uns nach diesem einf¨ uhrenden Beispiel etwas einfachere Automaten ohne Ausgabe ansehen. In der Theoretischen Informatik finden wir Automaten in den Bereichen Berechenbarkeits- und Komplexit¨ atstheorie. In der Software-Entwicklung spielen die Automaten ebenfalls eine wichtige Rolle. So basiert das Entwurfsmuster Zustand“ auf Automaten. Oft kann eine Anforderungsspezifikation sehr pr¨ azise ” formuliert werden, wenn man das Problem mittels Automaten beschreiben kann. Auch das Testen der Software ist in solchen F¨ allen einfach. Im Compilerbau helfen Automaten z. B. beim Parsen von Programmtexten. Sie kennen vielleicht Syntax-Diagramme, mit denen Programmiersprachen beschrieben werden. Abbildung 1.7 stellt dar, wie Bezeichner in der Programmiersprache C++ auszusehen haben. Bezeichner d¨ urfen mit einem Unterstrich
1.3 Relationen und Abbildungen
43
Buchstabe
Buchstabe
Unterstrich
Unterstrich
Abb. 1.7 Bezeichner in C++ als Syntax-Diagramm
Ziffer
oder einem Buchstaben beginnen, d¨ urfen im Weiteren Buchstaben, Ziffern oder den Unterstrich enthalten und (theoretisch) beliebig lang sein. Solche einfachen Regeln k¨ onnen sehr effizient mittels Automaten gepr¨ uft werden. Abbildung 1.8 zeigt einen solchen Automaten. Dieser Automat entscheidet nur, ob die Eingabe eine bestimmte Form hat oder nicht. Das wird erreicht, indem die Eingabe sequentiell abgearbeitet wird: Bei jedem Zeichen wird ein Zustands¨ ubergang ausgef¨ uhrt, und am Ende wird gepr¨ uft, ob der Automat in einem akzeptierenden Endzustand ist. Ein solcher Zustand ist durch einen Doppelkreis gekennzeichnet. a, ..., ,z, _ 0, ..., 9 a, ..., z, _ A
Zeichen außer B a, ..., z, _, 0, ..., 9
Zeichen außer a, ..., z, _
alle Zeichen C
Abb. 1.8 Automat zum Erkennen von Bezeichnern in C++
Wie wir gerade gesehen haben, ist es die Aufgabe eines Automaten zu entscheiden, ob ein gegebenes Wort zu der Sprache geh¨ ort, die der Automat beschreibt. Eine Sprache ist immer eine Menge von W¨ ortern u ¨ber einem gegebenen Alphabet, also einer vorgegebenen Menge von Zeichen. Die Menge der W¨ orter kann unendlich groß sein, falls beliebig lange W¨ orter in der Sprache vorkommen. Als weiteres Beispiel betrachten wir den Automaten aus Abbildung 1.9. Die W¨ orter, die dieser Automat akzeptiert, beginnen mit einer 0, darauf folgen beliebig viele Nullen und Einsen. Aber die W¨ orter m¨ ussen mit zwei Einsen enden. Alle anderen Eingaben werden verworfen. Dazu ist der Automat wie in den vorangehenden Beispielen in einem Startzustand (wieder A), liest das erste Zeichen der Eingabe und f¨ uhrt ggf. einen Wechsel des Zustands durch, beispielsweise in den Zustand C, falls das erste Zeichen der Eingabe eine 0 ist. Dieses Verhalten wiederholt sich, bis alle Zeichen der Eingabe gelesen sind. Dann ist der Automat in einem Endzustand. Grunds¨ atzlich k¨ onnen alle Zust¨ ande Endzust¨ ande sein, sogar der Startzustand. Ist der erreichte Endzustand ein akzeptierender Endzustand, in der Abbildung 1.9 also durch einen Doppelkreis gekennzeichnet, dann wird die Eingabe akzeptiert, das gegebene Wort geh¨ ort zur Sprache. Ansonsten wird die Eingabe verworfen, das Wort geh¨ ort nicht zur Sprache.
44
1 Grundlagen
Aufgabe 1.13 Skizzieren Sie analog zum vorangehenden Beispiel einen Automaten, der W¨ orter aus Nullen und Einsen genau dann akzeptiert, wenn ihr zweitletztes Symbol eine Eins ist. Wir beschreiben jetzt endliche Automaten etwas exakter. 0/1 B 1 Start
A
0
0 C
1
D 1 0
0
1 E
Abb. 1.9 Deterministischer, endlicher Automat, der Worte erkennt, die mit 0 beginnen und mit 11 enden.
Definition 1.15 (endlicher Automat) Ein endlicher Automat (Q, Σ, δ, a, F ) wird durch ein 5-Tupel beschrieben. Dabei ist Q eine endliche Menge der Zust¨ ande, in denen sich der Automat befinden kann, und Σ ist das Alphabet, aus dem sich die W¨ orter der Eingabe zusammensetzen. Der Startzustand des Automaten ist a ∈ Q, die Menge der akzeptierenden Endzust¨ ande ist F ⊂ Q. Schließlich beschreibt δ ⊂ Q×Σ×Q die m¨ oglichen Zustandswechsel. Der Automat heißt endlich, weil er nur endlich viele Zust¨ ande besitzt. Die Menge F der akzeptierenden Endzust¨ ande kann auch nur aus einem einzigen Zustand bestehen, wie wir in unseren Beispielen mit F = {B} in Abbildung 1.8 und mit F = {E} in Abbildung 1.9 sehen. Die Zustandswechsel werden u ¨ ber Dreitupel beschrieben. Beim Automaten aus Abbildung 1.9 ist δ := {(A, 0, C), (A, 1, B), (B, 0, B), (B, 1, B), (C, 0, C), (C, 1, D), (D, 0, C), (D, 1, E), (E, 0, C), (E, 1, E)}. Dabei bedeutet (A, 0, C), dass wenn im Zustand A eine Null gelesen wird, der Automat in den Zustand C wechselt. Etwas kompakter k¨ onnen die Zustandswechsel auch u ber die Tabelle 1.7 beschrieben werden. Die Kopfzeile gibt dort ¨ den aktuellen Zustand an, die Zeile 0 enth¨ alt den Nachfolgezustand, falls das n¨ achste Zeichen der Eingabe eine 0 ist, die Zeile 1 enth¨ alt den Folgezustand, falls als n¨ achstes eine 1 gelesen wird. Wir sehen in der Tabelle, dass es f¨ ur jeden Tab. 1.7 Beschreibung der Zustandswechsel des Automaten aus Abbildung 1.9
0 1
A
B
C
D
E
C B
B B
C D
C E
C E
1.3 Relationen und Abbildungen
45
Zustand und jedes gelesene Zeichen genau einen Nachfolgezustand gibt. Solche Automaten nennen wir deterministisch. Gibt es dagegen zu einem Zustand und einem Zeichen kein Tupel, das einen Folgezustand beschreibt oder gibt es zu einem Zustand und einem Zeichen mehrere Folgezust¨ ande, dann heißt der Automat nicht-deterministisch. Die Automaten aus den Beispielen sind alle deterministisch – und die in den Beispielen beschriebene Verarbeitung einer Eingangsfolge durch einen Automaten funktioniert auch nur in dieser Form, wenn der jeweils n¨ achste Zustand eindeutig bestimmt ist. Bevor wir zu einem Beispiel f¨ ur einen nicht-deterministischen Automaten kommen, definieren wir aber erst einmal die Begriffe Relation und Funktion, um die es in diesem Kapitel haupts¨ achlich geht. Die Menge δ, die die Zustands¨ uberg¨ ange beschreibt, ist eine Relation: Definition 1.16 (Relation) Seien M1 , . . . , Mn Mengen. Eine Teilmenge von M1 ×M2 ×· · ·×Mn heißt eine Relation. Eine Relation ist also eine Menge von n-Tupeln. Eine Teilmenge are Relation, sie ist eine Menge von Paaren. von M1 × M2 heißt eine bin¨ Durch Setzen von Klammern kann jede Relation als bin¨ are Relation geschrieben werden. Wir schreiben die Relation des deterministischen Automaten aus Tabelle 1.7 z. B. so als bin¨ are Relation δ ⊂ M1 × M2 mit M1 = Q × Σ und M2 = Q: M1 := {(A, 0), (A, 1), (B, 0), (B, 1), (C, 0), (C, 1), (D, 0), (D, 1), (E, 0), (E, 1)}, M2 := {B, C, D, E}, δ := {((A, 0), C), ((A, 1), B), ((B, 0), B), ((B, 1), B), ((C, 0), C), ((C, 1), D), ((D, 0), C), ((D, 1), E), ((E, 0), C), ((E, 1), E)} ⊂ M1 × M2 . Jede Zustandswechselrelation δ ⊂ Q × Σ × Q kann so als bin¨ are Relation δ ⊂ (Q × Σ) × Q geschrieben werden. Auch wenn er kein endlicher Automat im Sinne unserer Definition ist, k¨ onnen wir selbst beim Mealy-Automaten die Zustands¨ uberg¨ ange zusammen mit den Ausgaben (siehe Abbildung 1.6) u ¨ ber eine bin¨ are Relation beschreiben, indem wir den Folgezustand und die Ausgabe zu einem Paar verbinden: = δMealy
((A, (0, 0)), (A, 0)), ((A, (0, 1)), (A, 1)), ((A, (1, 0)), (A, 1)), ((A, (1, 1)), (B, 0)), ((B, (0, 0)), (A, 0)), ((B, (0, 1)), (B, 0)), ((B, (1, 0)), (B, 0)), ((B, (1, 1)), (B, 1)) .
46
1 Grundlagen
Definition 1.17 (vom endlichen Automaten akzeptierte Sprache) Sei w = z1 z2 . . . zn ein Wort der L¨ ange n, wobei jedes Zeichen zi aus dem Alphabet Σ stammt. Der Automat akzeptiert das Wort w genau dann, wenn es eine Zustandsfolge (q0 , q1 , q2 , . . . , qn ) gibt, wobei q0 der Startzustand und qn ein akzeptierender Endzustand ist, und (qi−1 , zi , qi ) ∈ δ bzw. ur i ∈ {1, . . . , n} ein g¨ ultiger Zustandswechsel ist. Die ((qi−1 , zi ), qi ) ∈ δ f¨ Menge der W¨ orter, die ein endlicher Automat akzeptiert, nennen wir die vom Automaten akzeptierte Sprache. Die Automaten aus unseren Beispielen sind deterministisch, in diesem Fall ist δ nicht nur eine Relation, sondern eine Funktion: Definition 1.18 (Funktion) Eine bin¨ are Relation F ⊂ M1 × M2 heißt eine Funktion oder Abbildung genau dann, wenn die folgenden Eigenschaften erf¨ ullt sind: Die Relation ist linkstotal, d. h., alle Elemente von M1 treten in den Paaren der Relation tats¨ achlich auf, zu jedem x ∈ M1 existiert mindestens ein y ∈ M2 mit (x, y) ∈ F . Die Relation ist rechtseindeutig, d. h., sind (x, y1 ) ∈ F und (x, y2 ) ∈ F , dann muss y1 = y2 sein. Wir schreiben Funktionen in der Regeln nicht als Menge F , sondern wir fassen sie als Zuordnung f : M1 → M2 auf, wobei f jedes Element x aus dem Definitionsbereich D(f ) := M1 auf genau ein Element f (x) aus der Zielmenge M2 abbildet. Dabei heißt f (x) das Bild von x unter f . Die Zuordnung von x zu f (x) wird symbolisch mit x → f (x) ausgedr¨ uckt. Damit ist F = {(x, f (x)) : x ∈ D(f )} ⊂ M1 × M2 . achlich Die Menge W der Elemente aus M2 , die als Werte der Abbildung tats¨ auftreten, also W = W (f ) := {y ∈ M2 : es existiert ein x ∈ D(f ) mit y = f (x)} heißt der Wertebereich oder die Wertemenge von f . Wir ben¨ otigen die Rechtseindeutigkeit, damit einem x ∈ D(f ) nicht zwei oder mehr Elemente aus M2 zugeordnet werden. Die Relation muss linkstotal sein, damit jedem x ∈ D(f ) ein Element aus M2 zugeordnet wird. Die Relation δ l¨ asst sich also als Funktion interpretieren, wobei z. B. (A, 0) → C gilt. Aus der Schule kennen Sie Funktionen zwischen Zahlenmengen:
1.3 Relationen und Abbildungen
47
Beispiel 1.19 (Funktion) Wir betrachten die Abbildung f : N → N mit f (x) = x2 (also x → x2 ), wobei N = {1, 2, 3, . . . } die Menge der nat¨ urlichen Zahlen ist. Hier ist explizit eine Abbildungsvorschrift angegeben: Das Bild jedes x ∈ D(f ) = N erhalten wir, indem wir f (x) durch Quadrieren von x berechnen. Wir nennen in diesem Zusammenhang x das Argument der Abbildung f . Durch die Abbildungsvorschrift ist automatisch die Rechtseindeutigkeit sichergestellt (ohne die Sie auch keinen Funktionsgraphen zeichnen k¨ onnten). Die Wertemenge ist also W = {1, 4, 9, 16, . . . }. Als Relation geschrieben lautet die Abbildung F = {(x, x2 ) : x ∈ N}. Zu Recht fragen Sie sich, warum wir zun¨ achst den Begriff der Relation eingef¨ uhrt haben, wenn wir dann daraus doch nur den altbekannten Funktionsbegriff gewinnen. Wir kehren jetzt noch einmal zu den Automaten zur¨ uck und verwenden dabei auch Relationen, die keine Funktionen sind. Dazu m¨ ussen wir uns aber mit nicht-deterministischen Automaten besch¨ aftigen. Einfacher als die direkte Umsetzung in einen deterministischen Automaten ist h¨ aufig das Erstellen eines nicht-deterministischen Automaten. Wir sehen uns das f¨ ur die Sprache an, die der Automat aus Abbildung 1.9 erkennt, die also aus den Worten u ¨ ber dem Alphabet {0, 1} besteht, die mit einer Null beginnen und mit zwei Einsen enden. Diese Sprache wird auch vom (einfacheren) nicht-deterministischen Automaten in Abbildung 1.10 erkannt. Die zugeh¨ origen Zustandswechsel sind in Tabelle 1.8 aufgelistet. Wir sehen die beiden Unterschiede gegen¨ uber deterministischen Automaten: Nicht zu jedem Zustand und zu jedem Zeichen des Eingabealphabets ist ein Zustandswechsel vorgesehen. So kann kein Zustandswechsel von A aus durchgef¨ uhrt werden, wenn das erste Zeichen der Eingabe eine 1 ist. Es kommt sogar noch schlimmer: Es gibt mit (B, 1, B) und (B, 1, C) zwei m¨ oglich Folgezust¨ ande B und C, falls im Zustand B eine 1 gelesen wird. Wenn Sie jetzt verwirrt sind und sich fragen, in welchen dieser Zust¨ ande der Automat dann wechseln soll, ist die Antwort: In B und C. Der Mathematiker hat hier u ¨ berhaupt kein Problem, denn die Definition 1.17 gilt f¨ ur deterministische und f¨ ur nicht-deterministische endliche Automaten. Aber die Vorstellung einer mechanischen Maschine, die von einem Zustand in den n¨ achsten wechselt, gelingt nicht mehr. Nicht-deterministische Automaten sind Denkmodelle – eine mathematische Definition. 0 A 0
B 0/1
1
C
1
D
Abb. 1.10 Nicht-deterministischer, endlicher Automat, der Worte erkennt, die mit 0 beginnen und 11 enden
Bei den deterministischen Automaten gibt es genau eine Zustandsfolge f¨ ur eine Eingabe. Bei den nicht-deterministischen Automaten sind viele Zustands-
48
1 Grundlagen
Tab. 1.8 Beschreibung des nicht-deterministischen Automaten aus Abbildung 1.10
A B C D
0
1
B B – B
– B, C D –
δ := {(A, 0, B), (B, 0, B), (D, 0, B)
(B, 1, B), (C, 1, D), }
(B, 1, C),
folgen m¨ oglich, nicht alle von diesen f¨ uhren in einen akzeptierenden Endzustand. Wenn es aber eine Zustandsfolge gibt, die zu einem akzeptierenden Endzustand f¨ uhrt, dann reicht uns das. Bei dem Wort 01011 gibt es unter anderem folgende Zustandsfolgen: A, B, B, B, B oder A, B, B, B, C oder A, B, B, C, D. Nur die letzte f¨ uhrt zu einem akzeptierenden Endzustand. Aber das reicht aus, um das Wort zu akzeptieren. Ist dagegen das erste Zeichen eine 1, dann finden wir keinen m¨ oglichen Zustandswechsel, der von A aus durchgef¨ uhrt werden kann. Es gibt daher keine Zustandsfolge, die zu einem akzeptierenden Endzustand f¨ uhrt. Das Wort geh¨ ort nicht zu der Sprache, die vom Automaten akzeptiert wird. In der Theoretischen Informatik im Bereich Automatentheorie lernen Sie, wie man aus einem nicht-deterministischen Automaten einen deterministischen Automaten konstruieren kann. Das ist notwendig, weil wir nicht-deterministische Automaten nicht unmittelbar (effizient) implementieren k¨ onnen. Wir schreiben die Relation des nicht-deterministischen Automaten in eine bin¨ are Relation um: M1 := {(A, 0), (B, 0), (B, 1), (C, 1), (B, 0)},
M2 := {B, C, D},
δ := {((A, 0), B), ((B, 0), B), ((B, 1), B), ((B, 1), C), ((C, 1), D), ((D, 0), B)}. Wegen ((B, 1), B) und ((B, 1), C) ist δ nicht rechtseindeutig und damit keine Funktion. Hier ben¨ otigen wir also tats¨ achlich den allgemeinen Relationenbegriff und kommen nicht (zumindest nicht ohne M¨ uhe) mit Funktionen weiter. Tab. 1.9 Relationale Datenbank
Matrikelnummer
Name
Vorname
1234567 2345678 3456789
Meier M¨ uller Schulze
Erika Walter Anja
Fachbereich 01 02 01
Fachbereichsname Chemie Design Chemie
Einschreibedatum 1.8.2012 3.9.2011 17.8.2012
Sie kennen den Begriff Relation wahrscheinlich auch aus einem anderen Bereich der Informatik: den relationalen Datenbanken. Auch hier haben wir es im
1.3 Relationen und Abbildungen
49
Wesentlichen mit Tabellen zu tun, die Relationen definieren. Im Beispiel aus Tabelle 1.9 ist die Matrikelnummer eindeutig, d. h., zu einer Matrikelnummer gibt es genau einen Datensatz in der Tabelle. Man k¨ onnte aber auch sagen: Wenn man die Matrikelnummer kennt, dann kann man auf die restlichen Werte des Tupels schließen. Damit k¨ onnen wir die Tabelle zu einer Funktion umschreiben, die die Matrikelnummer auf die restlichen Attribute abbildet. Diesen Sachverhalt nennt man bei Datenbanktabellen die funktionale Abh¨ angigkeit der Spalten von einem Schl¨ ussel. Im Beispiel sind auch Name, Vorname und Einschreibedatum pro Zeile eindeutig. Das kann sich aber ¨ andern, wenn weitere Daten in die Tabelle aufgenommen werden. Daher handelt es sich hier nicht um Schl¨ ussel und man w¨ urde auch nicht von einer funktionalen Abh¨ angigkeit sprechen. Wenn wir Daten redundant (mehrfach) speichern, dann ist die Gefahr sehr ¨ groß, dass bei Anderungen nicht alle Instanzen erfasst werden und so Inkonsistenzen entstehen. Gerade bei großen Datenbanken ist die Datenqualit¨ at oft ein echtes Problem. Daher ist man bei Datenbanktabellen bem¨ uht, gewisse Normalformen einzuhalten, die Redundanzen vermeiden. So sollen in den Spalten keine zusammengesetzten Informationen stehen, sondern nur je eine Angabe (erste Normalform). Eine Tabelle darf theoretisch einer Relation entsprechen, die nicht als Funktion aufgefasst werden kann. Die zweite Normalform verlangt aber (zus¨ atzlich zur ersten) die funktionale Abh¨ angigkeit von einem Schl¨ ussel. Tabelle 1.9 ist in zweiter Normalform. Dort gibt es allerdings noch eine Redundanz: Eine Nicht-Schl¨ ussel-Spalte h¨ angt von einer anderen funktional ab. Aufgabe 1.14 Vereinfacht ausgedr¨ uckt verbietet die dritte Normalform funktionale Abh¨ angigkeiten zwischen Nicht-Schl¨ ussel-Spalten einer Tabelle, die bereits die zwei¨ te Normalform erf¨ ullt. Andern Sie den Entwurf f¨ ur Tabelle 1.9 durch Hinzuf¨ ugen einer weiteren Tabelle, um die bestehende Redundanz aufzuheben.
1.3.2
Eigenschaften von Relationen
Mit zwei Typen von Relationen, die keine Abbildungen sind, m¨ ussen wir sp¨ ater ¨ are umgehen: Ordnungs- und Aquivalenzrelationen. Sei R ⊂ M1 × M2 eine bin¨ Relation. Wir f¨ uhren die Schreibweise xRy ⇐⇒ (x, y) ∈ R ein, die aussagt, dass x in Relation zu y steht. Auf der Menge der nat¨ urlichen Zahlen N kennen wir die Relation ≤: n ≤ m ⇐⇒ (n, m) ∈ {(1, 1), (1, 2), (1, 3), . . . , (2, 2), (2, 3), (2, 4) . . . }.
50
1 Grundlagen
Es handelt sich bei ≤ nicht um eine Abbildung, da die Relation nicht rechtseindeutig ist. Bei dieser Relation stammen beide Eintr¨ age der Paare aus der ur solche Relationen formulieren wir Begriffe: gleichen Menge M1 = M2 . F¨ Definition 1.20 (Eigenschaften von Relationen) Gegeben sei eine Relation R ⊂ M × M . R heißt reflexiv genau dann, wenn f¨ ur alle x ∈ M gilt: xRx. R heißt transitiv genau dann, wenn f¨ ur alle x, y, z ∈ M gilt: Aus xRy und yRz folgt xRz. R heißt symmetrisch genau dann, wenn f¨ ur alle x, y ∈ M gilt: Aus xRy folgt yRx. R heißt antisymmetrisch genau dann, wenn f¨ ur alle x, y ∈ M gilt: Aus xRy und yRx folgt x = y. Als Beispiel sei M eine Menge von Menschen und V eine Relation, die Verwandtschaft ausdr¨ uckt, d. h. xV y ⇐⇒ x ist mit y verwandt. Diese Relation ist reflexiv, transitiv und symmetrisch. Die Relation ≤ ist reflexiv, transitiv und antisymmetrisch. Generell nennen wir Relationen mit diesen Eigenschaften eine partielle Ordnung. Eine Relation, die ausdr¨ uckt, welche Software-Komponente welche andere ben¨ otigt, ist beispielsweise eine partielle Ordnung. Kommt noch die weitere Eigenschaft hinzu, dass f¨ ur alle x, y ∈ M entweder xRy oder yRx (oder beides) gilt, dann heißt R eine totale Ordnung. Als Teilmenge von N × N ist ≤ eine totale Ordnung. Das gilt auch f¨ ur die analog definierte Relation ≥, aber nicht f¨ ur die Relation =, die aber immerhin eine partielle Ordnung ist. Dagegen sind die u ¨ blichen Vergleiche < und > nicht reflexiv und daher bereits keine partielle Ordnung. Aufgabe 1.15 Pr¨ ufen Sie, ob R := {(1, 2), (2, 1), (2, 3), (2, 2), (1, 1), (3, 3), (1, 3)} ⊂ M × M mit M = {1, 2, 3} reflexiv, transitiv, symmetrisch oder antisymmetrisch ist. Ist eine Relation reflexiv, symmetrisch und transitiv, so heißt sie eine ¨ ¨ Aquivalenzrelation. Der Name leitet sich von der Aquivalenz ab, die die gleichen Eigenschaften hat. Schließlich sind f¨ ur beliebige Aussagen A, B und C die folgenden Aussagen stets wahr: A ⇐⇒ A,
(A ⇐⇒ B) ⇐⇒ (B ⇐⇒ A),
[(A ⇐⇒ B) ∧ (B ⇐⇒ C)] =⇒ (A ⇐⇒ C). Die Ganzzahldivision liefert das Ergebnis der Division ohne Nachkommastel¨ len. Eine der wichtigsten Aquivalenzrelationen l¨ asst sich u ¨ ber den Rest der Ganzzahldivision definieren. Wir werden auf Seite 120 die endlichen Zahlenmengen Zn := {0, 1, 2, . . . , n − 1} kennen lernen, in denen die Addition von zwei Zahlen
1.3 Relationen und Abbildungen
51
x und y als Rest der Division (x + y)/n erkl¨ art ist, so dass die Addition nicht uhrt. F¨ ur diese Addition gelten die u aus Zn heraus f¨ ¨ blichen Rechenregeln. Mit unendlichen Zahlenmengen k¨ onnen wir im Computer nicht arbeiten, daher sind die Mengen Zn in der Informatik wichtig. Den Rest der Ganzzahldivision liefert (in der Informatik) der Operator mod . So gilt beispielsweise 13 mod 5 = 3 und −7 mod 5 = −2. Allerdings wird mod nicht einheitlich definiert, und auch wir verwenden das Symbol in einer anderen Schreibweise mit leicht ver¨ anderter Bedeutung: Wir sagen, dass zwei ganze Zahlen x, y ∈ Z := {0, 1, −1, 2, −2, . . . } ur ein k ∈ Z gilt. genau dann in einer Relation ≡n stehen, wenn x = y + kn f¨ In diesem Fall nennen wir x kongruent zu y modulo n und verwenden die Bezeichnungen oder x ≡ y mod n. x ≡n y Damit gilt f¨ ur jede Zahl i ∈ Z: x ≡ y mod n ⇐⇒ x ≡ y + i · n mod n ⇐⇒ x + i · n ≡ y mod n.
(1.11)
F¨ ur zwei nicht-negative nat¨ urliche Zahlen x und y h¨ angen die beiden modSchreibweisen so zusammen: x ≡ y mod n ⇐⇒ x mod n = y mod n. Kongruenz bedeutet also f¨ ur nicht-negative Zahlen die Gleichheit des Restes der Ganzzahldivison durch n. Beispielsweise erhalten wir als Ergebnisse der Ganzzahldivision durch n = 13: 28/13 = 2 Rest 2 und 41/13 = 3 Rest 2. Damit ist 28 mod 13 = 41 mod 13 oder mit anderen Worten 28 ≡13 41. Die Einschr¨ ankung auf nicht-negative Zahlen ist n¨ otig: 13 ≡5 −7, aber die bereits oben berechneten Reste 3 und −2 der Division von 13 und −7 durch 5 sind verschieden. ¨ Die Relation ≡n ist eine Aquivalenzrelation: ≡n ist reflexiv (x ≡n x), da x = x + 0 · n. ≡n ist symmetrisch, da ur ein k ∈ Z ⇐⇒ y = x − kn f¨ ur ein k ∈ Z x ≡n y ⇐⇒ x = y + kn f¨ ⇐⇒ y = x + kn f¨ ur ein k ∈ Z ⇐⇒ y ≡n x. ≡n ist transitiv, da aus (x ≡n y) ∧ (y ≡n z) die Existenz zweier Zahlen k und l folgt mit x = y + kn und y = z + ln. Ineinander eingesetzt erhalten wir x = (z + ln) + kn = z + (l + k)n, also x ≡n z. ¨ Mit einer Aquivalenzrelation R ⊂ M ×M k¨ onnen wir die Menge M in Teilmen¨ gen [x] := {y ∈ M : xRy} f¨ ur jedes x ∈ M zerlegen, die Aquivalenzklassen heißen. Wir zeigen im Folgenden, dass zwei Dinge gelten:
52
1 Grundlagen
¨ a) M ist die Vereinigung aller Aquivalenzklassen, also [x]. M=
(1.12)
x∈M
b) F¨ ur alle x1 , x2 ∈ M gilt: ([x1 ] = [x2 ]) ∨ ([x1 ] ∩ [x2 ] = ∅).
(1.13)
¨ Mit den Aquivalenzklassen erhalten wir in diesem Sinne eine disjunkte Zerlegung der Menge M . Das m¨ ussen wir beweisen: a) Nach Definition ist x∈M [x] ⊂ M . Da R reflexiv ist, liegt jedes einzelne x ∈ M in der Menge [x] = {y ∈ M : xRy}. Damit ist umgekehrt M ⊂ x∈M [x], und (1.12) ist gezeigt. b) Nun zeigen wir, dass zwei Mengen [x1 ] und [x2 ] gleich sind, falls sie ein gemeinsames Element z ∈ [x1 ] ∩ [x2 ] enthalten. Sei y ∈ [x1 ]. Dann ist x1 Ry, at ergibt x1 Rz und x2 Rz. Wegen der Symmetrie ist zRx1 , und die Transitivit¨ (x2 Rz) ∧ (zRx1 ) ∧ (x1 Ry) =⇒ (x2 Rx1 ) ∧ (x1 Ry) =⇒ (x2 Ry). Damit ist y ∈ [x2 ]. Wir haben [x1 ] ⊂ [x2 ] gezeigt. Die Umkehrung [x2 ] ⊂ [x1 ] ¨ ergibt sich genauso, so dass tats¨ achlich nicht-disjunkte Aquivalenzklassen ¨ u ¨ bereinstimmen: [x1 ] = [x2 ]. Zwei Aquivalenzklassen sind also entweder gleich oder disjunkt, (1.13) ist bewiesen. ¨ Die Aquivalenzklassen zur Kongruenz ≡n heißen Restklassen. Davon gibt es genau n verschiedene: [0] = {0, n, −n, 2n, −2n, . . . } = [n] = [−n] = . . . , [1] = {1, 1 + n, 1 − n, 1 + 2n, 1 − 2n, . . . } = [1 + n] = [1 − n] = . . . , [2] = {2, 2 + n, 2 − n, 2 + 2n, 2 − 2n, . . . } = [2 + n] = [2 − n] = . . . , .. . [n − 1] = {n − 1, n − 1 + n, n − 1 − n, n − 1 + 2n, n − 1 − 2n, . . . } = {−1 + n, −1 + 2n, −1, −1 + 3n, −1 − n, . . . } = [−1] = . . . . Auf Restklassen gehen wir sp¨ ater im Zusammenhang mit den Mengen Zn ein. ¨ Aquivalenzklassen helfen auch beim Bauen von Automaten. Um die Anzahl der Zust¨ ande in einem endlichen Automaten, der W¨ orter einer Sprache erkennt, zu reduzieren, k¨ onnen wir gleichwertige“ Zust¨ ande zu jeweils einem ” neuen zusammen legen. Das kann dadurch geschehen, dass zuvor geschickt ¨ Aquivalenzklassen der W¨ orter gebildet werden (Satz von Myhill-Nerode, siehe (Sch¨ oning, 2008, Kapitel 1.2.5)).
1.3 Relationen und Abbildungen
53
Aufgabe 1.16 a) Zwei nat¨ urliche Zahlen m¨ ogen in einer Relation R stehen, wenn Sie entweder beide gerade oder beide ungerade sind: R = {(n, m) : n und m sind beide ungerade oder beide gerade}. ¨ ¨ Zeigen Sie, dass R eine Aquivalenzrelation ist, und geben Sie die Aquivalenzklassen an. b) Zwei Sportler sollen in Relation zueinander stehen, wenn sie in der gleichen ¨ Mannschaft sind. Handelt es sich um eine Aquivalenzrelation? c) Zu einem Dreieck bilden wir die Menge aller Seitenverh¨ altnisse. Zwei Dreiecke m¨ ogen in Relation zueinander stehen, wenn sie die gleiche Menge von ¨ Seitenverh¨ altnissen haben. Ist dies eine Aquivalenzrelation?
1.3.3
Eigenschaften von Abbildungen
Die Symbole aller denkbaren Alphabete lassen sich durch Gruppen von Bin¨ arzeichen ausdr¨ ucken. So kann das deutsche Alphabet der Kleinbuchstaben wie in Tabelle 1.10 dargestellt werden. Da es nur 26 Buchstaben plus 3 Umlaute sowie den Buchstaben ß gibt, k¨ onnen die 30 Zeichen mittels 5 Bin¨ arzeichen 5 codiert werden, da mit 5 Bin¨ arzeichen 2 = 32 verschiedene Werte darstellbar sind. Mit Gruppen aus n Bin¨ arzeichen lassen sich 2n verschiedene Symbole codieren. Hier ist es jetzt einmal hilfreich, dass 2n mit wachsendem n extrem groß wird (vgl. Seite 5), weil die bin¨ aren Codew¨ orter sonst sehr lang sein m¨ ussten. Tab. 1.10 M¨ ogliche Bin¨ ardarstellung von Kleinbuchstaben
00000 00001 00010
a b c
00011 00100 00101
d e f
00110 00111 01000
g h i
01001 01010 01011
j k l
...
Eine Codierung ist eine Abbildung einer Menge M1 von Zeichenfolgen auf eine andere Menge M2 von Zeichenfolgen (vgl. Kapitel 5.1). Diese sollte umkehrbar sein. Umkehrbar bedeutet, dass wir von jeder Zeichenfolge aus M2 wieder uckschließen k¨ onnen. Abbildungen, eindeutig auf die Zeichenfolge aus M1 zur¨ die das erm¨ oglichen, heißen bijektiv. Diesen Begriff werden wir zusammen mit weiteren in diesem Abschnitt definieren und anwenden. Eine Codierung wird im einfachsten Fall durch eine Tabelle beschrieben, die Codetabelle. Dabei wird jedes Zeichen einer Zeichenfolge einzeln durch den in der Tabelle angegebenen Wert ersetzt. So entsteht die codierte Zeichenfolge. In diesem Fall wird quasi ein Alphabet durch ein anderes ausgetauscht. Die Codierung der Alphabete der Weltsprachen hat eine lange Historie und f¨ uhrt immer
54
1 Grundlagen
wieder zu Problemen bei der Programmierung, da die Codes leider inkompatibel zueinander sind. ASCII (American Standard Code for Information Interchange): Die ASCII-Codierung wurde von der American Standards Association (ASA) in den 1960er Jahren als Standard ver¨ offentlicht. Die 7-Bit Zeichencodierung definiert 128 Zeichen und orientiert sich an der Schreibmaschine f¨ ur die englische Sprache. Als klar wurde, dass außer den Amerikanern noch weiteres intelligentes Leben auf unserem Planeten existiert, das ebenfalls Computer nutzen wollte, wurde der Code u ¨ber das zuvor nicht genutzte achte Bit erweitert. UTF (UCS Transformation Format, wobei UCS die Abk¨ urzung f¨ ur Universal Character Set ist): Im Gegensatz zu fr¨ uheren Zeichencodierungen, die meist nur ein bestimmtes Schriftsystem ber¨ ucksichtigten, ist es das Ziel von Unicode, alle in Gebrauch befindlichen Schriftsysteme und Zeichen zu codieren. Dazu werden aber auch gegebenenfalls mehrere Bytes (ein Byte besteht aus 8 Bits) verwendet.
Definition 1.21 (Abbildungseigenschaften) Die Relation F ⊂ M1 × M2 sei eine Abbildung f : M1 → M2 , x → f (x), d. h., sie ist rechtseindeutig und linkstotal. Die Abbildung heißt injektiv genau dann, wenn die Relation linkseindeutig ist, d. h., sind (x1 , y) ∈ F (bzw. x1 F y) und (x2 , y) ∈ F (bzw. x2 F y), dann muss x1 = x2 sein. Zu einem Bild y ∈ W (f ) gibt es also genau ein Urbild x ∈ D(f ) mit f (x) = y. Die Abbildung heißt surjektiv genau dann, wenn der Wertebereich mit der Zielmenge M2 u ¨ bereinstimmt, jedes Element aus M2 wird dann also als ein Bild angenommen. Die Abbildung heißt bijektiv genau dann, wenn sie injektiv und surjektiv ist. Wir betrachten Beispiele: Die zuvor betrachtete Abbildung f : N → N mit f (x) = x2 ist injektiv. Zu √ onnen also die Gleichung jedem Bild y gibt es ein eindeutiges Urbild y, Sie k¨ osen. Allerdings ist die Abbildung nicht surjektiv, da y = x2 nach x aufl¨ urlichen Zahl ist. Wenn wir aber z. B. 2 ∈ N nicht das Quadrat einer nat¨ die Zielmenge auf die Wertemenge einschr¨ anken, dann gelangen wir zu einer neuen Funktion f˜ : N → {1, 4, 9, . . . } mit f˜(x) = x2 , die surjektiv und damit auch bijektiv ist. Durch Einschr¨ ankung der Zielmenge auf die Wertemenge kann jede Abbildung surjektiv gemacht werden“. ”
1.3 Relationen und Abbildungen
55
Wenn wir im vorangehenden Beispiel den Definitionsbereich erweitern zu Z, dann ist fˆ : Z → {1, 4, 9, . . . } mit fˆ(x) = x2 nicht injektiv. Denn z. B. ist f (−1) = f (1) = 1. Durch Einschr¨ anken des Definitionsbereichs auf N l¨ asst sich aber, wie gesehen, eine injektive Abbildung erzeugen. So muss man beispielsweise bei den trigonometrischen Funktionen vorgehen, um diese umzukehren und die Arcus-Funktionen zu erhalten, siehe Kapitel 3.6.2.3. Die Abbildung der Buchstaben und Ziffern in die ASCII-Codierung ist injektiv. Allerdings gibt es 256 ASCII-Zeichen, so dass diese Abbildung nicht surjektiv ist. Das gilt erst Recht f¨ ur eine Abbildung in UTF. Schr¨ anken wir aber wie zuvor die Zielmenge auf die tats¨ achlich f¨ ur Buchstaben und Ziffern ben¨ otigten Codezeichen ein, dann wird die Abbildung surjektiv und in der Folge bijektiv. Eine Datenbanktabelle mit einer funktionalen Abh¨ angigkeit der Spalten von einem Schl¨ ussel ist eine Abbildung des Schl¨ ussels auf das Tupel der u ¨brigen Spaltenwerte. Eine solche Abbildung muss aber nicht injektiv sein. Im obigen Beispiel (Tabelle 1.9) h¨ atten sich namensgleiche Studierende im gleichen Fachbereich am gleichen Tag einschreiben k¨ onnen (auch wenn das unwahrscheinlich ist, aber darauf darf man sich nicht verlassen). Aufgabe 1.17 Bestimmen sie, ob die folgenden Abbildungen injektiv oder surjektiv sind: a) f : {1, 2, 3, 4} → {2, 3, 4, . . . , 20} mit f : n → 1 + n2 , b) f : {−2, −1, 0, 1, 2} → {1, 2, 5} mit f : n → 1 + n2 , c) f : {−2, −1, 0, 1, 2} → {−8, −1,0,1,8} mit f : n → n3 . Bijektive Abbildungen wie Codierungen lassen sich umkehren. Wenn wir eine Gleichung y = f (x) nach der Variable x aufl¨ osen, dann berechnen wir ebenfalls eine Umkehrfunktion: x = f −1 (y). Lemma 1.22 (Umkehrabbildung) Die Relation F ⊂ M1 × M2 sei eine bijektive Abbildung f : M1 → M2 , x → f (x). Dann existiert die eindeutige Umkehrabbildung bzw. Umkehrfunktion f −1 : M2 → M1 mit ur alle x ∈ M1 . f −1 (f (x)) = x f¨ ur alle y ∈ M2 . F¨ ur die Umkehrabbildung gilt außerdem f (f −1 (y)) = y f¨ Der Exponent −1 kennzeichnet hier die Umkehrfunktion, er bedeutet nicht, dass Sie einen Kehrwert nehmen sollen (falls sich die Umkehrfunktion nicht zuf¨ allig so ergibt). Hier ist die Schreibweise leider nicht eindeutig, und Sie m¨ ussen die Bedeutung aus dem Kontext entnehmen. Verdeutlichen Sie sich, agt. dass sich die Bijektivit¨ at von f auf f −1 u ¨ bertr¨
56
1 Grundlagen
Beweis Zur Relation F = {(x, f (x)) : x ∈ M1 } ⊂ M1 × M2 betrachten wir die Relation F −1 := {(f (x), x) : x ∈ M1 } ⊂ M2 × M1 . Diese ist rechtseindeutig, da F als injektive Abbildung linkseindeutig ist. Außerdem ist F −1 linkstotal, da f surjektiv ist. Damit ist durch F −1 eine Abbildung f −1 mit f −1 (f (x)) = x gegeben, die u ¨ ber diese Vorschrift auch eindeutig festgelegt ist. Da f surjektiv ist, ist jedes y ∈ M2 darstellbar als f (x), und wir erhalten f (f −1 (y)) = f (f −1 (f (x))) = f (x) = y. Zu f : N → {1, 4, 9, . . . } mit f (x) = x2 lautet die Umkehrabbildung f −1 : √ {1, 4, 9, . . . } → N mit f −1 (x) = x. Wir erhalten die Abbildungsvorschrift der Umkehrfunktion durch Aufl¨ osen der Gleichung y = x2 nach x. Danach haben wir √ die Variable y wieder in x umbenannt. Da x > 0 ist, gilt f (f −1 (x)) = ( x)2 = x √ und f −1 (f (x)) = x2 = x. Mit bijektiven Abbildungen k¨ onnen wir (verlustfrei) Informationen codieren. Neben den eingangs beschriebenen ASCII- und UTF-Codierungen sind das Komprimieren von Daten (z. B. mittels Huffmann-Code) und die Verschl¨ usselung (z. B. mit dem RSA-Verfahren, siehe Kapitel 3.5) weitere praktische Beispiele.
2 Graphen
¨ Ubersicht 2.1 2.2 2.3 2.4 2.5
2.1
Einf¨ uhrung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Graphen und ihre Darstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Grundlegende Probleme in gerichteten Graphen . . . . . . . . . . . . . . . . . . 66 Grundlegende Probleme in ungerichteten Graphen . . . . . . . . . . . . . . . . 90 Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Einf¨ uhrung
Wir wollen in diesem Kapitel unter anderem beschreiben, wie ein Routenplaner f¨ ur uns einen Weg zum Ziel findet. Der Routenplaner ist ein wichtiges Teilsystem eines Navigationssystems. Die digitalen Karten sind als Graphen gespeichert. Diese Graphen reduzieren die Umwelt auf das Notwendige. Bereits Leonhard Euler begr¨ undete im 18. Jahrhundert die Graphentheorie, als er der Frage nachging, ob es einen Rundweg durch die Stadtteile von K¨ onigsberg gibt, der u ber jede der sieben Br¨ u cken u ber den Pregel genau einmal f¨ uhrt. Dieses ¨ ¨ Problem ist unter dem Namen K¨ onigsberger Br¨ uckenproblem bekannt und in Abbildung 2.1 skizziert.
Abb. 2.1 K¨ onigsberger Br¨ uckenproblem
Die Stadtteile von K¨ onigsberg werden durch Kreise repr¨ asentiert, die wir Knoten nennen. Die Verbindungen zwischen den Stadtteilen, also die Br¨ ucken, werden durch Striche dargestellt. Diese Striche heißen Kanten. Sie verbinden die Knoten. Knoten und Kanten bilden einen Graphen. Euler erkannte durch diese Reduktion der Umwelt auf das Wesentliche (n¨ amlich auf einen Graphen), dass S. Goebbels, J. Rethmann, Mathematik für Informatiker, DOI 10.1007/978-3-642-55340-0_2, © Springer-Verlag Berlin Heidelberg 2014
58
2 Graphen
die tats¨ achliche Lage der Br¨ ucken keine Rolle f¨ ur die L¨ osung des Problems spielt. Und er erkannte auch, dass der gesuchte Rundweg nicht existieren kann: Denn wenn der Weg zu einem Knoten f¨ uhrt, dann muss der Knoten u ¨ ber eine andere Kante auch wieder verlassen werden. Wird derselbe Knoten noch einmal u ¨ ber eine weitere Kante besucht, muss der Weg auch wieder vom Knoten u ¨ ber eine noch nicht benutzte Kante wegf¨ uhren. Also muss die Anzahl der Kanten, die sich in einem Knoten treffen, immer ein Vielfaches von 2 sein, also gerade. Diese notwendige Bedingung ist beim Graphen zum K¨ onigsberger Br¨ uckenproblem nicht erf¨ ullt. Wir haben in Abbildung 2.2 einen Ausschnitt des Krefelder Stadtplans dargestellt und wollen daran zeigen, wie ein Stadtplan in einen Graphen u uhrt ¨berf¨ werden kann. Kreuzungen werden zu Knoten, Straßenabschnitte werden zu Kanten. Wenn man mittels Graphen so etwas wie einen k¨ urzesten Weg bestimmen will, m¨ ussen die Kanten mit zus¨ atzlichen Informationen versehen werden: Die L¨ ange des Straßenabschnitts, also die Distanz zwischen den beiden Endknoten der Kante, wird als Kantengewicht modelliert. Das ist einfach eine Zahl. Diese Zahl kann entweder die Entfernung in Metern sein, oder die Zeit, die bei normaler Geschwindigkeit zum Zur¨ ucklegen der Strecke ben¨ otigt wird. So kann man den k¨ urzesten bzw. den schnellsten Weg finden.
Abb. 2.2 Vom Stadtplan zum Graphen, Kartendaten:
OpenStreetMap-Mitwirkende
Einbahnstraßen werden als gerichtete Kanten dargestellt. Das sind Kanten mit einer Pfeilspitze. Sackgassen k¨ onnen nur dadurch modelliert werden, dass am Ende der Sackgasse ein k¨ unstlicher Knoten eingef¨ uhrt wird, obwohl dort eigentlich keine Kreuzung ist. Wie aber finden wir nun in einer solchen Struktur, einem solchen gerichteten Graphen, einen k¨ urzesten Weg? Wir k¨ onnten einfach alle m¨ oglichen Wege ausprobieren. Dass die Idee nicht wirklich gut ist, k¨ onnen wir uns leicht u ¨berlegen: Eine Kreuzung, also ein Knoten, wird (bis auf Sackgassen) immer dann gebildet, wenn mindestens drei Straßenabschnitte zusammen stoßen. Wenn wir also an
2.2 Graphen und ihre Darstellung
59
einem solchen Knoten ankommen, gibt es mindestens zwei M¨ oglichkeiten, einen Weg fortzusetzen. An der n¨ achsten Kreuzung gibt es wieder mindestens zwei M¨ oglichkeiten, usw. Damit gibt es ausgehend von einem Knoten mindestens n 2 · 2 ·2 · · · 2 = 2 n Faktoren
m¨ ogliche verschiedene Wege der L¨ ange n (wobei wir davon ausgegangen sind, dass wir in keine Sackgasse geraten und Kanten mehrfach benutzen d¨ urfen). Die Anzahl w¨ achst so schnell an (siehe Seite 5), dass bereits f¨ ur n = 60 keine L¨ osung in akzeptabler Zeit zu erwarten ist. In Westeuropa gibt es aber etwa 18 000 000 Kreuzungen und 42 000 000 Straßenabschnitte. Damit wird die Aussichtslosigkeit unserer Idee schnell klar, die Wege durch ausprobieren zu ermitteln. Bevor wir Algorithmen beschreiben, die k¨ urzeste Wege effizient berechnen, wollen wir uns zun¨ achst einige grundlegende Definitionen anschauen. Wir haben beispielsweise von Wegen gesprochen, ohne u ¨ berhaupt zu sagen, was ein Weg in einem Graphen ist.
2.2
Graphen und ihre Darstellung
Definition 2.1 (gerichteter Graph) Ein gerichteter Graph G = (V, E) besteht aus einer endlichen Menge von Knoten V = {v1 , . . . , vn } und einer endlichen Menge von gerichteten Kanten E ⊂ {(u, v) : u, v ∈ V, u = v} ⊂ V × V (vgl. Seite 7). Hier erinnert V an vertices“ – das englische Wort f¨ ur Knoten, und E steht f¨ ur ” edges“ (Kanten). ” Ein gerichteter Graph ist in Abbildung 2.3 zu sehen. Bei den gerichteten Kanten (u, v) ∈ E ist die Reihenfolge der Knoten wichtig: (u, v) ist etwas Anderes als (v, u). Wir visualisieren eine gerichtete Kante (u, v) durch einen Pfeil vom Knoten u zum Knoten v. Die Kantenmenge ist eine Relation. Statt (u, v) ∈ E k¨ onnten wir auch uEv schreiben, d. h., u steht in Relation zu v. Definition 2.2 (ungerichteter Graph) Bei einem ungerichteten Graphen G = (V, E) sind die Kanten ungeordnete Paare, also E ⊂ {{u, v} : u, v ∈ V, u = v}. Ein ungerichteter Graph ist in Abbildung 2.3 zu sehen. Bei ungerichteten Kanten {u, v} ∈ E ist die Reihenfolge der Knoten egal.
60
2 Graphen
v1
v2
v3
v1
v2
v3
v4
v5
v6
v4
v5
v6
Abb. 2.3 Gerichteter (links) und ungerichteter Graph (rechts)
Wir betrachten in diesem Buch ausschließlich endliche Graphen, d. h., die Knotenmenge V und die Kantenmenge E sind endlich, bestehen also aus endlich vielen Elementen. Außerdem haben wir Schlingen ausgeschlossen, damit wir in vielen der folgenden Aussagen daf¨ ur keine Sonderbehandlung machen m¨ ussen. Schlingen sind Kanten, die von einem Knoten u zu ihm selbst f¨ uhren (und z. B. bei Automaten auftreten, siehe Abbildung 1.9 auf Seite 44). Im gerichteten Graphen w¨ are eine Schlinge als (u, u) darstellbar. Im ungerichteten Graphen m¨ usste man eine solche Kante als einelementige Menge {u} schreiben, da in der Mengenschreibweise nicht zwischen {u, u} und {u} unterschieden werden kann. Graphen verwenden wir u ¨berall dort, wo ein Sachverhalt darstellbar ist durch eine Menge von Objekten (Entit¨ aten), die in Beziehung zueinander stehen. So sind bei der bereits beschriebenen Routenplanung die Kreuzungen durch Straßen verbunden. Bei der Kursplanung an Hochschulen oder bei der Produktionsplanung ist es oft so, dass Kurse andere Kurse bzw. Arbeiten andere Arbeiten oder Teilprodukte andere Teilprodukte voraussetzen. Betrachten wir eine typische Produktionsplanung: den Hausbau. Zuerst muss die Baugrube ausgehoben werden, bevor die Bodenplatte gegossen werden kann. Ist die Bodenplatte getrocknet, k¨ onnen die Kellerw¨ ande gemauert werden. Die Bauabschnitte werden also durch die Knoten repr¨ asentiert, die Abh¨ angigkeiten (die Vorher-/Nachherbeziehungen) durch gerichtete Kanten. Einzelne Bauabschnitte k¨ onnen auch gleichzeitig erledigt werden: Klempner, Elektriker und Trockenbauer k¨ onnen gleichzeitig Unheil anrichten. H
H H
C
C H
H
C C
H
C
H
H
C
H
O
C C
H
H
H
Abb. 2.4 Chemische Verbindungen wie der Benzolring (links) oder Ethanol (rechts) k¨ onnen als Graph dargestellt werden.
Bei der Schaltkreisanalyse sind Bauteile durch elektrische Leitungen verbunden. Bei chemischen Verbindungen sind die Atome durch Verbindungen mit anderen Atomen verbunden, siehe Abbildung 2.4. Bei sozialen Netzwerken sind Personen oder Personengruppen miteinander bekannt. Rechnernetzwerke kennzeichnen sich dadurch, dass bestimmte Computer mit anderen vernetzt sind. Bei den endlichen Automaten stehen die Zust¨ ande durch Zustands¨ uberg¨ ange
2.2 Graphen und ihre Darstellung
61
in Verbindung. Auch bei der Programmierung von Spielen wie Dame, Schach oder Go nutzen wir Graphen: Der Zustand oder Status eines Spiels wird durch einen Spielzug ge¨ andert. Die Spielsituationen werden als Knoten dargestellt, die Spielz¨ uge werden als Kanten modelliert (siehe Abbildung 2.5). Gesucht sind die Spielz¨ uge, die m¨ oglichst sicher zu einem Sieg f¨ uhren. Leider sind bei Spielen wie Schach oder Go die Graphen extrem groß, Spiele wie Vier Gewinnt oder Dame sind dagegen f¨ ur einen Computer kein Problem mehr.
X
X X
X
O
X
O
X
X
X
O
O O
O
X
O
X
X
X
...
...
...
O
...
...
...
X
...
X O
O
...
X
O
...
O
...
...
...
Abb. 2.5 Spielbaum f¨ ur Tic-Tac-Toe
Schauen wir uns noch einmal unsere Graph-Definition an. Die Kantenmengen sind als Teilmenge einer Grundmenge definiert, wodurch Mehrfachkanten ausgeschlossen sind, denn {{u, v}, {u, v}} ist gleich {{u, v}}. Solche Mehrfachkanten werden z. B. bei der Modellierung von chemischen Verbindungen ben¨ otigt, siehe Abbildung 2.4. Manche Autoren gehen daher hin und modellieren Graphen mittels Multimengen, also Mengen, die Elemente mehrfach enthalten k¨ onnen. Dann muss man aber sehr genau definieren, was man unter der Vereinigung oder dem Schnitt zweier Multimengen versteht. Wenn ein Element in Multimenge A und in Multimenge B vorkommt, kommt es dann in der Vereinigung dieser Multimengen zweimal vor? Andere Autoren l¨ osen das Problem, indem sie zwei Abbildungen α und ω definieren, die zu einer Kante e den Startknoten α(e) und den Endknoten ω(e) festlegen. Wir werden im weiteren Verlauf des Kapitels sehen, wie man Graphen mittels Adjazenz-Matrizen und -Listen im Rechner darstellen kann. Diese Darstellungen erlauben sowohl Mehrfachkanten als auch Schlingen. Daher wollen wir uns die Arbeit etwas einfacher machen und auf eine allgemeinere mathematische Darstellung von Graphen verzichten. Definition 2.3 (Begriffe im gerichteten Graphen) Sei G = (V, E) ein gerichteter Graph und seien u, v ∈ V zwei Knoten dieses Graphen. Wenn die Knoten u und v durch eine Kante e = (u, v) verbunden sind, dann nennt man den Knoten u den Startknoten und v den Endknoten von e. Der Knoten v ist zu Knoten u adjazent, Knoten u bzw. v und Kante e sind inzident. Eine Kante (u, v) nennen wir aus u
62
2 Graphen
auslaufend und in v einlaufend. Der Eingangsgrad von Knoten u ist die Anzahl der in u einlaufenden Kanten. Der Ausgangsgrad von u ist die Anzahl der aus u auslaufenden Kanten, siehe Abbildung 2.6.
v
v
Abb. 2.6 Knotengrad f¨ ur gerichtete und ungerichtete Graphen, links: Eingangsgrad von v ist 3, Ausgangsgrad von v ist 2; rechts: deg(v) = 5
Da wir Routen planen wollen, m¨ ussen wir festlegen, was wir unter einem Weg in einem Graphen verstehen wollen. Definition 2.4 (Weg im gerichteten Graphen) Eine endliche Folge (Tupel) von Knoten p = (v0 , v1 , . . . , vk ) eines gerichteten Graphen (V, E) ist ein gerichteter Weg in G von Knoten u nach Knoten w ur 1 ≤ i ≤ k, der L¨ ange k > 0, falls gilt: v0 = u, vk = w und (vi−1 , vi ) ∈ E f¨ wobei die Kanten (vi−1 , vi ) paarweise verschieden sind. Einen solchen Weg nennen wir einfach, wenn kein Knoten in p mehrfach vorkommt. Die L¨ ange k des Wegs gibt die Anzahl der Kanten an. Ein geschlossener Weg, also ein Weg mit Anfangsknoten v0 gleich Endknoten vk , heißt Kreis. Damit w¨ are ein Kreis wegen v0 = vk nicht einfach. Dennoch nennen wir einen Kreis einfach, wenn kein Knoten in (v0 , v1 , . . . , vk−1 ) mehrfach vorkommt. F¨ ur ungerichtete Graphen sind die Begriffe ¨ ahnlich. Definition 2.5 (Begriffe im ungerichteten Graphen) Sei G = (V, E) ein ungerichteter Graph und seien u, v ∈ V zwei Knoten dieses Graphen. Wenn die Knoten u und v durch eine Kante e = {u, v} verbunden sind, dann sind u und v die Endknoten der Kante e. Ferner nennt man u und v dann adjazent, die Knoten u bzw. v sind inzident zu Kante e. Der Knotengrad von Knoten u, geschrieben deg(u), ist die Anzahl der zu u inzidenten Kanten, siehe Abbildung 2.6. Auch bei ungerichteten Graphen wollen wir festlegen, was wir unter einem Weg verstehen wollen – allerdings nicht, weil wir Routen planen wollen, sondern weil wir Wege ben¨ otigen, um den Begriff des Zusammenhangs eines ungerichteten Graphen erkl¨ aren zu k¨ onnen. Definition 2.6 (Weg im ungerichteten Graphen) Eine endliche Folge von Knoten p = (v0 , v1 , . . . , vk ) in einem ungerichteten Graphen (V, E) ist ein ungerichteter Weg in G von Knoten u nach
2.2 Graphen und ihre Darstellung
63
Knoten w der L¨ ange k > 0, falls gilt: v0 = u, vk = w und {vi−1 , vi } ∈ E sind paarweise verschieden f¨ ur 1 ≤ i ≤ k. Einen solchen Weg nennen wir einfach, wenn kein Knoten in p mehrfach vorkommt. Die L¨ ange k gibt auch hier die Anzahl der Kanten an. Sind der Anfangsknoten v0 und der Endknoten vk des Weges identisch, so nennen wir den Weg wie bei einem gerichteten Graphen einen Kreis. Dieser heißt wieder einfach genau dann, wenn Knoten in (v0 , v1 , . . . , vk−1 ) nicht mehrfach vorkommen. An dieser Stelle m¨ ussen wir warnen: Die Begriffe Weg, Kreis und einfacher Weg bzw. Kreis sind leider in der Literatur sehr unterschiedlich definiert. Wir haben hier Definitionen gew¨ ahlt, die f¨ ur die Darstellung der folgenden Ergebnisse m¨ oglichst einfach zu handhaben sind. Bei uns d¨ urfen innerhalb von Wegen oder Kreisen Kanten nicht mehrfach vorkommen. Auf diese Einschr¨ ankung wird h¨ aufig verzichtet. Kommen Knoten nicht mehrfach vor, nennen wir Wege einfach. Andere Autoren nennen Wege einfach, wenn Kanten nicht mehrfach vorkommen. Wenn Sie also in B¨ ucher zur Graphentheorie schauen, dann m¨ ussen Sie sich dort zun¨ achst die Begriffsbildungen ansehen, bevor Sie die S¨ atze f¨ ur Ihre Zwecke benutzen k¨ onnen. Erlauben Sie uns noch eine kurze Anmerkung zu den Bezeichnern. Statt deg(u) finden Sie in manchen B¨ uchern d(u) als Ausdruck f¨ ur den Grad eines Knotens u. Wir sind der Meinung, dass auch Bezeichner verwendet werden d¨ urfen, die aus mehr als einem Buchstaben bestehen (wobei der Mathematiker unter den Autoren nachgegeben hat, denn der Kl¨ ugere gibt bekanntlich nach). F¨ ur Programme empfehlen wir den Studierenden, aussagekr¨ aftige Bezeichner f¨ ur Variablen zu w¨ ahlen. Wenn eine Variable kommentiert werden muss, ist der Name der Variablen schlecht gew¨ ahlt! Das Gleiche gilt auch f¨ ur Funktionsparameter. So w¨ ahlen wir bspw. den Namen xQuadrat anstelle von x2, oder serverSocket anstelle von s. Manche Autoren von Matheb¨ uchern weichen lieber auf altdeutsche Zeichen aus, anstelle sprechende Bezeichner zu verwenden. Diese Autoren w¨ urden wahrscheinlich auch in Programmen lieber kryptische Zeichen verwenden und sind dann entt¨ auscht, wenn die Programmiersprachen das nicht erlauben. Da wir auch griechische Zeichen verwenden, kritisieren wir das lieber nicht. Sowohl im gerichteten als auch im ungerichteten Graphen k¨ onnen wir eine Relation W u ¨ ber die Existenz eines Wegs definieren (vgl. Seite 24): Zwei Knoten u und v stehen in dieser Relation zueinander, also uW v, genau dann, wenn es einen Weg von u nach v gibt. Da wir Wege der L¨ ange null nicht betrachten, h¨ angt es vom Graphen ab, ob W reflexiv ist. Dazu m¨ usste jeder Knoten Bestandteil eines Kreises sein. In einem gerichteten Graphen muss W auch nicht symmetrisch sein, in einem ungerichteten Graphen ist dagegen W in jedem Fall symmetrisch, da wir einen Weg auch in umgekehrter Richtung“ durchlaufen k¨ onnen. In je”
64
2 Graphen
¨ dem Fall ist W aber transitiv. Das sollten Sie als Ubung u ufen. Beachten ¨ berpr¨ Sie dabei, dass jede Kanten nur einmal verwendet werden darf. Schauen wir uns nun an, wie man einen Graphen G = (V, E) in einem Programm speichern kann. Sei V = {v1 , v2 , . . . , vn } die Knotenmenge des Graphen. Die Adjazenz-Matrix f¨ ur G ist eine n × n-Matrix (ein Zahlenschema mit Zahlen in n Zeilen und n Spalten, siehe auch Seite 294) AG = (ai,j ) mit 0, falls (vi , vj ) ∈ E 0, falls {vi , vj } ∈ E ai,j = oder ai,j = 1, falls (vi , vj ) ∈ E 1, falls {vi , vj } ∈ E je nachdem, ob der Graph gerichtet oder ungerichtet ist. Eine solche Matrix ist programmtechnisch nichts Anderes als ein zweidimensionales Array. Schauen wir uns die Graphen aus Abbildung 2.7 an. Die Adjazenz-Matrizen sind in Tabelle 2.1 dargestellt. v1
v2
v1
v2
v3
v4
v3
v4
Abb. 2.7 Links ein ungerichteter und rechts ein gerichteter Graph
Tab. 2.1 Adjazenz-Matrizen f¨ ur den ungerichteten (links) und den gerichteten Graphen (rechts) aus Abbildung 2.7
A
v1
v2
v3
v4
A
v1
v2
v3
v4
v1 v2 v3 v4
0 1 1 1
1 0 0 1
1 0 0 1
1 1 1 0
v1 v2 v3 v4
0 0 1 1
1 0 0 0
0 0 0 1
0 1 0 0
Da im ungerichteten Fall Knoten v1 mit allen anderen Knoten verbunden ist, wird in der ersten Zeile der linken Adjazenz-Matrix aus Tabelle 2.1 in allen Spalten eine 1 eingetragen. Wenn wir Schlingen erlauben wollen, dann k¨ onnte auch auf der Diagonalen eine 1 eingetragen werden. Dann w¨ urde eine Kante von einem Knoten zu sich selbst f¨ uhren. Beachten Sie, dass die Adjazenz-Matrix eines ungerichteten Graphen immer symmetrisch ist, d. h., es gilt ai,j = aj,i . uhrt, Da im gerichteten Graphen nur eine Kante von Knoten v1 zu Knoten v2 f¨ ist in der ersten Zeile der rechten Adjazenz-Matrix in Tabelle 2.1 nur in der uhren zwei Kanten weg, eine zu Knoten zweiten Spalte eine 1. Vom Knoten v4 f¨ v1 , eine zu Knoten v3 . Daher sind in der vierten Zeile der Adjazenz-Matrix in der ersten und dritten Spalte eine 1 einzutragen. Wenn, wie bspw. bei chemischen Verbindungen, auch mehr als eine Kante zwischen zwei Knoten vorhanden sind, dann wird einfach die Anzahl der Kanten anstelle der 1 in die Matrix eingetragen. Manchmal werden Graphen ohne Mehrfachkanten als einfache Graphen bezeichnet.
2.2 Graphen und ihre Darstellung
65
Um Speicherplatz zu sparen, kann ein Graph auch auf andere Weise abgespeichert werden. Bei einer Adjazenz-Liste werden f¨ ur jeden Knoten v eines Graphen G = (V, E) in einer Liste Adj[v] alle von v ausgehenden Kanten gespeichert, vgl. Tabelle 2.2. In einer Adjazenz-Liste k¨ onnen Schlingen und Mehrfachkanten ebenfalls ganz einfach modelliert werden. Tab. 2.2 Adjazenz-Listen f¨ ur den ungerichteten (links) und den gerichteten Graphen (rechts) aus Abbildung 2.7
Adj[v1 ] Adj[v2 ] Adj[v3 ] Adj[v4 ]
= = = =
v2 , v1 , v1 , v1 ,
v3 , v4 v4 v4 v2 , v3
Adj[v1 ] Adj[v2 ] Adj[v3 ] Adj[v4 ]
= = = =
v2 v4 v1 v1 , v3
Da es im gerichteten Graphen aus Abbildung 2.7 eine Kante (v1 , v2 ) gibt, wird in der Liste des Knotens v1 der Knoten v2 eingetragen. Ebenso werden in der Liste des Knotens v4 die Knoten v1 und v3 eingetragen, da die Kanten (v4 , v1 ) und (v4 , v3 ) im Graphen vorhanden sind. F¨ ur welche Variante des Abspeicherns wir uns entscheiden, h¨ angt auch davon ab, welche Operationen unser Programm h¨ aufig durchzuf¨ uhren hat. Vergleichen wir daher die beiden Speicherarten. Sei G = (V, E) ein Graph mit n Knoten und m Kanten. Beim Speichern einer Adjazenz-Matrix m¨ ussen n2 Werte abgelegt werden, da eine quadratische Matrix gespeichert werden muss. Diese Art der Speicherung ist daher geeignet f¨ ur dichte Graphen (dense graphs), also solche Graphen, die viel mehr Kanten als Knoten haben. Adjazenz-Matrizen unterst¨ utzen sehr gut Aufgaben wie Falls Knoten u und v adjazent sind, tue ” etwas“ Bei einer Adjazenz-Matrix kann direkt festgestellt werden, ob u und v durch eine Kante verbunden sind, bei einer Adjazenz-Liste m¨ usste im schlimmsten Fall die ganze Liste durchlaufen werden, um dann festzustellen, dass keine Kante zwischen den Knoten u und v existiert. Dahingegen wird h¨ ochstens n + 2 · m Platz zur Speicherung eines Graphen mittels Adjazenz-Listen ben¨ otigt: Es gibt genau n Listen, n¨ amlich eine f¨ ur jeden Knoten. Diese Listen m¨ ussen wir abbilden und ben¨ otigen daf¨ ur n Speicherpl¨ atze. Im gerichteten Fall kommt jede Kante in genau einer Liste vor, im ungerichteten Fall ist jede Kante in genau zwei Listen vorhanden. Daher ben¨ otigen wir zus¨ atzlich h¨ ochstens 2 · m Speicherplatz f¨ ur die Kanten. Diese Art der Speicherung ist daher auch geeignet f¨ ur d¨ unn besetzte Graphen (sparse graphs), also solche Graphen, die nur wenige Kanten haben. Adjazenz-Listen unterst¨ utzen sehr gut das Abarbeiten von Kanten: F¨ ur alle aus Knoten u auslaufenden Kanten tue ...“. Dazu muss nur die ” Liste Adj[u] durchlaufen werden. Bei einer Adjazenz-Matrix muss eine ganze Zeile der Matrix durchlaufen werden, wobei n in der Regel viel gr¨ oßer sein wird als deg(u) (siehe Aufgabe 4.3 auf Seite 211).
66
2 Graphen
Aufgabe 2.1 Geben Sie f¨ ur den gerichteten und den ungerichteten Graphen aus Abbildung 2.8 jeweils die Adjazenz-Matrix und die Adjazenz-Liste an. a
b
a
c
f
e
d
b
c
f
e
d
Abb. 2.8 Graphen zu Aufgabe 2.1
Bevor wir zu den wirklich wichtigen Dingen des Lebens kommen, wollen wir zum Aufw¨ armen einen einfachen Zusammenhang zwischen dem Knotengrad und der Anzahl der Kanten eines ungerichteten Graphen zeigen. Dieser Satz wird uns im Weiteren noch n¨ utzlich sein. Satz 2.7 (gerader Knotengrad) Sei G = (V, E) ein ungerichteter Graph. Dann gilt: Die Summe aller Knotengrade betr¨ agt 2 · |E|, oder mathematisch ausgedr¨ uckt: deg(v) = 2 · |E|. v∈V
haben wir auf Seite 27 erl¨ autert. Hier Die Schreibweise einer Summe mit wird u ¨ ber alle Knoten der Menge V summiert, die Laufvariable nimmt als Werte alle Elemente der endlichen Menge V an. Außerdem wird mit |E| die Anzahl der Elemente der Menge E bezeichnet. Beweis Jede Kante {u, v} ∈ E wird genau zweimal gez¨ ahlt, n¨ amlich einmal bei deg(u) und einmal bei deg(v). Mit Hilfe dieses Satzes k¨ onnen wir bereits einige einfache Aufgaben l¨ osen: Kann bei einer Menge von 11 Computern aus Gr¨ unden der Ausfallsicherheit jeder Computer mit genau drei anderen Computern direkt verbunden werden? Die Antwort ist: Nein! Denn dann w¨ are die Summe aller Knotengrade gleich 33, was aber keine durch zwei teilbare Zahl ist.
2.3
Grundlegende Probleme in gerichteten Graphen
Wir beschreiben in diesem Kapitel Graph-Algorithmen f¨ ur gerichtete Graphen. Wie bei der Tiefensuche im n¨ achsten Unterkapitel k¨ onnen sie meist aber auch
2.3 Grundlegende Probleme in gerichteten Graphen
67
auf ungerichtete Graphen angewendet werden, wobei wir aber hinsichtlich der Details unterscheiden m¨ ussen.
2.3.1
Tiefensuche und ihre Anwendungen
Einen der ersten Algorithmen, den man in einer Vorlesung u ¨ ber algorithmische Graphentheorie kennen lernt, ist die Tiefensuche (depth-first search). Diese wird zum L¨ osen vieler Aufgabenstellungen in der Informatik eingesetzt. Dazu geh¨ oren auch Aufgaben, die scheinbar zun¨ achst gar nichts mit Graphen zu tun haben. Beispielsweise werden Programme in der Sprache Prolog mit dem Resolutionskalk¨ ul (vgl. Kapitel 1.2.6) ausgef¨ uhrt, der u ¨ ber eine Tiefensuche implementiert ist. Hier markieren wir mittels der Tiefensuche die Knoten eines Graphen, die von einem gegebenen Knoten s aus erreichbar sind, zu denen es also Wege vom Knoten s aus gibt. Wir werden im Folgenden einen Algorithmus beschreiben, der dies leistet, aber dar¨ uber hinaus auch noch gewisse Z¨ ahlerwerte pro Knoten setzt, die wir anschließend f¨ ur die L¨ osung weiterer Aufgabenstellungen verwenden werden. Die Tiefensuche beginnt damit, zun¨ achst alle Knoten als unbesucht zu markieren und die rekursive Prozedur Dfs f¨ ur den Startknoten s aufzurufen, siehe Algorithmus 2.1. Auf die Z¨ ahler gehen wir sp¨ ater ein. Algorithmus 2.1 Initialer Aufruf der Tiefensuche markiere alle Knoten als unbesucht“ ” dfbZ¨ ahler := 0, dfeZ¨ ahler := 0 Dfs(s, besucht“) ” Die rekursive Prozedur Dfs (siehe Algorithmus 2.2) betrachtet alle zum Knoten u inzidenten Kanten, pr¨ uft, ob u ¨ ber eine solche Kante ein noch unbesuchter Knoten erreicht werden kann, und ruft ggf. die Prozedur Dfs wiederum f¨ ur einen solchen unbesuchten Knoten auf. Da die Knoten mit dem u ¨ bergebenen Wert besucht“ markiert werden, besteht nicht die Gefahr einer Endlosschleife. ” Algorithmus 2.2 Rekursive Tiefensuche procedure Dfs(u, mark) markiere u mit mark dfb[u] := dfbZ¨ ahler, dfbZ¨ ahler := dfbZ¨ ahler + 1 for all Kanten (u, v) ∈ E do betrachte alle zu u adjazenten Knoten v if Knoten v ist nicht mit mark markiert then Dfs(v, mark) dfe[u] := dfeZ¨ ahler, dfeZ¨ ahler := dfeZ¨ ahler + 1
68
2 Graphen (0, %)
(1)
(4)
c
e
b
d
f
c
e
d
f
(0, %) a
b
(7)
(0, %)
a
(1, %)
(2, %)
(0, %) a
(3, 0) c
b
d
(5, %) e
f
(2)
(5)
a
e
b (1, %)
d
f
(0, %) a
(3, 0) c
e
d
f
b
(8)
(0, %) c
(1, %)
(2, %)
(0, %) a
(3, 0) c
(5, %) e
e
b (1, %)
d (2, %)
(0, %) a
(3, 0) c
b (1, %)
d (2, %)
f (4, %)
(0, %) a
(3, 0) c
(5, 1) e
d
e
(1, %)
(2, %)
(4, %)
(1, %)
(2, %)
f (4, %)
(0, %) (10) a
(3, 0) c
(5, 1) e
(0, %) (11) a
(3, 0) c
(5, 1) e
(0, %) (12) a
(3, 0) c
(5, 1) e
(0, 5) (13) a
b (1, 4)
d
f (4, 2)
(3, 0) c
(5, 1) e
d (2, 3)
b (1, %)
d (2, 3)
f (4, 2)
b
f
(4, %)
(2, %)
f
(9)
c
(2, %)
b
d
(6)
a
(1, %)
(1, %)
b
(3)
b (1, 4)
d (2, 3)
f (4, 2)
f (4, 2)
Abb. 2.9 Ablauf der Tiefensuche auf einem Graphen mit Startknoten a
In der Abbildung 2.9 ist gezeigt, in welcher Reihenfolge die Knoten bei einer Tiefensuche aufgerufen werden k¨ onnen. Als Startknoten f¨ ur die Tiefensuche w¨ ahlen wir a, siehe Bild 2.9 (1). Als Paare sind die Werte dfb[u] und dfe[u] f¨ ur die Knoten u angegeben. Vom Knoten a aus sind die Knoten b und c erreichbar. Der Algorithmus w¨ ahlt eine der beiden Kanten, in unserem Beispiel die Kante zu Knoten b, und ruft die Prozedur Dfs(b, mark) auf. Die Kante (a, c) wird erst betrachtet, wenn der rekursive Aufruf beendet ist. Bild 2.9 (2) zeigt den Zustand, nachdem der Aufruf Dfs(b, mark) erfolgte. Innerhalb des rekursiven Aufrufs wird dann Dfs(d, mark) aufgerufen, da vom Knoten b aus nur Knoten d erreichbar ist. Bild 2.9 (3) zeigt, dass nun drei Kanten zur Auswahl stehen: (d, a), (d, c) und (d, f ). Da die Kante (d, a) zu einem bereits besuchten Knoten a f¨ uhrt, erfolgt kein rekursiver Aufruf Dfs(a, mark), sonst w¨ aren wir wieder am Anfang und h¨ atten eine Endlosschleife programmiert. Auf diese Art setzt sich
2.3 Grundlegende Probleme in gerichteten Graphen
69
das Verfahren fort. An den Knoten sind die Z¨ ahlerwerte dfb[u] und dfe[u] notiert, die zun¨ achst undefiniert sind (Wert % in Abbildung 2.9). Dann besagt dfb[u], als wievielter Knoten u erreicht wurde. Der dfe[u]-Wert besagt, als wievielter Knoten u fertig wurde. Diese Zahlen ben¨ otigen wir f¨ ur die Charakterisierung von Kanten. a
b
d
c
f
e
Abb. 2.10 Die Tiefensuche startet mit dem Knoten a. Durch die dick und durchgehend gezeichneten Baumkanten wird jeder Knoten erreicht. Diese Kanten entsprechen den rekursiven Aufrufen. Der Graph ist entsprechend den Rekursionsstufen in Ebenen gezeichnet. Die d¨ unnen, durchgehenden Vorw¨ artskanten laufen in dieser Darstellung nach unten und u ¨berspringen dabei Ebenen. Die dicken, unregelm¨ aßig gestrichelten Querkanten laufen quer her¨ uber zu einem bereits abgearbeiteten Bereich des Graphen, die dicken, regelm¨ aßig gestrichelten R¨ uckw¨ artskanten laufen zur¨ uck, also zu einer vorangegangenen Rekursionsebene und damit zu einem bereits besuchten Knoten.
Die Tiefensuche teilt die vom Startknoten aus erreichbaren Kanten des Graphen in vier disjunkte Mengen (also Mengen mit leerer Schnittmenge) auf. Die Baumkanten, in den Abbildungen 2.9 und 2.10 dick und durchgehend gezeichnet, sind die Kanten (u, v), f¨ ur die aus der Prozedur Dfs(u, mark) heraus ein rekursiver Aufruf Dfs(v, mark) erfolgt. F¨ ur diese Kanten gilt: dfb[u] < dfb[v] und dfe[u] > dfe[v]. Alle markierten Knoten werden ausgehend vom Startknoten u ¨ ber Baumkanten erreicht. Wenn wir nur die Baumkanten in Abbildung 2.10 betrachten, dann erhalten wir den Aufruf-Graphen f¨ ur die Prozedur Dfs. Der Aufrufgraph ist ein Baum, daher heißen seine Kanten Baumkanten. Auf B¨ aume gehen wir sp¨ ater in Kapitel 2.4.1 ein. Zuerst erfolgt ein rekursiver Abstieg (eine Folge rekursiver Aufrufe) in die Tiefe bis zum Knoten c (daher der Name Tiefensuche). Von hier aus sind keine weiteren Aufrufe m¨ oglich, wir sind in einer Sackgasse. Also gehen wir eine Aufrufebene zur¨ uck zum Knoten d, von dem ausgehend noch ein weiterer Aufruf m¨ oglich ist. Dieses Zur¨ uckgehen nennt man Backtracking. Der Name beschreibt, wie wir aus einem Labyrinth herausfinden k¨ onnen: Erreichen wir eine Sackgasse oder eine Stelle, an der wir schon waren, dann gehen wir unseren Weg (track) zur¨ uck (back), bis wir eine noch nicht probierte Abzweigung erreichen. Die R¨ uckw¨ artskanten (u, v), im Beispiel dick und regelm¨ aßig gestrichelt markiert, sind die Kanten, bei denen aus Dfs(u, mark) heraus kein Aufruf Dfs(v, mark) zu einem Knoten v erfolgt, da v bereits besucht, aber noch nicht abschließend bearbeitet ist, also noch keinen Endwert hat, siehe Schritt 4 und 9 in Abbildung 2.9. Es sind genau die Kanten (u, v), f¨ ur die gilt: dfb[u] > dfb[v] und dfe[u] < dfe[v].
70
2 Graphen Die Bezeichnung R¨ uckw¨ artskante beschreibt, dass die Tiefensuche ausgehend von v durch Prozeduraufrufe in die Tiefe“ (im Aufruf-Graphen geht es nur ” nach unten) zum Knoten u gelangt ist und nun eine Kante von u zur¨ uck nach v findet. Bei Querkanten (u, v) erfolgt der Aufruf Dfs(v, mark) ebenfalls nicht, allerdings ist dort der Knoten v sowohl besucht als auch abschließend bearbeitet worden, hat also bereits einen Endwert bekommen, siehe Schritt 8 in Abbildung 2.9. Querkanten sind genau die Kanten mit dfb[u] > dfb[v] und dfe[u] > dfe[v]. Eine Querkante verweist im Aufruf-Graphen quer hin¨ uber zu einem Prozeduraufruf Dfs(v, mark), der nicht in der Aufruffolge liegt, die zu Dfs(u, mark) f¨ uhrt. Die eine Querkante des Beispiels ist unregelm¨ aßig gestrichelt und dick gezeichnet. Die Vorw¨ artskanten, im Bild ist eine d¨ unn und durchgehend markiert, erf¨ ullen wie die Baumkanten dfb[u] < dfb[v] und dfe[u] > dfe[v] und lassen sich somit anhand der Nummerierung nach Ende des Algorithmus nicht von den Baumkanten unterscheiden. Im Gegensatz zu den Baumkanten wurde v aber bereits ausgehend von u u ¨ ber den Umweg anderer Knoten besucht, wenn in Dfs(u, mark) die Kante zu v betrachtet wird. Daher muss auch in diesem Fall kein rekursiver Aufruf stattfinden. W¨ urde die Tiefensuche die aus u auslaufenden Kanten in einer anderen Reihenfolge abarbeiten, bei der zuerst die Kante (u, v) verwendet wird, dann w¨ are (u, v) eine Baumkante. Wir haben jetzt nur noch den Fall vom Startknoten aus erreichbarer Kanten (u, v) mit dfb[u] < dfb[v] und dfe[u] < dfe[v] nicht diskutiert. Wegen dfb[u] < dfb[v] und der existierenden Kante (u, v) wird v direkt oder indirekt von u aus erreicht. Das bedeutet aber, dass v vollst¨ andig bearbeitet sein muss, bevor auch der Rekursionsaufruf von u abgeschlossen werden kann, also dfe[u] > dfe[v] – im Widerspruch zu dfe[u] < dfe[v]. Diesen Fall kann es also gar nicht geben.
Die Einteilung der erreichbaren Kanten in Baum- R¨ uckw¨ arts-, Quer- und Vorw¨ artskanten h¨ angt von der Reihenfolge ab, mit der die Tiefensuche die aus Knoten auslaufenden Kanten besucht. Sie ist also nur f¨ ur eine konkrete Implementierung der Tiefensuche eindeutig. Jetzt fragen Sie sich wahrscheinlich: Toll, und was soll das?“ Diese Frage ” wollen wir jetzt mit Anwendungen beantworten.
2.3 Grundlegende Probleme in gerichteten Graphen
71
Wenn wir wissen m¨ ochten, ob es in einem Graphen keine Kreise gibt, d. h. ob der Graph kreisfrei ist, m¨ ussen wir nur testen, ob eine Tiefensuche eine R¨ uckw¨ artskante findet. Wird eine R¨ uckw¨ artskante gefunden, dann enth¨ alt der Graph einen Kreis, ansonsten nicht. Allerdings m¨ ussen wir die Tiefensuche f¨ ur den Fall, dass vom Ausgangsknoten aus nicht alle anderen Knoten erreichbar sind, ein klein wenig modifizieren, siehe Algorithmus 2.3. Die Modifikation besteht nur darin, dass die Prozedur Dfs in einer Schleife so oft aufgerufen wird, bis kein unbesuchter Knoten mehr vorhanden ist. Algorithmus 2.3 Modifizierte Tiefensuche markiere alle Knoten als unbesucht“ ” dfbZ¨ ahler := 0, dfeZ¨ ahler := 0 while ein unbesuchter Knoten v existiert do Dfs(v, besucht“) ”
Satz 2.8 (Charakterisierung eines Kreises) Der gerichtete Graph G enth¨ alt genau dann einen Kreis, wenn die modifizierte Tiefensuche auf G eine R¨ uckw¨ artskante liefert.
Beweis Schauen wir uns zun¨ achst an, dass beim Auffinden einer R¨ uckw¨ artskante ein Kreis vorliegt. F¨ ur eine R¨ uckw¨ artskante (u, v) gilt: dfb[u] > dfb[v] und dfe[u] < dfe[v]. Aufgrund dieser Bedingungen war der Aufruf Dfs(v, mark) noch nicht beendet, w¨ ahrend Dfs(u, mark) ausgef¨ uhrt wurde, also existiert ein Weg von v nach u u ber Baumkanten. Zusammen mit (u, v) entsteht ein Kreis. ¨ ussen wir zeigen, Sei umgekehrt C = (v1 , v2 , . . . , vk , v1 ) ein Kreis in G. Dann m¨ dass die modifizierte Tiefensuche eine R¨ uckw¨ artskante liefert. Wir nehmen an, dass v1 der Knoten aus C ist, der von der Tiefensuche zuerst besucht wird, also dfb[v1 ] < dfb[vk ]. Falls das nicht so sein sollte, benennen wir die Knoten einfach um. Der Aufruf Dfs(v1 , mark) wird erst beendet, wenn alle von v1 aus erreichbaren Knoten, also insbesondere vk , besucht und abgearbeitet wurden. uckw¨ artskante. Daher gilt dfe[v1 ] > dfe[vk ]. Also ist (vk , v1 ) eine R¨ Die topologische Sortierung bestimmt zu einem gegebenen gerichteten Graphen G = (V, E) eine Nummerierung π(v1 ), . . . , π(vn ) der Knoten (d. h. π : V → 0, 1, . . . , n − 1} ist eine bijektive Abbildung (vgl. Definition 1.21 auf Seite 54), so dass gilt: Falls es eine Kante (u, v) ∈ E gibt, dann ist π(u) > π(v). Eine solche Sortierung ist immer dann hilfreich, wenn man sich fragt: Was ” soll ich als erstes tun, und wie geht es dann weiter?“ In Abbildung 2.11 ist eine topologische Sortierung gezeigt. Die gerichteten Kanten definieren, dass eine Aufgabe vor einer anderen Aufgabe erledigt werden muss, so muss bspw. zuerst
72
2 Graphen
Aufgabe A erledigt werden, bevor Aufgabe B in Angriff genommen werden kann. Wir haben dies bereits auf Seite 60 bei unserem Hausbaubeispiel gesehen. B 5
E 2
A
G
6
0 C
4
D
3
F 1
Abb. 2.11 topologische Sortierung
Algorithmisch k¨ onnen wir dieses Problem mittels der modifizierten Tiefensuche l¨ osen. Allerdings nur, wenn G kreisfrei ist, denn ansonsten kann eine solche Nummerierung nicht existieren. Es gilt der folgende Satz: Satz 2.9 (Berechnung einer topologischen Sortierung) Sei G = (V, E) ein gerichteter Graph, auf den bereits die modifizierte Tiefensuche angewendet wurde. Dann gilt: Wenn der Graph G kreisfrei ist, dann sind die dfe-Nummern eine topologische Sortierung. Beweis Wir m¨ ussen zeigen, dass dfe[u] > dfe[v] f¨ ur alle Kanten (u, v) ∈ E gilt. Dazu sehen wir uns die verschiedenen Kantentypen an (vgl. Abbildung 2.10). Nur bei R¨ uckw¨ artskanten gilt nicht dfe[u] > dfe[v]. Da G kreisfrei ist, kann es aber keine R¨ uckw¨ artskanten geben. Aufgabe 2.2 Wie viele topologische Sortierungen π : V → {0, 1, 2, 3, 4, 5, 6} gibt es f¨ ur den Graphen aus Abbildung 2.11 und f¨ ur den aus Abbildung 2.12? Wie k¨ onnen wir eine topologische Sortierung anhand der Eingangsgrade der Knoten finden? Eine andere Fragestellung, die z. B. f¨ ur soziale Netzwerke oder Computernetzwerke interessant ist, ist die Frage nach dem Zusammenhang eines Graphen.
2.3.2
Erreichbarkeit und starker Zusammenhang
Wie wir gesehen haben, k¨ onnen wir mittels Tiefensuche feststellen, welche Knoten von einem gegebenen Knoten aus erreichbar sind. Umgekehrt k¨ onnen wir
Abb. 2.12 Graph zu Aufgabe 2.2: Bestimmen Sie alle m¨ oglichen topologischen Sortierungen.
2.3 Grundlegende Probleme in gerichteten Graphen
73
auch alle Knoten finden, von denen aus ein gegebener Knoten erreichbar ist. Dazu m¨ ussen wir lediglich die Richtung der Kanten f¨ ur die Tiefensuche ¨ andern. Definition 2.10 (reverser Graph) Ein zum gerichteten Graphen G = (V, E) reverser Graph GR = (V, E R ) entsteht aus G, indem die Richtung der Kanten umdreht werden (vgl. Abbildung 2.13), d. h. E R = {(u, v) ∈ V × V : (v, u) ∈ E}. GR
G a
b
d
e
g
f
c
a
b
d
e
g
f
c
h
h
Abb. 2.13 Reverser Graph
Beispiel 2.11 (Tiefensuche im reversen Graph: Slicing) Bei der Analyse von Programmen werden diese h¨ aufig durch Graphen dargestellt. Als Beispiel betrachten wir das Programm aus Algorithmus 2.4, das, um die Darstellung einfach zu halten, ohne Funktionsaufrufe auskommt. Anweisungen, die einen Einfluss auf die Zeile 7 haben, bilden einen R¨ uckw¨ arts-Slice zu Zeile 7. Wenn beispielsweise ein falscher Wert f¨ ur i ausgegeben wird, dann m¨ ussen wir uns die Anweisungen des R¨ uckw¨ arts-Slices ansehen, um die Quelle des Fehlers zu finden. Algorithmus 2.4 Beispielprogramm zum Slicing 1: procedure Beispiel 2: i := 0 3: j := 1 4: while i < 10 do 5: j := j + i 6: i := i + 1 7: Ausgabe von i 8: Ausgabe von j Der Datenabh¨ angigkeitsgraph des Programms (siehe Abbildung 2.14) ist der gerichtete Graph, dessen Knoten den Anweisungen entsprechen und dessen Kanten u angigkeiten gebildet werden: ¨ ber Kontroll- oder Datenabh¨
74
2 Graphen Eine Kontrollabh¨ angigkeitskante ist eine gerichtete Kante, die ausdr¨ uckt, dass eine Anweisung die Ausf¨ uhrung der anderen Anweisung kontrolliert (sie steht hierarchisch u ¨ ber der anderen Anweisung). Zwei Knoten sind genau dann durch eine gerichtete Datenabh¨ angigkeitskante verbunden, wenn die zum ersten Knoten geh¨ orende Anweisung den Wert einer Variable festlegt oder ver¨ andert und die Anweisung des zweiten Knotens diese verwendet.
Die Kantenmenge des Datenabh¨ angigkeitsgraphen besteht aus allen Kontrollund Datenabh¨ angigkeitskanten. Um jetzt alle Anweisungen zu finden, die auf Zeile 7 eine Auswirkung haben k¨ onnten, k¨ onnen im reversen Datenabh¨ angigkeitsgraphen alle von Zeile 7 Ausgabe i“ aus erreichbaren Knoten mittels Tie” fensuche ermitteln (gef¨ arbte Knoten in Abbildung 2.14).
Beispiel
i:=0
j:=1
while i dfe[w] f¨ ur alle Knoten w aus B, der Knoten mit gr¨ oßtem dfe-Index befindet sich also auch in diesem Fall in A. Bevor wir mit dem Lemma die Korrektheit von Algorithmus 2.5 zeigen, stellen wir zun¨ achst weiter fest:
78
2 Graphen
Lemma 2.15 (SZHK des reversen Graphen) Der Graph G und der dazu reverse Graph GR haben dieselben starken Zusammenhangskomponenten.
Beweis Wir untersuchen im Beweis gar nicht die SZHK, sondern zeigen, dass zwei Knoten u und v, die durch einen Weg von u nach v und durch einen Weg von v nach u in einem der beiden Graphen verbunden sind, auch im anderen Graphen durch entsprechende Wege in beiden Richtungen verbunden sind. Damit sind automatisch auch die SZHK gleich. Wenn Wege von u nach v und von v nach u in G existieren und wir alle Kanten umdrehen, also insbesondere die Kanten auf diesen Wegen, dann existieren Wege von v nach u und von u nach v in GR . Die Aussage bleibt richtig, wenn wir G und GR vertauschen. Wir beweisen nun, dass Algorithmus 2.5 korrekt ist: Sei A die SZHK, f¨ ur die die modifizierte Tiefensuche im Schritt 1 einen Knoten mit dem gr¨ oßten dfeWert gefunden hat. Dazu sei E der von den verbleibenden Knoten induzierte Restgraph. Nach Lemma 2.14 kann es von allen anderen SZHK in G keine Kante zu einem Knoten aus A geben. Damit gibt es in GR keine Kanten und keine Wege von Knoten aus A nach Knoten E. Außerdem ist der von A induzierte Teilgraph von GR nach Lemma 2.15 eine SZHK. Damit markiert die mit einem Knoten aus A beginnende Tiefensuche genau die Knoten von A, die erste SZHK ist gefunden. Da ihre Knoten (eindeutig) markiert sind, werden sie von weiteren Tiefensuchen nicht mehr besucht. In Schritt 3 wird nun der Knoten von E mit dem gr¨ oßten dfe-Wert aus Schritt 1 ausgew¨ ahlt. Aufgrund von Lemma 2.14 liefert die Tiefensuche zu diesem Knoten wieder eine SZHK. Iterativ werden so alle SZHK gefunden.
2.3.3
K¨ urzeste Wege
Kommen wir nun wie angek¨ undigt zu einem Routenplaner. Routenplaner sind nicht nur f¨ ur den Autofahrer wichtig, um bei der Reiseplanung den k¨ urzesten Weg zum Ziel- oder Urlaubsort zu finden. Beispielsweise k¨ onnen auch bei der Bahnfahrt verschiedene Kosten minimiert werden: Finde die Zugverbindung mit m¨ oglichst kurzer Reisezeit, oder die, bei der man m¨ oglichst wenig umsteigen muss, oder die, die m¨ oglichst preiswert ist. Beim Routing im Internet werden mit OSPF (Open Shortest Path First) k¨ urzeste Wege berechnet. Wir formulieren in diesem Abschnitt die Algorithmen f¨ ur einen gerichteten Graphen, da es in unseren St¨ adten Einbahnstraßen gibt. Die Algorithmen funktionieren aber ohne Modifikationen auch f¨ ur ungerichtete Graphen. Gegeben ist
2.3 Grundlegende Probleme in gerichteten Graphen
79
also ein gerichteter, zusammenh¨ angender Graph G = (V, E, c) mit Kostenfunktion c. So einen Graphen nennen wir gewichtet. Die Funktion c weist jeder Kante einen Wert zu. Dieser Kantenwert beschreibt, welche Kosten eine Kante verursacht. Daher wird c auch oft als Kostenfunktion bezeichnet. Die Kosten zu e ∈ E werden also durch die (in der Regel nicht-negative) reelle Zahl c(e) beschrieben. Die L¨ ange eines Wegs (v0 , v1 , . . . vk ) in einem gewichteten Graphen k−1 ist definiert als Summe der Kantenwerte: i=0 c( (vi , vi+1 ) ). Die doppelten Klammern sehen ungewohnt aus. Die inneren Klammern geh¨ oren zur Beschreibung der Kante, die ¨ außeren zur Funktion c. Bei einem ungewichteten Graphen haben wir zuvor die L¨ ange als Anzahl der Kanten festgelegt. Das entspricht den konstanten Kantenwerten eins. Gibt es einen Weg von einem Knoten u zu einem Knoten v, dann gibt es auch mindestens einen k¨ urzesten Weg von u nach v. Das liegt daran, dass wir in Wegen Kanten nicht mehrfach zulassen. Dadurch gibt es nur endlich viele Wege zwischen u und v, darunter ist ein k¨ urzester. Wir stellen zun¨ achst fest, dass Teilwege eines k¨ urzesten Weges ihrerseits auch k¨ urzeste Wege sind. Man spricht hier von einer optimalen Sub-Struktur (Optimalit¨ atsprinzip von Bellmann). Lemma 2.16 (Teilwege k¨ urzester Wege) urzester Weg von v0 nach vk im Graphen Sei (v0 , v1 , v2 , . . . , vk ) ein k¨ (V, E, c), in dem keine Kreise negativer L¨ ange existieren. Dann ist jeder ur i < j auch ein k¨ urzester Weg von vi nach vj . Teilweg von vi nach vj f¨ Wir erlauben im Lemma auch negative Kantenwerte, m¨ ussen aber aufgrund unserer Definition von Weg, bei der wir das mehrfache Durchlaufen einer Kante verbieten, Kreise negativer L¨ ange ausschließen (siehe Abbildung 2.18). abe, Beweis Wenn es einen k¨ urzeren Weg zwischen Knoten vi und Knoten vj g¨ dann w¨ urden wir den bisherigen Teilweg durch diesen ersetzen. Wenn dabei keine Kante mehrfach auftritt, dann h¨ atten wir einen k¨ urzeren k¨ urzesten Weg gefunden – Widerspruch. Wenn eine Kante mehrfach auftritt, dann haben wir zwischen einem Auftreten und dem n¨ achsten einen Kreis. Nach Voraussetzung haben alle Kreise eine nicht-negative L¨ ange. Lassen wir alle weg, dann erhalten wir einen h¨ ochstens noch k¨ urzeren Weg – Widerspruch.
−1 1 v0
v1
v2 −1
Abb. 2.18 Der Weg (v0 , v1 ) mit L¨ ange 1 ist kein k¨ urzester Weg von v0 nach v1 , aber er ist ein Teilweg des k¨ urzesten Wegs (v0 , v1 , v2 , v1 ) mit L¨ ange −1. Dieser Effekt kann bei Kreisen negativer L¨ ange auftreten. H¨ atten wir die Mehrfachverwendung von Kanten innerhalb eines Weges erlaubt, dann g¨ abe es hier keinen k¨ urzesten Weg – und damit auch kein Problem.
80
2 Graphen
Bei k¨ urzesten Wegen gilt die Dreiecksungleichung, deren Name sich aus Abbildung 2.19 ableitet. Wir bezeichnen dazu mit dist(u, v) die L¨ ange des k¨ urzesten Wegs von u nach v, falls es einen Weg zwischen u und v gibt. Lemma 2.17 (Dreiecksungleichung) Sei (V, E, c) ein Graph ohne Kreise negativer L¨ ange. F¨ ur alle Knoten u, v, w ∈ V , f¨ ur die es einen Weg von u nach v und einen Weg von v nach w gibt, gilt: dist(u, w) ≤ dist(u, v) + dist(v, w).
Beweis Aus k¨ urzesten Wegen von u nach v sowie von v nach w k¨ onnen wir analog zum Beweis von Lemma 2.16 durch Aneinandersetzen und anschließendes Weglassen von Kreisen (damit Kanten nicht mehrfach auftreten) einen Weg von u nach w konstruieren. Dessen L¨ ange ist dist(u, v) + dist(v, w) abz¨ uglich der nicht-negativen L¨ angen der Kreise, also h¨ ochstens dist(u, v) + dist(v, w). Die L¨ ange eines k¨ urzesten Wegs von u nach w ist gleich oder noch kleiner.
dist(u,w)
u dist(u,v)
w v
dist(v,w)
Abb. 2.19 Visualisierung des Beweises zu Lemma 2.17
Algorithmus 2.6 Dijkstras Algorithmus zur Berechnung k¨ urzester Wege S := ∅, Q := {s}, d[s] := 0 while Q = ∅ do u ∈ Q sei ein Knoten mit d[u] ≤ d[v] f¨ ur alle v ∈ Q u hat unter allen Knoten in Q die bislang k¨ urzeste Entfernung zu s Q := Q \ {u}, S := S ∪ {u} for all e = (u, v) ∈ E mit v ∈ S do if v ∈ Q then if d[v] > d[u] + c(e) then d[v] := d[u] + c(e), π[v] := u else Q := Q ∪ {v}, d[v] := d[u] + c(e), π[v] := u Mit dem bisher Besprochenen k¨ onnen wir folgende Idee formulieren: Berechne vom Start s aus immer l¨ angere, k¨ urzeste Teilwege, um ausgehend von s die k¨ urzesten Wege zu allen anderen Knoten zu finden. Auf dieser Idee basiert Dijkstras Algorithmus (siehe Algorithmus 2.6): Gegeben sei ein gerichteter
2.3 Grundlegende Probleme in gerichteten Graphen
81
Graph G = (V, E, c) mit der Knotenmenge V , der Kantenmenge E und einer Kostenfunktion c sowie ein Startknoten s ∈ V . Wir setzen jetzt nicht-negative Kantengewichte voraus, c(v) > 0 f¨ ur alle v ∈ V . Da es bei Straßenkarten (außer in einer Horrorgeschichte von Stephen King) keine negativen Entfernungen gibt, sollte diese Einschr¨ ankung uns keine Bauchschmerzen bereiten. Wir werden uns sp¨ ater u atten. In der Menge ¨ berlegen, welche Auswirkungen negative Gewichte h¨ S speichern wir alle Knoten, zu denen bereits ein k¨ urzester Weg gefunden ist. In der Menge Q sind alle Knoten gespeichert, mit denen wir aktuell arbeiten. F¨ ur die Knoten u ∈ S steht in d[u] die L¨ ange des k¨ urzesten Wegs. F¨ ur die Knoten u ∈ Q steht in d[u] die L¨ ange des bislang gefundenen k¨ urzesten Wegs. F¨ ur andere Knoten ist d undefiniert. Das Array π speichert in π[v] den Vorg¨ anger des Knotens v, u ¨ber den der urzeste Weg von s nach v l¨ auft. Auf diese bisher (oder endg¨ ultig) ermittelte k¨ Weise k¨ onnen wir sp¨ ater die k¨ urzesten Wege zur¨ uckverfolgen und ausgeben und m¨ ussen daf¨ ur nur wenige Informationen speichern und im Laufe des Algorithmus anpassen. Zu Beginn der while-Schleife ist ein k¨ urzester Weg zu dem Knoten u ∈ Q gefunden, der den kleinsten Wert im Feld d[ ] hat. Das werden wir im Anschluss beweisen. Dieser Knoten wird zur Menge S hinzugef¨ ugt, da wir den k¨ urzesten Weg von s zu u zu diesem Zeitpunkt kennen. Ihn m¨ ussen wir bei der weiteren Suche auch nicht mehr ber¨ ucksichtigen, daher wird er aus der Menge Q entfernt. Allerdings m¨ ussen wir die von u aus direkt u ¨ ber eine Kante erreichbaren Knoten ber¨ ucksichtigen, wenn f¨ ur sie noch kein k¨ urzester Weg berechnet ist. Sind diese noch nicht in Q, so werden sie aufgenommen. In jedem Fall wird der bislang k¨ urzeste Weg zu diesen Knoten mit dem Wissen u urzesten Weg zu ¨ ber den k¨ u aktualisiert. Die Suche breitet sich somit in V jeweils u ¨ ber den Knoten mit kleinstem d-Wert in Q aus. Der Algorithmus berechnet so sukzessive k¨ urzeste Wege zu allen Knoten. ¨ Ublicher Weise ist man aber an einem konkreten Ziel interessiert. Wird dann der Zielknoten zu Beginn der while-Schleife aus Q genommen, ist der k¨ urzeste Weg zum Ziel gefunden, und die Berechnung kann abgebrochen werden. In Abbildung 2.20 ist eine Suche nach k¨ urzesten Wegen ausgehend von Bielefeld dargestellt. Wie gehen also davon aus, dass diese Stadt existiert. Eigentlich wollen wir von Bielefeld nach W¨ urzburg, aber das Ziel beeinflusst nicht, wie sich die Suche u ¨ ber S ∪ Q in V ausbreitet. Zun¨ achst wird Knoten Bielefeld mit der Distanz 0 initialisiert, da es der Startknoten unserer Reise ist. Der k¨ urzeste Weg von Bielefeld nach Bielefeld ist gefunden, er hat die L¨ ange 0. Daher wird er aus Q entfernt und in S eingetragen. Jetzt werden alle u ¨ ber eine Kante von Bielefeld aus erreichbaren Knoten in die Suchmenge Q aufgenommen. Ihre Distanzen berechnen sich u ¨ ber 0 = d[Bielefeld] plus dem Kantenwert der Kante, u ¨ ber die der Knoten erreicht wird. Jetzt ist Osnabr¨ uck der Knoten mit dem kleinsten d-Wert in Q. Er wird aus Q genommen
82
2 Graphen CUX
CUX EMD
102 119
OL
EMD
HH
45
87 122
HB
163
122
H (113) 56
H (113)
OS (56) 58 MS
113
56
68
53
DU 27
106
DO (106)
176
116
KS (133) 193
K
165 KS (133) 219 193
K 223
192
176 133
94
D 41
219
106
DO (106)
53
DU 27
94 41
68
133
165
D
113 BI
BI 116
163
122 133
122 133 OS (56) 58 MS
45
87 HB
HH
102 119
OL
223
192
F
F 116
WÜ
116
WÜ
Abb. 2.20 Berechnung k¨ urzester Weg ausgehend von Bielefeld (BI). Der Knoten Osnabr¨ uck (OS) wird aus Q entnommen, f¨ ur ihn ist der tats¨ achlich k¨ urzeste Weg gefunden. Von dort werden dann Oldenburg (OL), M¨ unster (MS) und Bremen (HB) erreicht und in Q aufgenommen. Danach ist der k¨ urzeste Weg nach Dortmund (DO) gefunden, usw.
und zu S hinzugef¨ ugt. Nun werden alle von Osnabr¨ uck aus direkt erreichbaren St¨ adte untersucht. Auf diese Weise breitet sich die Suche in alle Richtungen gleichm¨ aßig, also nahezu kreisf¨ ormig um den Startknoten, aus. Wir wollen jetzt die Korrektheit des Algorithmus beweisen. Sie fragen sich, warum ein Beweis der Korrektheit n¨ otig ist? Dass der Algorithmus korrekt ist, ist doch klar, oder? Oft behaupten das jedenfalls die Studierenden. Aber warum haben wir ausgeschlossen, dass die Kantengewichte negativ sind? Tats¨ achlich funktioniert der Algorithmus bei negativen Kantengewichten n¨ amlich nicht mehr. Ist das so offensichtlich? Satz 2.18 (Dijkstras Algorithmus) Bei nicht-negativen Kantenwerten liefert Dijkstras Algorithmus d[v] = dist(s, v) f¨ ur alle Knoten v ∈ V , die von s aus erreichbar sind.
Beweis Da die in d gespeicherten Entfernungen zu Wegen geh¨ oren, die von s zum jeweiligen Knoten f¨ uhren, ist tats¨ achlich offensichtlich, dass diese Entfernungen nicht kleiner als die L¨ ange von k¨ urzesten Wegen von s zu diesen Knoten sein k¨ onnen: W¨ ahrend der Ausf¨ uhrung des Algorithmus gilt stets f¨ ur alle v ∈ S ∪ Q, dass d[v] ≥ dist(s, v). (2.1)
2.3 Grundlegende Probleme in gerichteten Graphen
83
Wir m¨ ussen jetzt dar¨ uber hinaus zeigen, dass a) d[v] = dist(s, v) gilt, wenn v zur Menge S hinzu genommen wird, und b) jeder erreichbare Knoten v irgendwann in S aufgenommen wird. Diesen Teil ¨ stellen wir anschließend als Ubungsaufgabe. Da der Wert von d[v] nach der Aufnahme von v in S nicht mehr ver¨ andert wird, folgt aus a), dass tats¨ achlich die k¨ urzeste Entfernung berechnet wird, und zwar gem¨ aß b) f¨ ur jeden erreichbaren Knoten. Wir f¨ uhren den Beweis zu a) indirekt: Angenommen, u ist der erste Knoten, der zu S hinzu genommen wird, f¨ ur den d[u] = dist(s, u) gilt. Wir betrachten den Zustand des Algorithmus und damit die Mengen S und Q genau in dem Moment, bevor u zu S hinzu gef¨ ugt wird. In dieser Situation ist bereits S = ∅, da s ∈ S ist. Alle Wege, die von s ausgehen, besitzen also Knoten in S. Sei y der erste Knoten aus V \ S auf einem k¨ urzesten Weg von s nach u. Diesen Knoten muss es geben. Denn da u ∈ S ist, gibt es Knoten aus V \ S auf diesem Weg (y = u w¨ are also m¨ oglich). Weiter sei x ∈ S der Vorg¨ anger von y auf diesem Weg. Der Sachverhalt ist in Abbildung 2.21 dargestellt. Da y u ¨ ber eine Kante einem Knoten aus S folgt und selbst noch nicht in S liegt, muss y ∈ Q gelten. Sp¨ atestens bei der Aufnahme von x zu S wurde y in Q aufgenommen. Damit gibt es einen d-Wert zu y. u s x S
y
Abb. 2.21 Darstellung der Aussage vom Beweis zu Satz 2.18: Die gestrichelten Linien sind Wege. Zwischen Knoten x und y existiert eine Kante.
Es gilt d[x] = dist(s, x), da u der erste Knoten ist, der die Aussage a) verletzt. Bei der Aufnahme von y zu Q wurde d[y] := dist(s, x) + c((x, y)) gesetzt. Zwischenzeitlich kann sich diese Distanz h¨ ochstens verkleinert haben, so dass d[y] ≤ dist(s, x) + c((x, y)) gilt. Nun wissen wir wegen Lemma 2.16, dass Teilwege (wie der von s nach y) k¨ urzester Wege (wie der von s nach u) ebenfalls k¨ urzeste Wege sind. Damit ist dist(s, y) = dist(s, x) + c((x, y)), also d[y] ≤ dist(s, y). Wegen (2.1) haben wir zus¨ atzlich d[y] ≥ dist(s, y), so dass d[y] = dist(s, y). Jetzt benutzen wir, dass alle Kantengewichte nicht-negativ sind, also insbesondere die der Kanten auf dem Weg von y nach u. Damit ist d[y] = dist(s, y) ≤ dist(s, u) ≤ d[u].
(2.2)
84
2 Graphen
Aktuell sind u und y in Q. Der Algorithmus w¨ ahlt aber u zur Aufnahme in S. Daher ist d[u] ≤ d[y]. Damit bleibt wegen (2.2) nur d[u] = d[y] und d[u] = dist(s, u). Das ist aber ein Widerspruch zu unserer Annahme, Teil a) ist bewiesen.
Aufgabe 2.3 Bestimmen Sie f¨ ur den Graphen aus Abbildung 2.22 die k¨ urzesten Wege vom Startknoten s aus zu allen anderen Knoten mittels Dijkstras Algorithmus. 5
a
b 3
4 3
2
s
c
1 8
7
6 e
1
d
Abb. 2.22 Graph zu Aufgabe 2.3
Aufgabe 2.4 ¨ Uberlegen Sie sich (z. B. mit einem indirekten Beweis), dass Dijkstras Algorithmus jeden von s aus erreichbaren Knoten ebenfalls erreicht. Das ist der fehlende Teil b) des vorangehenden Beweises. Aufgabe 2.5 Schreiben Sie den Algorithmus von Dijkstra so um, dass sowohl ausgehend von einem Startknoten s als auch von einem Zielknoten z nach k¨ urzesten Wegen gesucht wird, um so einen k¨ urzesten Weg von s nach z zu finden. Wenn sich die Suchen in der Mitte“ treffen, kann der Algorithmus beendet werden. Man ” nennt ein solches Vorgehen eine bidirektionale Suche. Ein Ansatz zum schnelleren Finden eines Wegs zu einem vorgegebenen Ziel ist der A -Algorithmus, der die Suche mit einer Heuristik zielgerichtet gestaltet. Die Suchmenge Q wird daher f¨ ur den Knoten aus Q um Nachbarn erweitert, f¨ ur den ein berechneter kurzer Weg zum Startknoten s (wie im Algorithmus von Dijkstra) und ein gesch¨ atzt kurzer Weg zum Zielknoten z vorliegt. Die berechnete und die gesch¨ atzte Distanz werden dabei addiert. Als Sch¨ atzung kann z. B. die Luftlinienentfernung h(v) des Knotens v zum Ziel verwendet werden. Voraussetzung dazu ist, dass zu allen Knoten Koordinaten vorliegen. Hat beispielsweise der Zielknoten die Koordinaten (xz , yz ) und ein Knoten v die Koordinaten (xv , yv ) als Punkte in der Ebene, dann ist die Di stanz h(v) := (xz − xv )2 + (yz − yv )2 . Diese Entfernung ergibt sich aus dem Satz des Pythagoras (vgl. Seite 186), nach dem in einem rechtwinkligen Dreieck mit Seitenl¨ angen a, b und c, wobei c die l¨ angste und damit dem rechten Winkel
2.3 Grundlegende Probleme in gerichteten Graphen
85
gegen¨ uber liegende Seite ist, gilt: a2 + b2 = c2 . Hier ist a2 = (xz − xv )2 und 2 onnen b = (yz − yv )2 (vgl. Abbildung 2.23). Liegen 3D-Koordinaten vor, dann k¨ wir unter Ber¨ ucksichtigung von H¨ ohen ganz ¨ ahnlich vorgehen, vgl. Seite 319)
z
s
S
Q
yz − yu
u (xu, yu)
(xz, yz )
x z − xu
Abb. 2.23 Zielgerichtetes Vorgehen bei A ,
Der A -Algorithmus entsteht damit aus dem Algorithmus von Dijkstra (siehe Algorithmus 2.6), indem die Anweisung u ∈ Q sei ein Knoten mit d[u] ≤ d[v] f¨ ur alle v ∈ Q ersetzt wird durch u ∈ Q sei ein Knoten mit d[u] + h(u) ≤ d[v] + h(v) f¨ ur alle v ∈ Q. In Abbildung 2.23 entspricht das Gewicht des durchgehend gezeichneten Wegs dem Wert d[u]. Dazu wird der Luftlinienabstand von u zu z addiert. Ohne zus¨ atzliches Wissen u ¨ber die nicht-negativen Kantengewichte und die neue, auf V definierte Distanzfunktion h ist aber jetzt nicht mehr sichergestellt, dass der Algorithmus tats¨ achlich nicht nur einen kurzen, sondern einen k¨ urzesten Weg findet. Auf entsprechende hinreichende Bedingungen f¨ ur die Korrektheit des Verfahren wollen wir hier aber nicht eingehen. Hat man eine Straßenkarte und sind die Kantengewichte Streckenl¨ angen, dann sind die Bedingungen aber erf¨ ullt. Ein Navigationssystem kann also den A -Algorithmus verwenden und erh¨ alt damit tats¨ achlich den k¨ urzesten Weg. Wird die Luftlinienentfernung zum Ziel bei der Auswahl der Knoten ber¨ ucksichtigt, ist Osnabr¨ uck kein g¨ unstiges Zwischenziel auf dem Weg von Bielefeld nach W¨ urzburg. Jetzt erscheint Kassel als Zwischenziel geeigneter, siehe dazu Abbildung 2.24. An den Knoten ist jeweils die Summe aus der Distanz vom Startknoten zum Knoten und der Luftlinienentfernung vom Knoten zum Ziel notiert. oßer, je weiter Die Beschleunigung durch den A -Algorithmus ist also umso gr¨ Start- und Zielknoten auseinander liegen. Suchen wir also einen Weg von Bielefeld nach W¨ urzburg in einer echten Straßenkarte und nicht in unserem SuperMini-Beispiel, dann ist die Beschleunigung sehr groß, bei der Suche innerhalb einer Kleinstadt ist die Beschleunigung zu vernachl¨ assigen. Wir haben bislang vorausgesetzt, dass alle Kanten nicht-negative Gewichte haben. Dabei sind negative Gewichte bei einigen Aufgabenstellungen aber durchaus sinnvoll: Eine Anwendung von negativen Kantengewichten erhalten wir, wenn wir l¨ angste Wege berechnen wollen. Erinnern wir uns an das Hausbaubeispiel von
86
2 Graphen CUX
CUX EMD
102 OL
EMD
119
OL
HB
HB 122
122
163
116
68
H ( 113 + 284 = 397)
116
176
106
133
41
219 193
K
KS ( 133 + 171 = 304)
H ( 113 + 284 = 397)
113
56
BI 176
106
133 DO (106+275=381) 165 94
41
KS ( 133 + 171 = 304)
219 193
K
223
192
223
192
68
53
DU 27 D
94
D
OS (56+311=367) 58 MS
BI
DO (106+275=381) 165
53
DU 27
113
56
163
122 133
122 133 OS (56+311=367) 58 MS
HH
119
45
87
45
87
102
HH
F (326 + 107 = 433) 116
116
WÜ
WÜ (356 + 0 = 356)
Abb. 2.24 Routenberechnung von Bielefeld nach W¨ urzburg mittels A
Seite 60. Wir f¨ ugen Kantengewichte ein, die die Dauer eines Bauabschnitts angeben. Wenn wir wissen wollen, wie lange der Hausbau h¨ ochstens dauert, dann m¨ ussen wir den l¨ angsten Weg suchen. Damit wir daf¨ ur keinen eigenen Algorithmus ben¨ otigen (wir sind faul), multiplizieren wir alle Kantengewichte mit −1 und suchen dann einen k¨ urzesten Weg. Denn je gr¨ oßer die L¨ ange eines Weges ist, desto kleiner wird die Wegl¨ ange mal −1. Negative Kantengewichte kommen auch dann vor, wenn wir Kosten und Gewinne modellieren wollen: Kosten sind positiv, Gewinne negativ. Bei der Routenplanung fallen auf mautpflichtigen Straßen Kosten an, landschaftlich sch¨ one Strecken sind ein Gewinn. Wir modellieren das, indem wir einen definierten Wert auf den tats¨ achlichen Kantenwert addieren oder von ihm subtrahieren. Dadurch wird eine sch¨ one, aber eventuell l¨ angere Strecke k¨ urzer als die vermeintlich k¨ urzeste aber unsch¨ one Strecke. Die Kantengewichte k¨ onnen ¨ durch das Andern der Gewichte auch negativ werden. Wenn wir nun k¨ urzeste Wege suchen, werden die mautpflichtigen Straßen gemieden, landschaftlich sch¨ one Strecken bevorzugt. Bei den Definitionen des Wegs und des Kreises haben wir verlangt, dass keine Kante mehrfach verwendet wird. Damit ist die Wegl¨ ange durch die endliche Anzahl der Kanten beschr¨ ankt, es gibt nur endlich viele Wege und damit auch k¨ urzeste und l¨ angste Wege. Wenn wir erlauben w¨ urden, dass Kanten mehrfach durchlaufen werden, dann gibt es bei ausschließlich positiven Gewichten k¨ urzeste Wege, aber l¨ angste m¨ ussten nicht existieren. Bei ausschließlich negativen Gewichten g¨ abe es dann
2.3 Grundlegende Probleme in gerichteten Graphen
87
l¨ angste, aber eventuell keine k¨ urzesten Wege (siehe Abbildung 2.25). Und bei einer Mischung von positiven und negativen Gewichten k¨ onnte es sein, dass weder k¨ urzeste noch l¨ angste Wege existieren. u
v
Abb. 2.25 Kreise negativer L¨ ange f¨ uhren zu beliebig kurzen Wegen, wenn Kanten mehrfach durchlaufen werden d¨ urften.
d[u] + c((u, v)) then d[v] := d[u] + c((u, v)), π[v] := u for all (u, v) ∈ E do if d[v] > d[u] + c((u, v)) then Meldung Es gibt Kreise mit negativem Gewicht.“ und Abbruch ”
s p: v0
v1
v3 v2
vk ...
v
Abb. 2.28 Ein k¨ urzester Weg
Wir zeigen die Korrektheit des Algorithmus unter der Voraussetzung, dass keine Kreise negativer L¨ ange erreichbar sind. Sei dazu v ∈ V ein beliebiger Knoten. Wir betrachten einen (stets existierenden) k¨ urzesten Weg p = (v0 , v1 , . . . , vk ) von s = v0 nach v = vk , wie er in Abbildung 2.28 dargestellt ist. Da Teilwege von k¨ urzesten Wegen nach Lemma 2.16 ebenfalls k¨ urzeste Wege sind, gilt: dist(s, vi ) = dist(s, vi−1 ) + c((vi−1 , vi )). Initial wird im Algorithmus von Bellman/Ford der Wert d[s] auf null gesetzt, are s Knoten eines Kreises negativer also gilt d[s] = d[v0 ] = 0 = dist(s, v0 ). W¨ L¨ ange, dann w¨ are d[s] kleiner, aber das haben wir ja ausgeschlossen. Die aktuelle Entfernung von s zu allen anderen Knoten v wird mit einem sehr großen Wert d[v] := ∞ initialisiert. Das Symbol ∞ steht in der Mathematik f¨ ur unendlich“. ”
2.3 Grundlegende Probleme in gerichteten Graphen
89
Dabei handelt es sich um keine Zahl, sondern um die Beschreibung eines Grenzwertes, siehe Definition 4.16 auf Seite 235. Hier gen¨ ugt es, wenn wir d[v] mit einem Wert belegen, der gr¨ oßer als jede tats¨ achlich auftretende Entfernung ist. Wir betrachten jetzt jeweils einen Durchlauf der ¨ außeren Schleife: Nach dem ersten Durchlauf u ¨ ber alle Kanten aus E wurde irgendwann die Kante (v0 , v1 ) betrachtet und somit d[v1 ] = d[v0 ] + c((v0 , v1 )) = dist(s, v1 ) gesetzt. Nachdem das zweite Mal alle Kanten aus E durchlaufen wurden, gilt d[v2 ] = dist(s, v2 ). ussen wir Nach einem i-ten Schleifendurchlauf ist d[vi ] = dist(s, vi ). Das m¨ uns aber noch kurz u ¨berlegen, denn der Algorithmus verwendet Kanten auch mehrfach. Da dadurch mehr Wege“ gemessen werden als durch die Definiti” on des Wegs zul¨ assig sind, kann ein k¨ urzerer“ als der k¨ urzeste Weg gefunden ” werden. Das geschieht aber nur, wenn es erreichbare Kreise negativer L¨ ange gibt – und die haben wir ausgeschlossen. Damit ist nach dem k-ten Durchlauf d[v] = d[vk ] = dist(s, v). Jetzt k¨ onnte aber k gr¨ oßer als die Anzahl der Schleifendurchl¨ aufe sein. Wir m¨ ussen also zeigen, dass es einen k¨ urzesten Weg von s zu v mit h¨ ochstens |V | − 1 Kanten gibt, der dann im vorangehenden Argument verwendet werden kann. Haben wir einen k¨ urzesten Weg mit mehr als |V | − 1 Kanten, dann wird ein Knoten mehrfach besucht, und das Wegst¨ uck von diesem Knoten zu sich selbst ist ein Kreis negativer L¨ ange (ausgeschlossen) oder der L¨ ange null (kann weggelassen werden). Also gibt es einen k¨ urzesten Weg mit k ≤ |V | − 1. Aufgabe 2.6 Verifizieren Sie, dass die letzte Schleife des Algorithmus die Voraussetzung pr¨ uft, dass keine von s aus erreichbaren Kreise negativer L¨ ange existieren d¨ urfen. Abgesehen von der Initialisierung z¨ ahlen wir (|V | − 1) · |E| + |E| = |V | · |E| Ausf¨ uhrungen der (inneren) Schleifenbl¨ ocke. Das f¨ uhrt im Allgemeinen zu einer erheblich schlechteren Laufzeit als beim Algorithmus von Dijkstra, der daf¨ ur aber nur bei nicht-negativen Kantengewichten funktioniert. Auch k¨ onnen wir nicht wie beim Algorithmus von Dijkstra vorzeitig stoppen, wenn der Zielknoten erreicht wird. Aufgabe 2.7 ¨ Andern Sie den Algorithmus von Bellmann/Ford f¨ ur einen kreisfreien, gerichteten Graphen so ab, der er eine bessere Laufzeit im Sinne von weniger Schleifendurchl¨ aufen ben¨ otigt. Benutzen Sie dazu eine aus der Tiefensuche resultierende, nach Satz 2.9 existierende topologische Sortierung.
90
2 Graphen
2.4
Grundlegende Probleme in ungerichteten Graphen
2.4.1
B¨ aume und minimale Spannb¨ aume
B¨ aume sind elementar in der Informatik und begegnen uns oft auch als Datenstrukturen in Programmen bzw. Algorithmen. Wir haben bei der Tiefensuche den Begriff Baumkante verwendet, ohne B¨ aume n¨ aher zu erl¨ autern. Fassen wir Baumkanten als ungerichtete Kanten auf, dann bilden sie einen Spannbaum (siehe Abbildung 2.10 auf Seite 69). Wir definieren zun¨ achst den Begriff Baum und sehen uns dann Spannb¨ aume an. Sei G = (V, E) ein ungerichteter Graph. Der Graph G ist zusammenh¨ angend, wenn es zwischen jedem Paar von Knoten einen Weg in G gibt, also wenn gilt: F¨ ur alle u, v ∈ V existiert ein Weg von u nach v in G. Da der Graph G ungerichtet ist, gibt es mit einem Weg von u nach v auch einen Weg v nach u. Eine Unterscheidung zwischen starkem und schwachem Zusammenhang wie bei gerichteten Graphen ist hier also nicht sinnvoll.
Abb. 2.29 Ein Baum (links) und ein Wald (rechts)
Falls G zusammenh¨ angend und kreisfrei ist, nennt man G einen Baum. In Abbildung 2.29 ist links ein solcher Baum zu sehen. Einen kreisfreien (und in der Regel nicht-zusammenh¨ angenden) Graphen nennt man einen Wald. In einem Wald sind die maximal zusammenh¨ angenden Teile des Graphen, das sind die Zusammenhangskomponenten (ZHK), jeweils B¨ aume. Man kann also sagen, dass ein Wald aus B¨ aumen besteht, was nicht so ungew¨ ohnlich ist (siehe Abbildung 2.29, rechts). Aufgabe 2.8 Sei G = (V, E) ein ungerichteter, nicht zusammenh¨ angender Graph. Zeigen Sie, dass der komplement¨ are Graph (V, CV ×V E) mit CV ×V E = {{u, v} : u, v ∈ V, u = v, {u, v} ∈ E}, der alle m¨ oglichen Kanten enth¨ alt, die nicht in E sind, zusammenh¨ angend ist. Beachten Sie, dass zwei Knoten aus verschiedenen ZHK von G im komplement¨ aren Graph durch eine Kante verbunden sind.
2.4 Grundlegende Probleme in ungerichteten Graphen
91
Satz 2.19 (Kantenzahl im Baum) F¨ ur einen ungerichteten, zusammenh¨ angenden Graphen G = (V, E) gilt: G ist ein Baum ⇐⇒ |E| = |V | − 1.
Beweis Wir zeigen zun¨ achst, dass f¨ ur einen Baum die Formel |E| = |V | − 1 gilt. Sie ist erf¨ ullt, falls der Baum nur aus einem Knoten besteht, denn dann gibt es keine Kanten. Auch f¨ ur den Baum, der aus zwei Knoten besteht, gilt die Formel, denn die zwei Knoten sind durch genau eine Kante miteinander verbunden. Wir k¨ onnen jeden gr¨ oßeren Baum dadurch erzeugen, dass wir sukzessive immer einen weiteren Knoten hinzu nehmen, und diesen neuen Knoten mittels einer weiteren Kante mit einem der bereits bestehenden Knoten verbinden. Denn da ein Baum zusammenh¨ angend ist (oder aufgrund der entsprechenden Voraussetzung), muss mindestens einer der noch nicht ber¨ ucksichtigten Knoten von einem der bereits aufgenommenen Knoten u ber eine Kante erreichbar sein – sogar von ¨ genau einem, da es sonst einen Kreis g¨ abe. Auf diese Weise erhalten wir jeweils eine Kante und einen Knoten mehr, so dass stets die Invariante gilt, dass eine Kante weniger als Knoten vorhanden ist. Sind alle Knoten ber¨ ucksichtigt, liegt außerdem der gegebene Baum vor, und |E| = |V | − 1 ist gezeigt. Jetzt m¨ ussen wir noch die umgekehrte Richtung zeigen. Dies machen wir indirekt, indem wir annehmen, dass der zusammenh¨ angende Graph mit |V | − 1 Kanten kein Baum ist, also nicht kreisfrei ist. Aus einem Kreis k¨ onnen wir aber eine Kante weglassen, so dass der restliche Graph weiterhin zusammenh¨ angend ist. Das k¨ onnen wir so lange tun, bis es keinen Kreis mehr gibt. Da wir in jedem Schritt eine Kante entfernen, ist irgendwann Schluss (der Algorithmus terminiert). Dann haben wir einen kreisfreien, zusammenh¨ angenden Graphen (also einen Baum) mit weniger als |V | − 1 Kanten – im Widerspruch zur zuvor gezeigten Aussage. Sobald wir zu einem Baum auch nur eine einzige Kante hinzuf¨ ugen, entsteht ein Kreis. Das ist eine direkte Konsequenz des Satzes. Einen Baum k¨ onnen wir stets so zeichnen, dass die Knoten in Ebenen angeordnet sind. Dabei w¨ ahlen wir einen Knoten als Wurzel aus und ordnen ihn in der Ebene null, die ganz oben gezeichnet wird, an. Die mit ihm adjazenten Knoten werden in der Ebene eins darunter eingezeichnet. Die mit diesen adjazenten und noch nicht gezeichneten Knoten stellen wir in der Ebene zwei dar, usw. Da der Baum zusammenh¨ angend ist, gelangen alle Knoten in diese Darstellung. Außerdem gibt es nur Kanten zwischen benachbarten Ebenen, denn sonst w¨ urde ein Kreis entstehen. Diese Darstellung haben wir bereits zuvor f¨ ur Bin¨ arb¨ aume verwendet, siehe Seite 33. Knoten ohne Nachfolger in der n¨ achsten
92
2 Graphen
Ebene heißen Bl¨ atter. Mit Ausnahme der Wurzel sind die Bl¨ atter genau die Knoten mit Knotengrad eins. Aufgabe 2.9 Zeigen Sie: Ein ungerichteter Baum, bei dem alle Knoten h¨ ochstens den Grad drei haben, besitzt mindestens einen Knoten vom Grad kleiner drei. Er kann damit in der Form eines Bin¨ arbaums dargestellt werden. Aufgabe 2.10 Betrachten Sie einen gerichtete Graphen G = (V, E), der aus einem ungerichteten Baum entsteht, indem jeweils eine ungerichtete Kante {u, v} durch die zwei gerichtete Kanten (u, v) und (v, u) ersetzt wird (siehe Abbildung 2.30). Zeigen Sie (z. B. mittels einer Rekursion), dass in diesem Graph ein Kreis existiert, der alle Kanten umfasst. Wir verlangen nicht, dass der Kreis einfach ist.
Abb. 2.30 Beispiel zu Aufgabe 2.10
Unter Anderem bei der Berechnung von elektrischen Netzwerken werden spezielle B¨ aume ben¨ otigt, um ein Gleichungssystem (vgl. Kapitel 5.4) f¨ ur Str¨ ome und Spannungen abzulesen. Dabei handelt es sich um Spannb¨ aume: Definition 2.20 (Spannbaum) Ein Spannbaum T eines Graphen G = (V, E) ist ein zusammenh¨ angender, kreisfreier Teilgraph T = (V, ET ) von G. Ein Spannbaum ist also ein Baum, der alle Knoten des gegebenen Graphen umfasst. Jeder zusammenh¨ angende, ungerichtete Graph besitzt einen Spannbaum. Das folgt analog zum zweiten Teil des Beweises von Satz 2.19: Wenn der Graph einen Kreis enth¨ alt, dann k¨ onnen wir aus dem Kreis eine Kante entfernen – und der Graph bleibt zusammenh¨ angend. Das machen wir, solange es noch Kreise gibt, der verbleibende Graph ist ein Spannbaum. Einen Spannbaum erhalten wir auch mit den Baumkanten einer auf ungerichtete Graphen u ¨ bertragenen Tiefensuche. Schwieriger wird es aber, wenn die Kanten Gewichte haben und wir einen minimalen Spannbaum finden sollen. Dazu sei ein ungerichteter zusammenh¨ angender Graph G = (V, E, c) mit einer Kostenfunktion c gegeben, die wie im Fall eines gerichteten Graphen jeder Kante einen Kantenwert zuordnet.
2.4 Grundlegende Probleme in ungerichteten Graphen
93
Aufgabe 2.11 Sei G = (V, E, c) ein zusammenh¨ angender ungerichteter Graph mit positiver Kostenfunktion. Zeigen Sie indirekt, dass je zwei l¨ angste Wege (d. h., die Summe der Kosten aller ihrer Kanten ist jeweils maximal) mindestens einen gemeinsamen Knoten besitzen. Die Kosten eines Spannbaums T = (V, ET ) sind definiert als c(e), cost(T ) := e∈ET
also als die Summe u ¨ ber die Kosten aller enthaltener Kanten. Wir suchen einen minimalen Spannbaum von G, d. h. einen Spannbaum T = (V, ET ) von G mit minimalen Kosten. Da es zu jedem zusammenh¨ angenden Graphen mindestens einen aber wegen der endlichen Kantenzahl auch h¨ ochstens endlich viele Spannb¨ aume gibt, gibt es nat¨ urlich auch mindestens einen minimalen Spannbaum. 2
a 6 b
3 2
c 5 d
3
e 6
1 7
f
Abb. 2.31 Minimaler Spannbaum f¨ ur den gegebenen Graphen, da die Summe u ¨ber die Kosten c(e) aller enthaltener Kanten e f¨ ur keinen anderen Spannbaum kleiner ist
Es gibt vielf¨ altige Anwendungen f¨ ur minimale Spannb¨ aume: Mit einem minimalen Spannbaum k¨ onnen H¨ auser ans Strom- oder Telefonnetz angeschlossen werden, wobei aus Kostengr¨ unden m¨ oglichst kurze Kabelwege verlegt werden. Bei der Stromversorgung von elektrischen Bauteilen auf einer Platine finden wir Spannb¨ aume. Beim Routing in IP-Netzen finden wir den CISCO IP Multicast oder das Spanning Tree Protocol. Auch helfen minimale Spannb¨ aume bei der Berechnung einer Rundreise durch einen Graphen. Noch ein nicht ganz ernst gemeinter Rat an die Finanzminister in den L¨ andern: Es sollten nicht alle Straßen repariert werden, sondern nur noch die, so dass nach wie vor alle H¨ auser erreichbar sind. Lemma 2.21 (Minimalit¨ atsregel) Sei (V1 , V2 ) eine disjunkte Zerlegung der Knotenmenge V eines zusammenh¨ angenden Graphen G = (V, E, c) mit V1 = ∅, V2 = ∅, V1 ∩ V2 = ∅ ur eine solche Zerlegung gilt: Jeder minimale Spannund V1 ∪ V2 = V . F¨ baum von G enth¨ alt eine billigste Kante e = {u, v} ∈ E mit u ∈ V1 und v ∈ V2 , d. h. c(e) = min{c({u, v}) : {u, v} ∈ E mit u ∈ V1 und v ∈ V2 }.
94
2 Graphen
Ein minimaler Spannbaum kann durchaus weitere Kanten zwischen den Menonnen mehrere billigste gen V1 und V2 enthalten, vgl. Abbildung 2.32. Auch k¨ Kanten existieren, dann ist sichergestellt, dass ein minimaler Spannbaum mindestens eine von ihnen enth¨ alt.
V1
V2
Abb. 2.32 Minimalit¨ atsregel: Die beiden oberen gestrichelten Kanten zwischen V1 und V2 haben ein gr¨ oßeres Gewicht als die untere. Die untere ist damit in jedem Fall Teil eines minimalen Spannbaums. Beim Aufbau eines minimalen Spannbaums wird daher (zuerst) die untere Kante verwendet.
Beweis Wir nehmen an, dass ein minimaler Spannbaum keine billigste Kante alt. Da der Spannbaum zusammenh¨ angend ist, gibt es zwischen V1 und V2 enth¨ aber eine teurere Kante u zwischen V1 und V2 . Da der Spannbaum ein Baum ist, entsteht durch Hinzunahme einer billigsten Kante v ein Kreis, in dem sowohl v als auch u liegen. Wenn wir jetzt u entfernen, haben wir immer noch einen Spannbaum. Allerdings ist jetzt das Gewicht geringer als das des angenommenen minimalen Spannbaums: Widerspruch! Kruskals Algorithmus zur Berechnung minimaler Spannb¨ aume basiert auf dieser Minimalit¨ atsregel und ist in Algorithmus 2.8 dargestellt. Warum nennen wir das Lemma Minimalit¨ atsregel? Der Algorithmus baut einen Baum auf, der stets die Regel erf¨ ullt: Eine billigste Kante darf in den Spannbaum aufgenommen werden. Eine teurere Kante wird nicht in den Spannbaum aufgenommen. Sei G = (V, E, c) ein ungerichteter, zusammenh¨ angender Graph mit KostenAlgorithmus 2.8 Kruskals Algorithmus f¨ ur minimale Spannb¨ aume A := ∅ for all Knoten v ∈ V do Erstelle eine Menge {v}. Sortiere die Kanten von E aufsteigend nach Gewicht. for all Kanten {u, v} ∈ E in dieser Sortierung do Ru := die Menge, in der u liegt, Rv := die Menge, in der v liegt if Ru = Rv then A := A ∪ {{u, v}} Verschmilze die Mengen Ru und Rv zu einer Menge Ru ∪ Rv , die die beiden ersetzt. funktion c. Nach Ablauf des Algorithmus enth¨ alt die Menge A die Kanten eines minimalen Spannbaums. Um diese zu finden, verwaltet der Algorithmus disjunkte Knotenmengen. Jede Menge M repr¨ asentiert eine Menge von Knoten, f¨ ur
2.4 Grundlegende Probleme in ungerichteten Graphen
95
deren induzierten Teilgraphen G|M bereits ein minimaler Spannbaum berechnet wurde. Zun¨ achst ist jeder Knoten aus V in einer anderen Menge. Die Kanten werden anhand ihrer Gewichtung sortiert. Dann werden sie in der Reihenfolge ihrer Sortierung durchlaufen – beginnend mit der Kante, die das geringste Gewicht hat. F¨ ur jede so erhaltene Kante wird gepr¨ uft, ob die Endknoten u und v in verschiedenen Mengen liegen. Ist das der Fall, dann ist eine Kante eines minimalen Spannbaums gefunden. Sie wird in A aufgenommen, und die zugeh¨ origen Mengen werden verschmolzen. Nach der Minimalit¨ atsregel suchen wir also eine preiswerteste Kante, die zwei solche Mengen verbindet. Daher haben wir zu Beginn die Kanten nach ihren Gewichten sortiert. Tab. 2.3 Berechnung eines minimalen Spannbaums nach Kruskal
Sortierte Kanten {d, e} {a, c} {b, d} {a, d} {c, e} {c, d} {a, b} {e, f } {d, f }
Knotenmengen
Spannbaumkanten
{a}, {b}, {c}, {d}, {e}, {f } {a}, {b}, {c}, {d, e}, {f } {a, c}, {b}, {d, e}, {f } {a, c}, {b, d, e}, {f } {a, c, b, d, e}, {f } unver¨ andert unver¨ andert unver¨ andert {a, c, b, d, e, f } unver¨ andert
{d, e} {d, e}, {a, c} {d, e}, {a, c}, {b, d} {d, e}, {a, c}, {b, d}, {a, d} unver¨ andert unver¨ andert unver¨ andert {d, e}, {a, c},{b, d}, {a, d}, {e, f } unver¨ andert
Schauen wir uns dazu das bereits bekannte Beispiel aus Abbildung 2.31 an. Der Ablauf der Berechnung ist in Tabelle 2.3 gezeigt. Zun¨ achst bildet jeder Knoten f¨ ur sich eine Menge, da noch keine Teilgraphen untersucht und minimale Spannb¨ aume f¨ ur diese berechnet wurden. Zu Beginn wird die Kante {d, e} untersucht und festgestellt, dass die Mengen, in denen d und e verwaltet werden, disjunkt sind. Also gibt es durch Hinzunehmen der Kante keinen Kreis, und wir verschmelzen die Knotenmengen. Als n¨ achstes wird die Kante {a, c} betrachtet. Auch diese Knoten liegen in verschiedenen Mengen, und die Mengen werden zusammen gefasst. So setzt sich das Verfahren fort. Bislang haben wir den Algorithmus von Kruskal nur motiviert, seine Korrektheit aber nicht bewiesen. Satz 2.22 (Korrektheit des Algorithmus von Kruskal) F¨ ur jeden ungerichteten, zusammenh¨ angenden Graphen berechnet der Algorithmus von Kruskal einen minimalen Spannbaum.
96
2 Graphen
¨ Den leichteren Teil des Beweises stellen wir als Ubungsaufgabe: Aufgabe 2.12 Zeigen Sie mittels vollst¨ andiger Induktion, dass nach jedem Schleifendurchlauf zu jeder noch vorhandenen Knotenmenge, die wir jetzt R nennen, ein Spannbaum berechnet ist, dass also der von R induzierte Teilgraph von (V, A) ein Spannbaum des von R induzierten Teilgraphen von (V, E) ist. Schließen Sie daraus, dass der Algorithmus einen Spannbaum berechnet.
Beweis Wir zeigen, dass der berechnete Spannbaum minimal ist. Um einen minimalen Spannbaum zu finden, werden die Kanten so sortiert, dass der Algorithmus mit aufsteigenden Kantengewichten arbeitet. Wenn ein Spannbaum die |V | − 1 ersten Kanten in dieser Sortierung enth¨ alt, dann ist er automatisch minimal. Der Algorithmus von Kruskal versucht, genau einen solchen Spannbaum zu erstellen. Jedoch kann es passieren, dass eine Kante nicht gebraucht wird (wenn sie keine unterschiedlichen Mengen verbindet und damit zu einem Kreis f¨ uhren w¨ urde). Dann macht der Algorithmus mit der n¨ achsten Kante in der Sortierung weiter. Deshalb entsteht ein Spannbaum, in dem nicht nur die |V | − 1 kleinsten Kanten vorkommen k¨ onnen. Auch wenn das Funktionieren des Algorithmus naheliegend ist, muss daher noch bewiesen werden, dass der entstehende Spannbaum wirklich minimal ist. Dazu zeigen wir mittels vollst¨ andiger Induktion, dass stets die Kantenmenge A Teilmenge der Kanten eines minimalen Spannbaums (den es ja gibt) ist. Induktionsanfang: Zun¨ achst ist A = ∅, so dass A Teilmenge der Kantenmenge jedes minimalen Spannbaums ist. Induktionsannahme: Nach n Schleifendurchl¨ aufen sei A Teilmenge der Kanten eines minimalen Spannbaums. Induktionsschluss: Beim n + 1-ten Durchlauf k¨ onnen drei F¨ alle eintreten: – A bleibt unver¨ andert, damit ist nichts zu zeigen. – Eine Kante {u, v} wird zu A hinzugef¨ ugt, die auch Kante des minimalen Spannbaums ist, f¨ ur den die Induktionsannahme gilt. Auch hier ist nichts mehr zu zeigen. ort – Die neue Kante {u, v}, die die Mengen Ru und Rv verbindet, geh¨ nicht zum Spannbaum aus der Induktionsannahme. Hier schl¨ agt jetzt das Argument aus der Minimalit¨ atsregel (Beweis zu Lemma 2.21) zu: Wir betrachten zwei disjunkte nicht-leere Knotenmengen: Ru und E \ Ru . F¨ ur alle Kanten {w, r} mit w ∈ Ru und r ∈ E \ Ru gilt c({w, r}) ≥ c({u, v}), denn aufgrund der Kantensortierung im Algorithmus verbinden Kanten mit kleinerem Gewicht als c({u, v}) Knoten innerhalb der aktuellen Mengen, also innerhalb Ru und innerhalb E \ Ru .
2.4 Grundlegende Probleme in ungerichteten Graphen
97
F¨ ugen wir die Kante {u, v} zum minimalen Spannbaum der Induktionsannahme hinzu, dann entsteht ein Kreis. In diesem muss sich eine weitere Kante zwischen Ru und E\Ru befinden. Lassen wir diese weg, entsteht ein anderer minimaler Spannbaum, da die weggelassene Kante nach der vor¨ angehenden Uberlegung kein kleineres Gewicht als c({u, v}) haben kann. Damit ist nach dem n + 1 Schleifendurchlauf A Teilmenge der Kanten dieses anderen minimalen Spannbaums. Am Ende des Algorithmus sind die |V | − 1 Kanten in A auch Kanten eines minimalen Spannbaums. Da dieser auch |V | − 1 Kanten hat, ist A genau die Kantenmenge dieses minimalen Spannbaums. Wir konnten im Induktionsschluss nicht direkt die Minimalit¨ atsregel Lemma 2.21 anwenden, da wir zwei bereits bestehende minimale Teilspannb¨ aume zu einem verbinden mussten. Das war nicht Teil der Aussage des Lemmas. Aufgabe 2.13 Sei G = (V, E, c) ein ungerichteter, zusammenh¨ angender Graph mit einer Kosur einen Spanntenfunktion c : E → R. Es sei ein neues Kostenmaß cmax (T ) f¨ baum T von G wie folgt definiert: cmax (T ) := max{c(e) : e ist Knoten von T }. Beweisen Sie indirekt in Anlehnung an die Minimalit¨ atsregel: Wenn T bez¨ uglich c minimal ist, dann ist T auch bez¨ uglich cmax minimal. Damit liefert der Algorithmus von Kruskal automatisch auch einen Spannbaum, der minimal hinsichtlich des neuen Kostenmaßes ist.
2.4.2
Bipartite und planare Graphen
Wir haben bereits eine spezielle Klasse von Graphen kennen gelernt: die B¨ aume. Nun wollen wir weitere Graphklassen beschreiben, wobei wir jeweils einen ungerichteten Graphen G = (V, E) voraussetzen werden. Der Grund f¨ ur die Betrachtung spezieller Graphen ist, dass Probleme daf¨ ur oft einfacher zu l¨ osen sind. So ist das F¨ arbungsproblem, mit dem wir uns unten besch¨ aftigen werden, im Allgemeinen nicht effizient l¨ osbar, aber auf B¨ aumen oder bipartiten Graphen findet man sehr einfach eine L¨ osung. Definition 2.23 (bipartite Graphen) Der ungerichtete Graph G = (V, E) heißt bipartit, wenn V disjunkt in V1 und V2 aufgeteilt werden kann, also V1 ∪ V2 = V und V1 ∩ V2 = ∅ gilt, und f¨ ur jede Kante e = {u, v} entweder u ∈ V1 und v ∈ V2 oder umgekehrt u ∈ V2 und v ∈ V1 ist.
98
2 Graphen
Alle Kanten verlaufen also zwischen den Mengen V1 und V2 , innerhalb der Mengen gibt es keine Kanten. In Abbildung 2.33 sind zwei bipartite Graphen dargestellt. Kreisfreie Graphen wie B¨ aume sind immer auch bipartit. Bei B¨ aumen sehen wir das sofort, wenn wir die Knoten wie zuvor in Ebenen anordnen. Die Knoten der Ebenen 0, 2, 4, . . . bilden V1 . Die Knoten der ausgelassenen Ebenen bilden V2 . Aufgabe 2.14 Schreiben Sie die f¨ ur gerichtete Graphen besprochene modifizierte Tiefensuche Algorithmus 2.3 so um, dass der Algorithmus entscheidet, ob ein ungerichteter Graph bipartit ist. Wir nennen G vollst¨ andig bipartit, falls jeder Knoten aus V1 mit jedem Knoten in V2 u ¨ ber eine Kante verbunden ist und bezeichnen G dann als Km,n , wobei m := |V1 | und n := |V2 | jeweils die Anzahl der Knoten ist.
Abb. 2.33 Die vollst¨ andig bipartiten Graphen K2,3 und K1,8
Lemma 2.24 (Kreise im bipartiten Graphen) Ein bipartiter Graph kann keine Kreise ungerader L¨ ange enthalten. Da es keine Kanten zwischen Knoten aus V1 und ebenfalls keine Kanten zwiotigt man stets eine gerade Anzahl von Kanten, schen Knoten aus V2 gibt, ben¨ um beispielsweise von einem Knoten aus V1 zum gleichen (bei einem Kreis) oder zu einem anderen Knoten aus V1 zu gelangen. Wir betrachten weitere spezielle ungerichtete Graphen. Ein Graph G heißt vollst¨ andig genau dann, wenn f¨ ur alle u, v ∈ V mit u = v gilt: {u, v} ∈ E. Solche vollst¨ andigen Graphen sind in Abbildung 2.34 dargestellt. Einen vollst¨ andigen Graphen mit n Knoten bezeichnen wir als Kn . Er hat n(n−1) 2 Kanten. Denn jeder der n Knoten ist u ¨ ber n − 1 Kanten mit jedem anderen verbunden. Da jede Kante aber genau zwei Knoten verbindet, m¨ ussen wir n(n − 1) durch zwei teilen. Bei einem beliebigen Graphen G nennen wir eine Teilmenge U ⊂ V eine Clique genau dann, wenn f¨ ur alle u, v ∈ U mit u = v gilt: {u, v} ∈ E. Der von U induzierte Teilgraph ist also vollst¨ andig.
Abb. 2.34 Die vollst¨ andigen Graphen K3 , K4 und K5
2.4 Grundlegende Probleme in ungerichteten Graphen
99
Der Graph G heißt planar genau dann, wenn er kreuzungsfrei in der Ebene gezeichnet werden kann. In Abbildung 2.35 ist der K4 links zweimal dargestellt: einmal mit Kreuzung und einmal kreuzungsfrei. Auch einen W¨ urfel kann man kreuzungsfrei zeichnen. Ein planarer Graph muss also nicht kreuzungsfrei gezeichnet sein, aber eine solche kreuzungsfreie Darstellung muss existieren. B¨ aume sind immer planar. Abb. 2.35 Zwei Planare Graphen, je einmal nicht kreuzungsfrei und einmal kreuzungsfrei gezeichnet
In Abbildung 2.34 haben wir K5 nicht kreuzungsfrei gezeichnet. Sie k¨ onnen ja mal probieren, ob das geht. Solche Fragen werden z. B. bei einem Platinenlayout sehr wichtig. Kreuzungen k¨ onnen hier teuer werden, also versucht man sie fr¨ uhzeitig zu erkennen und zu vermeiden. Statt zu probieren (das w¨ urde bei einer Software zu schlechten Laufzeiten f¨ uhren), sehen wir uns hier jetzt erst einmal Eigenschaften von planaren Graphen an. Diese Mathematik wird uns dann tats¨ achlich bei der Einsch¨ atzung des K5 (und auch realer Probleme) helfen. Satz 2.25 (Euler’sche Polyederformel) F¨ ur einen ungerichteten, zusammenh¨ angenden, planaren Graphen G = (V, E), der kreuzungsfrei in der Ebene gezeichnet ist, gilt |V | − |E| + f = 2, wobei f die Anzahl der von den gezeichneten Kanten eingeschlossenen Fl¨ achen (faces) zuz¨ uglich der den Graphen umschließenden Fl¨ ache bezeichnet.
a F4 F1 d F2 F3 c
b
Abb. 2.36 Fl¨ achen eines planaren Graphen, der kreuzungsfrei in der Ebene gezeichnet ist
Machen wir uns zun¨ achst an einem Beispiel klar, was die im Satz genannten Fl¨ achen eigentlich sind. In Abbildung 2.36 haben wir wieder den vollst¨ andigen Graphen K4 mit vier Knoten dargestellt, und zwar kreuzungsfrei, das ist wichtig. Die Fl¨ achen, die durch Kanten begrenzt werden, sind F1 bis F4 . Die a ¨ußere, nicht ahlt. durch Kanten eingeschlossene Fl¨ ache F4 wird ebenfalls mitgez¨ Eine direkte Konsequenz des Satzes ist, dass die Anzahl der Fl¨ achen des Graphen nicht davon abh¨ angt, wie wir ihn kreuzungsfrei zeichnen.
100
2 Graphen
Beweis Da wir einen zusammenh¨ angenden Graphen haben, k¨ onnen wir durch sukzessives Weglassen von Kanten aus Kreisen einen Spannbaum gewinnen. Wenn wir eine Kante aus einem Kreis entfernen, wird die Kantenzahl und die Anzahl der Fl¨ achen f jeweils um eins kleiner, d. h. Knotenzahl minus Kantenzahl plus Fl¨ achenzahl bleibt konstant (Invariante). F¨ ur den resultierenden Spannbaum gilt nach Satz 2.19 auf Seite 90, dass die Anzahl der Kanten gleich der Anzahl der Knoten minus 1 ist. Außerdem ist die Anzahl der Fl¨ achen ebenfalls 1, da die Kanten keine Fl¨ achen einschließen und es nur die umgebende Fl¨ ache gibt. Also ist die Knotenzahl − Kantenzahl + Fl¨ achenzahl gleich 2. Zusammen mit der Invariante gilt damit auch f¨ ur den urspr¨ unglichen Graphen |V | − |E| + f = 2.
Satz 2.26 (obere Schranke f¨ ur Kantenzahl) F¨ ur einen ungerichteten, planaren Graphen G = (V, E) mit mindestens drei Knoten gilt: |E| ≤ 3 · |V | − 6. Beweis Wir m¨ ussen den Satz nur f¨ ur zusammenh¨ angende Graphen beweisen (so dass wir die Euler’sche Polyederformel benutzen k¨ onnen). Denn wenn wir einen nicht zusammenh¨ angenden planaren Graphen haben, dann k¨ onnen wir durch Hinzuf¨ ugen von Kanten zu einem gelangen. Gilt die Aussage dann f¨ ur diesen Graphen, dann erst recht f¨ ur den nicht zusammenh¨ angenden, da er weniger Kanten hat und damit die linke Seite der Formel noch kleiner wird. b
E a
f
g
h
A l
B
D e
i
C
k
j
c
d
Abb. 2.37 Begrenzung der Fl¨ achen durch Kanten im Beweis zu Satz 2.26: Die Fl¨ achen sind durch große Buchstaben, die Kanten durch kleine Buchstaben gekennzeichnet.
Haben wir drei Knoten, dann gibt es h¨ ochstens drei Kanten (vollst¨ andiger onnen also eine zusammenh¨ angenden Graph K3 ), und die Formel gilt. Wir k¨ Graphen G mit mindestens vier Knoten und mindestens drei Kanten betrachten. Weniger Kanten sind nicht m¨ oglich, da der Graph sonst nicht zusammenh¨ angend w¨ are. Dieser Graph habe eine kreuzungsfreie Darstellung mit f Fl¨ achen. Eine solche ist in Abbildung 2.37 zu sehen. Wir definieren eine Matrix M, bei der jeweils eine Zeile z f¨ ur eine Fl¨ ache steht, und eine Spalte s eine Kante repr¨ asentiert. ache z begrenzt. In Der Wert mz,s ist genau dann eins, wenn die Kante s die Fl¨ Tabelle 2.4 ist die entsprechende Matrix f¨ ur den Graphen aus Abbildung 2.37 zu sehen. In jeder Spalte der Matrix M gibt es h¨ ochstens zwei Einsen, denn jede Kante e ist die Grenze von h¨ ochstens zwei Fl¨ achen. Es kann auch Kanten
2.4 Grundlegende Probleme in ungerichteten Graphen
101
Tab. 2.4 Matrix, die den Fl¨ achen die begrenzenden Kanten zuordnet
M
a
b
c
d
e
f
g
h
i
j
k
l
A B C D E
1 0 0 0 1
0 1 0 0 1
0 0 1 0 1
0 0 1 0 1
0 0 0 1 1
1 0 0 0 1
1 0 0 0 0
1 1 0 0 0
0 1 1 0 0
0 0 1 0 0
0 0 1 1 0
1 0 0 1 0
geben, die nur eine Fl¨ ache begrenzen, wie die Kanten g und j im obigen Beispiel. Durch p Kanten k¨ onnen also h¨ ochstens 2 · p Fl¨ achen begrenzt werden. Bei dieser Z¨ ahlung wird jede Fl¨ ache mindestens dreimal gez¨ ahlt, weil jede Fl¨ ache durch mindestens drei Kanten begrenzt ist. Die Matrix M enth¨ alt daher in jeder Zeile mindestens drei Einsen. Also gilt: f ≤
2 · |E| ⇐⇒ 3 · f ≤ 2 · |E|. 3
(2.3)
Die Aussage, dass jede Fl¨ ache (insbesondere auch die umgebende) von mindestens drei Kanten begrenzt wird, kann nat¨ urlich nur dann gelten, wenn der Graph auch mindestens drei Kanten hat. Aber wir befinden uns ja im Beweis genau dieses Falls. Die Matrix muss also mindestens drei Spalten haben. F¨ ur die planaren Graphen, die nur aus einem Knoten oder zwei Knoten und einer Kante bestehen, gilt die Absch¨ atzung 3 · f ≤ 2 · |E| nicht! Nach der Euler’schen Polyederformel gilt |V | − |E| + f = 2. Multiplizieren wir beide Seiten der Gleichung mit 3, dann erhalten wir: 3 · |V | − 3 · |E| + 3 · f = 6 ⇐⇒ 3 · f = 6 − 3 · |V | + 3 · |E|.
(2.4)
Jetzt nutzen wir (2.3): (2.4)
(2.3)
6 − 3 · |V | + 3 · |E| = 3 · f ≤ 2 · |E| =⇒ |E| ≤ 3 · |V | − 6. Planare Graphen sind also d¨ unne Graphen, d. h. Graphen mit vergleichsweise wenigen Kanten. Der Satz gilt nur, da wir in diesem Buch keine Graphen mit Mehrfachkanten, also mehreren Kanten zwischen zwei Knoten, und Schlingen verwenden, siehe Abbildung 2.38. Abb. 2.38 W¨ urden wir Mehrfachkanten erlauben, k¨ onnte eine Fl¨ ache auch nur von zwei Kanten begrenzt werden.
Jetzt wissen wir genug u ¨ber planare Graphen, um die Frage nach einer kreuzungsfreien Darstellung von K5 zu beantworten:
102
2 Graphen
Satz 2.27 (K5 ) Der vollst¨ andige Graph K5 ist nicht planar.
unf Knoten mit jedem der vier anderen Knoten Beweis Im K5 ist jeder der f¨ durch eine Kante verbunden. Da wir dabei jede Kante doppelt z¨ ahlen, muss es = 10 Kanten geben, siehe auch Satz 2.7. Nach obiger Aussage darf die also 4·5 2 Anzahl der Kanten aber h¨ ochstens 3 · |V | − 6 = 3 · 5 − 6 = 9 sein. Weil in bipartiten Graphen jeder Kreis eine gerade L¨ ange hat, siehe Lemma 2.24, muss bei bipartiten Graphen mit mindestens vier Kanten sogar 4·f ≤ 2·|E| gelten, denn jede Fl¨ ache wird dort mindestens viermal gez¨ ahlt. Aufgabe 2.15 Beweisen Sie mit der vorangehenden Absch¨ atzung, dass f¨ ur einen bipartiten, planaren Graphen G = (V, E) mit mindestens drei Knoten |E| ≤ 2 · |V | − 4 gilt. Dazu ist genau wie oben auf die Polyederformel von Euler zur¨ uck zu greifen. Aufgabe 2.16 Zeigen Sie mit dem Ergebnis von Aufgabe 2.15, dass der vollst¨ andige, bipartite Graph K3,3 nicht planar ist. Schauen wir uns nun eine weitere Eigenschaft der planaren Graphen an, die wir mit Hilfe der gerade gezeigten Beziehung zwischen Knoten- und Kantenanzahl zeigen k¨ onnen. Eine Knotenf¨ arbung eines Graphen ist eine Zuordnung von Zahlen (die f¨ ur verschiedene Farben stehen) zu den Knoten, so dass benachbarte Knoten unterschiedliche Nummern haben. Die einzelnen Nummern d¨ urfen sich wiederholen. Abbildung 2.39 zeigt f¨ ur verschiedene Graphen eine solche Knotenf¨ arbung. Wie wir sehen, sind B¨ aume grunds¨ atzlich mit zwei Farben 1
1 2 1
1
2
2
1
1
2 1
1
1
2
1
3
2
2
2
1 1
2
4
3
Abb. 2.39 Knotenf¨ arbungen bei verschiedenen Graphen
f¨ arbbar. Auch einfache Kreise gerader L¨ ange sind zweif¨ arbbar, wohingegen Kreise ungerader L¨ ange immer mindestens mit drei Farben gef¨ arbt werden m¨ ussen. Da bei der 4-Clique jeder Knoten mit jedem anderen Knoten u ¨ ber eine Kante verbunden ist, sind dort mindestens vier Farben notwendig. Sie fragen sich,
2.4 Grundlegende Probleme in ungerichteten Graphen
103
warum wir so esoterische Dinge wie das F¨ arben von Knoten betrachten? Weil F¨ arbungen oft bei Konfliktgraphen genutzt werden, um das zugrunde liegende Problem zu l¨ osen. Bei Landkarten sind h¨ aufig benachbarte L¨ ander unterschiedlich gef¨ arbt. Die L¨ ander werden durch Knoten modelliert, die durch Kanten verbunden werden, wenn die L¨ ander benachbart sind, also in Konflikt stehen. Im Mobilfunk m¨ ussen u ¨berlappende Funkbereiche unterschiedliche Frequenzen verwenden. Die Basisstationen werden als Knoten modelliert. Je zwei Stationen, die in Konflikt stehen, deren Funkbereiche sich also u ¨ berlappen, werden durch eine Kante verbunden. Eine Knotenf¨ arbung mit minimaler Anzahl Farben liefert dann die Anzahl der Frequenzen, die mindestens ben¨ otigt werden, damit alles einwandfrei funktioniert. Abbildung 2.40 zeigt den Sachverhalt. A
B
A
B
C
C D F
D
E
E
F
G H
G
H
¨ Abb. 2.40 Uberlappende Funkbereiche – als Graph modelliert
Bei der Transaktionsverwaltung in Datenbanksystemen sollen m¨ oglichst viele Transaktionen gleichzeitig stattfinden. Transaktionen, die auf dieselben Daten zugreifen, d¨ urfen nicht gleichzeitig ausgef¨ uhrt werden. Eine Knotenf¨ arbung kann bestimmen, welche Transaktionen gleichzeitig ablaufen k¨ onnen. Bevor wir zeigen, dass jeder planare Graph mit h¨ ochstens sechs Farben gef¨ arbt werden kann, bemerken wir: Lemma 2.28 (Knotengrad planarer Graphen) Jeder planare Graph enth¨ alt mindestens einen Knoten, der h¨ ochstens den Grad f¨ unf hat.
Beweis Bei weniger als drei Knoten ist der Grad jedes Knotens h¨ ochstens zwei. Bei mehr als drei Knoten k¨ onnen wir Satz 2.26 anwenden: |E| ≤ 3 · |V | − 6. In dieser Situation beweisen wir hier wieder indirekt und nehmen an, dass jeder Knoten einen Knotengrad von mindestens sechs hat. Da jede Kante nat¨ urlich | = 3·|V | immer zwei Knoten miteinander verbindet, gibt es also mindestens 6·|V 2 viele Kanten, das sind aber mindestens sechs zu viel: Widerspruch!
Satz 2.29 (F¨ arbbarkeit) Jeder planare Graph ist mit sechs Farben f¨ arbbar.
104
2 Graphen
Beweis Wir beweisen den Satz mittels vollst¨ andiger Induktion. F¨ ur den Induktionsanfang betrachten wir alle Graphen, die h¨ ochstens sechs Knoten haben. Diese sind immer mit sechs Farben f¨ arbbar. Die Induktionsannahme ist nun, dass alle planaren Graphen mit h¨ ochstens n Knoten f¨ ur ein festes n ≥ 6 mit sechs Farben f¨ arbbar sind, und wir m¨ ussen im Induktionsschluss zeigen, dass diese Aussage auch f¨ ur n + 1 gilt. Sei also G ein planarer Graph mit n + 1 Knoten. Aus Lemma 2.28 wissen wir, dass jeder einfache planare Graph mit mindestens drei Knoten einen Knoten mit Grad f¨ unf oder kleiner enth¨ alt. Wir entfernen einen solchen Knoten mit den inzidenten Kanten aus G. Der so reduzierte Graph ist ein planarer Graph mit n Knoten, der nach Induktionsannahme mit h¨ ochstens 6 Farben gef¨ arbt werden kann. Nun nehmen wir den Knoten und seine inzidenten Kanten wieder in den Graphen auf. Da der Knoten mit h¨ ochstens f¨ unf anderen verbunden ist, bleibt eine Farbe zum F¨ arben des Knotens u ¨ brig. Mit ein wenig mehr Anstrengung kann man zeigen, dass jeder planare Graph 5-f¨ arbbar ist. Bereits im Jahr 1852 wurde von de Morgan die Vermutung formuliert, dass jeder planare Graph sogar 4-f¨ arbbar ist (weniger geht nicht, siehe Abbildung 2.39). Im Jahr 1879 wurde von Kempe ein erster, leider falscher Beweis formuliert. 1890 fand Heawood den Fehler in diesem Beweis. Erst 1977 wurde von Appel und Haken ein Beweis geliefert, der viele Fallunterscheidungen mit Hilfe eines Computerprogramms durchspielt. 1995 wurde ein k¨ urzerer Beweis vorgestellt, der aber auch durch Computer unterst¨ utzt wurde. Diese Beweise sind unter Mathematikern umstritten, da sie eine korrekte Hardware und einen korrekten Compiler erfordern. Da keine formale Korrektheit f¨ ur den Compiler und die Hardware gezeigt wurde, ist eine L¨ ucke im Beweis. Aufgabe 2.17 Ein Graph G = (V, E) ist genau dann außenplanar, wenn G planar ist und er so kreuzungsfrei in der Ebene gezeichnet werden kann, dass alle Knoten auf dem Rand der ¨ außeren Fl¨ ache liegen (vgl. Abbildung 2.41). Analog zu Satz 2.26 l¨ asst sich zeigen, dass bei mindestens drei Knoten gilt: |E| ≤ 2|V | − 3. Zeigen Sie damit, dass a) jeder außenplanare Graph einen Knoten mit Grad h¨ ochstens zwei besitzt und b) jeder außenplanare Graph 3-f¨ arbbar ist.
Abb. 2.41 Außenplanare Graphen.
2.4 Grundlegende Probleme in ungerichteten Graphen
2.4.3
105
Euler-Touren und Hamilton-Kreise
Wir hatten in der Einleitung dieses Kapitels beschrieben, dass bereits Leonhard Euler (1707 – 1783) einen besonderen Kreis u ucken von K¨ onigsberg ge¨ ber die Br¨ sucht hat: Ein Kreis, der u auft (und wieder an den ¨ ber jede Kante genau einmal l¨ Ausgangspunkt f¨ uhrt). Solche Kreise nennt man Euler-Tour, und diese m¨ ussen auch heute noch berechnet werden, und zwar von vielen Firmen. So muss z. B. die M¨ ullabfuhr oder die Straßenreinigung jede Straße eines Gebietes anfahren. Andere Unternehmen m¨ ussen einfache Kreise berechnen, die u ¨ ber jeden Knoten (genau einmal) laufen. Solche Kreise nennt man Hamilton-Kreis. So muss die Post jeden Briefkasten in einem Gebiet anfahren. Aber auch bei der Steuerung von NC-Maschinen zum automatischen Bohren, L¨ oten, Schweißen oder dem Verdrahten von Leiterplatten werden solche Touren genutzt. So f¨ ahrt z. B. ein Bohrkopf nacheinander alle Positionen an und muss anschließend wieder in die Ausgangsposition zur¨ uck gefahren werden, damit das n¨ achste Werkst¨ uck bearbeitet werden kann. Auch wenn die Probleme sehr ¨ ahnlich aussehen, so ist doch die Bestimmung von Euler-Touren recht einfach, wohingegen zur Bestimmung eines Hamilton-Kreises kein effizienter Algorithmus bekannt ist. Wir hatten bereits auf Seite 58 festgestellt, dass eine notwendige Voraussetzung f¨ ur die Existenz einer Euler-Tour ein gerader Knotengrad bei allen Knoten des Graphen ist. Dass diese Bedingung auch hinreichend ist, m¨ ussen wir uns noch u achst einen Hilfssatz. ¨berlegen. Dazu zeigen wir zun¨ Lemma 2.30 (notwendige Bedingung f¨ ur einen Kreis) Wenn ein ungerichteter Graph G = (V, E) zusammenh¨ angend ist und alle Knotengrade mindestens zwei sind, d. h. deg(v) ≥ 2 f¨ ur jeden Knoten v ∈ V , dann enth¨ alt G einen (einfachen) Kreis. Algorithmisch kann man einen Kreis mit Hilfe der Tiefensuche finden, wie wir bereits in Abschnitt 2.3.1 gesehen haben. Beweis Die Aussage folgt unmittelbar aus Satz 2.7 auf Seite 66. Wir wissen, dass die Summe der Knotengrade genau zweimal die Anzahl der Kanten ist: 2 · |E| =
deg(v) ⇐⇒ |E| =
v∈V
1 deg(v). 2 v∈V
Da nach Voraussetzung deg(v) ≥ 2 f¨ ur alle Knoten v ∈ V ist, erhalten wir |E| =
1 1 1 deg(v) ≥ 2 ≥ (|V | · 2) = |V |. 2 2 2 v∈V
v∈V
Wir wissen bereits, dass jeder zusammenh¨ angende Graph einen Spannbaum mit |V | − 1 Kanten besitzt. Wegen |E| ≥ |V | m¨ ussen wir zum Spannbaum
106
2 Graphen
also mindestens eine Kante hinzuf¨ ugen, um den Graphen G zu erhalten. Beim Hinzuf¨ ugen einer solchen Kante ergibt sich aber ein einfacher Kreis. Ein anderer Ansatz zum Beweis der Aussage ist die Konstruktion eines Weges, bei dem ausgenutzt wird, dass der Knotengrad mindestens 2 ist. Wir w¨ ahlen einen Weg (v0 , v1 , v2 , v3 , v4 , . . .), bei dem jeder Knoten nicht auf der Kante verlassen wird, auf die er erreicht wird (so dass wir paarweise verschiedene Kanten bekommen). Da es nur endlich viele Knoten gibt, erreichen wir fr¨ uher oder sp¨ ater einen Knoten, bei dem wir schon waren und haben damit einen Kreis gefunden. Kommen wir nun zur Kernaussage dieses Abschnitts: Satz 2.31 (Existenz einer Euler-Tour) Ein zusammenh¨ angender, ungerichteter Graph G = (V, E) mit |V | ≥ 2 besitzt genau dann eine Euler-Tour, wenn jeder Knoten v ∈ V einen geraden Knotengrad besitzt. Dabei ist zu beachten, dass der Graph unbedingt zusammenh¨ angend sein muss, sonst stimmt die Aussage nicht, wie man in Abbildung 2.42 sehen kann. Wie Abbildung 2.43 zeigt, hat der zusammenh¨ angende Graph mit zwei Knoten keine Euler-Tour. Hier sind aber auch die Knotengrade nicht gerade. Das werden wir f¨ ur den Induktionsanfang nutzen. Interessant wird die Charakterisierung erst ab |V | ≥ 3. Kommen wir nun zum Beweis des Satzes. Abb. 2.42 Ein Graph ohne Euler-Tour, obwohl alle Knoten einen geraden Knotengrad haben: Die Ursache ist, dass der Graph nicht zusammenh¨ angend ist.
Beweis Wir haben bereits zu Beginn des Kapitels auf Seite 58 festgestellt, dass eine Euler-Tour nur existieren kann, wenn jeder Knoten einen geraden Knotengrad hat. Umgekehrt m¨ ussen wir jetzt noch zeigen, dass bei einem geraden Knotengrad eine Euler-Tour existiert. Dazu f¨ uhren wir eine vollst¨ andige Induktion u ¨ber die Anzahl der Kanten durch. Induktionsanfang: Bei nur zwei Knoten hat, wie oben beschrieben, ein zusammenh¨ angender Graph nur eine Kante, und damit sind die Knotengrade ungerade. Der einzige zusammenh¨ angende Graph mit drei Knoten und geraden Knotengraden ist in Abbildung 2.43 gezeigt. Er hat eine Euler-Tour.
Abb. 2.43 Der zusammenh¨ angende Graph mit drei Knoten und jeweils geradem Knotengrad hat eine Euler-Tour, der zusammenh¨ angende Graph mit nur zwei Knoten nicht.
2.4 Grundlegende Probleme in ungerichteten Graphen
107
Induktionsannahme: Die Aussage gelte bis zu einer Knotenanzahl n ≥ 2. Induktionsschluss: Da der Graph G mit n + 1 Knoten nach Voraussetzung zusammenh¨ angend ist, kann es keinen Knoten mit Knotengrad null geben. Also haben alle Knoten einen Grad gr¨ oßer oder gleich zwei. Daher enth¨ alt G einen einfachen Kreis C, wie wir in Lemma 2.30 festgestellt haben. In Abbildung 2.44 sehen wir einen solchen Kreis C = (b, c, e, g, b) eingezeichnet. Falls dieser Kreis C bereits alle Kanten enth¨ alt, dann beschreibt er eine Euler-Tour. Im Allgemeinen werden aber nicht alle Kanten im Kreis C enthalten sein. Wir entfernen alle Kanten des Kreises aus G und erhalten den Graphen G\C. Dieser Graph muss nicht zusammenh¨ angend sein. Aber f¨ ur jede Zusammenhangskomponente, kurz ZHK, gilt wieder die Voraussetzung, dass jeder Knoten einen geraden Knotengrad besitzt. Denn der Knotengrad eines Knotens wurde entweder nicht ge¨ andert oder um zwei reduziert. Da die ZHK weniger Knoten enthalten, gilt f¨ ur sie die Induktionsannahme (es gibt also in jeder ZHK eine Euler-Tour) oder sie haben nur einen Knoten.
a
c b
h
e
g
a
d
f
wird zu
c b
h
d e
g
f
Abb. 2.44 Ein Graph mit Euler-Tour: Wenn wir einen Kreis entfernen, zerf¨ allt der Graph ggf. in mehrere Zusammenhangskomponenten. Links: Graph G mit Kreis (b, c, e, g, b), rechts: Graph G ohne Kreis
Nun m¨ ussen wir nur noch eine Euler-Tour zusammen basteln. Jede ZHK hat einen Knoten u mit u ∈ C, da G zusammenh¨ angend ist. Wir konstruieren eine Euler-Tour in G wie folgt: Wir durchlaufen einmal den Kreis C. Wenn wir dabei auf einen Knoten u stoßen, der in einer bislang nicht ber¨ ucksichtigten ZHK mit mehr als einem Knoten liegt, dann durchlaufen wir die Euler-Tour der ZHK. Wir kommen also genau bei u wieder an, wo wir den Kreis C verlassen haben. So fahren wir fort, bis jede ZHK genau einmal durchlaufen ist und wir wieder am Startknoten sind. In unserem Beispiel: (b, c, e, g, b) → (b, a, h, b, c, e, g, b) → (b, a, h, b, c, d, e, f, g, c, e, g, b). Der unterstrichene Knoten wird jeweils durch die Euler-Tour der entsprechenden ZHK ersetzt. Die im Beweis konstruierte Euler-Tour ist im Allgemeinen kein einfacher Kreis, bereits im Beispiel werden alle Knoten des Kreises C doppelt verwendet.
108
2 Graphen
Aufgabe 2.18 a) Wie viele Br¨ ucken m¨ ussten in K¨ onigsberg (siehe Abbildung 2.1 auf Seite 57) hinzu gebaut werden, damit dort eine Euler-Tour m¨ oglich wird? Wie viele M¨ oglichkeiten gibt es, diese Br¨ ucken zwischen den Ortsteilen zu platzieren? b) Das Haus des Nikolaus“ l¨ asst sich ohne Absetzen eines Stiftes zeichnen, so ” dass jede Kante nur einmal durchlaufen wird. Es gibt also einen Weg, der den kompletten Graphen abdeckt. Zeigen Sie, dass es trotzdem keine Euler-Tour f¨ ur diesen Graphen gibt. Kommen wir nun zu den Hamilton-Kreisen: Wir wollen einen Kreis finden, der jeden Knoten des Graphen genau einmal besucht. Namensgeber ist der irische Astronom und Mathematiker Sir William Rowan Hamilton (1805 - 1865), der im Jahre 1857 ein Spiel erfand, bei dem eine Reiseroute entlang der Kanten eines Dodekaeders (ein K¨ orper mit zw¨ olf Fl¨ achen) gesucht werden soll. Die Route sollte jede Ecke genau einmal besuchen und wieder beim Ausgangspunkt enden. Das Spiel war kommerziell ein Flop. Die Graphen in Abbildung 2.45 zeigen, dass aus der Existenz einer Euler-Tour nicht auf die Existenz eines Hamilton-Kreises und aus der Existenz eines Hamilton-Kreises nicht auf die Existenz einer EulerTour geschlossen werden kann. Das Finden eines Hamilton-Kreises ist leider sehr viel schwerer als das Bestimmen einer Euler-Tour. Es ist (noch) keine n¨ utzliche notwendige und hinreichende Bedingung bekannt, die beschreibt, ob ein Graph einen Hamilton-Kreis enth¨ alt oder nicht. Wir wollen uns im Weiteren einige notwendige Bedingungen ansehen, die aber nicht hinreichend sind. Die Begriffe notwendig“ und hinreichend“ haben wir auf Seite 21 eingef¨ uhrt. Jetzt sehen ” ” wir ein Beispiel f¨ ur ihren praktischen Einsatz. Doch vorher ben¨ otigen wir noch einige Definitionen.
Abb. 2.45 Von links nach rechts: Hamilton-Kreis, keine Euler-Tour; Euler-Tour, kein Hamilton-Kreis; Peterson-Graph: keine Euler-Tour, kein Hamilton-Kreis; Euler-Tour und Hamilton-Kreis
Definition 2.32 (Br¨ ucke, Schnittknoten, Durchmesser) Sei G = (V, E) ein ungerichteter Graph. Mit G − {v} bezeichnen wir den Graphen, der aus G entsteht, wenn wir den Knoten v und alle zu v inzidenten Kanten aus G entfernen, d. h., G − {v} ist der von V \ {v} induzierte Teilgraph. Ein Knoten v ∈ V heißt
2.4 Grundlegende Probleme in ungerichteten Graphen
109
Schnittknoten, wenn der Graph G − {v} mehr Zusammenhangskomponenten (ZHK) als G besitzt. Der Graph G−{e} entsteht aus G, wenn man die Kante e aus G entfernt. Eine Kante e ∈ E heißt Br¨ ucke, wenn der Graph G − {e} mehr ZHK als G besitzt. Der Durchmesser ∅(G) eines zusammenh¨ angenden Graphen G bezeichnet den gr¨ oßten Abstand zwischen zwei Knoten. Der Abstand dist(u, v) zwischen u und v ∈ V ist die L¨ ange des k¨ urzesten Weges von u nach v bezogen auf die Anzahl der Kanten. Der Durchmesser ist daher die L¨ ange des l¨ angsten dieser k¨ urzesten Wege, also
∅(G) = max dist(u, v). u,v∈V
w
e u
v
Abb. 2.46 Ein Graph mit einer Br¨ ucke e und drei Schnittknoten u, v und w
In Abbildung 2.46 ist die Kante e eine Br¨ ucke, die Knoten u, v und w sind Schnittknoten. Es sieht zwar so aus, als ob die Endknoten einer Br¨ ucke immer auch Schnittknoten sind, das stimmt so aber nicht. Ein Knoten v mit Knotengrad eins ist niemals ein Schnittknoten, denn wenn v aus dem Graphen entfernt wird, bleibt die Anzahl der ZHK gleich. Betrachten wir dazu den Graphen G, der nur aus einer einzigen Kante e = {u, v} besteht. Die Kante e ist eine Br¨ ucke, da G nur eine, G − {e} aber zwei ZHK besitzt. Entfernen wir aber den Knoten u mit der inzidenten Kante e, dann bleibt nur noch der andere Knoten u ¨brig und sowohl G als auch G − {u} besitzen nur eine Zusammenhangskomponente. Schnittknoten und Br¨ ucken spielen auch bei Netzwerken eine wichtige Rolle. Wenn wir das Netzwerk ausfallsicher machen wollen, darf das Netzwerk keinen Schnittknoten besitzen. F¨ allt dieser Knoten aus, so entstehen Teilnetzwerke. Dann kann nur noch innerhalb der Teilnetzwerke kommuniziert werden, aber nicht mehr von Teilnetzwerk zu Teilnetzwerk. Das Gleiche gilt, falls eine Verbindung ausf¨ allt, die eine Br¨ ucke darstellt. Jetzt k¨ onnen wir einige notwendige Bedingungen f¨ ur die Existenz eines Hamilton-Kreises angeben. Wenn ein ungerichteter Graph einen Hamilton-Kreis besitzt, dann gilt: G besitzt keinen Schnittknoten. Ein Hamilton-Kreis m¨ usste mindestens zweimal u ber diesen Knoten f¨ u hren, also einen Knoten doppelt besuchen. ¨
110
2 Graphen
Leider ist diese Bedingung nicht hinreichend, wie der Peterson-Graph in Abbildung 2.45 zeigt. Er besitzt keinen Schnittknoten, enth¨ alt aber auch keinen Hamilton-Kreis. G besitzt keine Br¨ ucke. Ein Hamilton-Kreis m¨ usste mindestens zweimal u ¨ ber diese Kante f¨ uhren, also einige Knoten doppelt besuchen. Auch diese Bedingung ist nicht hinreichend, wie der Peterson-Graph zeigt. Der Durchmesser von G betr¨ agt h¨ ochstens |V |/2. Denn zwei Knoten, die auf einem Kreis liegen, haben h¨ ochstens den Abstand |V |/2 zueinander. Auch diese Bedingung ist nicht hinreichend, wie der bipartite Graph K1,3 zeigt. Der Graph enth¨ alt keinen Kreis, also auch keinen Hamilton-Kreis, aber der Durchmesser ist zwei, was genau die H¨ alfte der Knotenanzahl ist. Andererseits k¨ onnen wir auch hinreichende Bedingungen angeben. Beispielsweise besitzt jeder vollst¨ andige Graph einen Hamilton-Kreis. Satz 2.33 (Existenz eines Hamilton-Kreises) Sei G = (V, E) ein ungerichteter Graph mit mindestens drei Knoten, also |V | ≥ 3. Wenn f¨ ur jeden Knoten v ∈ V des Graphen deg(v) ≥ |V |/2 gilt, dann besitzt G einen Hamilton-Kreis. Einen Beweis finden Sie z. B. in (Krumke und Noltemeier, 2012, S. 51, Korrolar 3.37). Leider ist diese Bedingung nicht notwendig, in einem Graphen, der nur aus einem einfachen Kreis besteht, ist dieser Kreis nat¨ urlich auch ein HamiltonKreis, und auf einem einfachen Kreis haben alle Knoten den Knotengrad zwei. Eine sehr wichtige Anwendung der Hamilton-Kreise ergibt sich, wenn wir den einzelnen Kanten des Graphen Gewichte zuweisen. Diese Gewichte sind oft Entfernungen zwischen zwei Knoten. Beim Problem des Handlungsreisenden wird ein Hamilton-Kreis mit minimaler L¨ ange gesucht. Dabei betrachtet man oft vollst¨ andige Graphen. Das ist bei vielen Problemen eine sinnvolle Annahme, z. B. beim Bohren von L¨ ochern in Platinen oder bei der Luftfahrt. (Im Straßenverkehr hingegen k¨ onnen wir nicht davon ausgehen, dass alle Orte direkt durch eine Straße verbunden sind.) Ausgehend von einem Startknoten gibt es in einem vollst¨ andigen Graphen (|V | − 1)! verschiedene Hamilton-Kreise. Diese m¨ ochte und kann man nicht alle hinsichtlich ihrer L¨ ange auswerten. Daher werden Heuristiken (wie die Minimum Spanning Tree Heuristic) verwendet. Eine Heuristik liefert mittels Annahmen in der Regel gute L¨ osungen, d. h. hier einen kurzen Hamilton-Kreis – aber nicht unbedingt den k¨ urzesten.
2.5 Ausblick
2.5
111
Ausblick
Es gibt viele weitere interessante Fragestellungen wie die Graphisomorphie: Gegeben sind zwei ungerichtete Graphen G1 = (V1 , E1 ) und G2 = (V2 , E2 ). Es soll die Frage beantwortet werden, ob eine bijektive Funktion f : V1 → V2 existiert, so dass {u, v} ∈ E1 ⇐⇒ {f (u), f (v)} ∈ E2 gilt. Zur Erinnerung: Bijektive Funktionen haben wir in Kapitel 1.3 behandelt. Sind zwei Graphen isomorph zueinander, dann besitzen sie die gleiche Struktur, nur die Knoten wurden umbenannt. So erh¨ alt man in Abbildung 2.47 den rechten Graphen aus dem linken Graphen, indem man die Knoten wie folgt umbenennt: a → a, b → d, c → c, d → e, e → b, f → f. Wir haben zuvor z. B. von dem vollst¨ andig bipartiten Graphen Kn,m gesprochen. Tats¨ achlich ist ein Graph mit dieser Struktur nicht eindeutig, da die Knoten beliebig umbenannt werden k¨ onnen. Erst wenn wir zwischen isomorphen Graphen nicht unterscheiden, wird Kn,m eindeutig. Im Allgemeinen ist es sehr schwer bzw. sehr rechenaufw¨ andig festzustellen, ob zwei Graphen isomorph zueinander sind. a
b
c
a
b
c
f
e
d
f
e
d
Abb. 2.47 Zwei isomorphe Graphen
Kommen wir noch einmal auf die minimalen Spannb¨ aume aus Kapitel 2.4.1 zur¨ uck. Wir werden hier eine Verallgemeinerung der minimalen Spannb¨ aume kennen lernen. Gehen wir zun¨ achst davon aus, dass wir eine Menge von Knoten gegeben haben, die wir miteinander verbinden wollen. Es sollen also Kanten zwischen den Knoten eingef¨ ugt werden. Die Kanten haben als Gewicht den Abstand der zwei Endknoten. Solch ein Problem ergibt sich beim Verlegen von Rohren oder Kabeln zur Wasser-, Gas-, Strom- oder Telefonversorgung in St¨ adten. Das Ziel ist es nat¨ urlich, m¨ oglichst kurze Kabel- oder Rohrwege zu verlegen, damit die Kosten im Rahmen bleiben, sowohl bei der Herstellung der Kabel und Rohre, als auch beim Verlegen. Betrachten wir den Graphen aus Abbildung 2.48. Der minimale Spannbaum ist eingezeichnet, und man k¨ onnte vermuten, das so eine optimale L¨ osung gefunden wurde. Wenn wir aber einen weiteren Knoten in der Mitte der vier anderen Knoten anordnen, dann erhalten wir einen Spann√ urzer ist baum, der die L¨ ange 2 · 2 ≈ 2 · 1,4142136 = 2,8284271 hat, also k¨ als der urspr¨ ungliche Spannbaum der L¨ ange 3. Wir k¨ onnen einen noch besseren Spannbaum finden, wenn wir noch einen weiteren Knoten hinzuf¨ ugen, so dass
112
2 Graphen
agt die L¨ ange des Spannbaums nur noch alle Winkel 120◦ betragen. Dann betr¨ √ ater auf Seite 185 nach. 1 + 3 ≈ 2,7320508. Das rechnen wir sp¨ 1 1
1
Abb. 2.48 Das Steinerbaum-Problem: Durch Einf¨ ugen neuer Knoten kann die L¨ ange eines minimalen Spannbaums verkleinert werden.
Graphentheoretisch ist ein Steinerbaum wie folgt definiert: Sei G = (V, E, c) ein ungerichteter Graph und c eine Funktion, die jeder Kante ein reelles Gewicht zuordnet. Sei U ⊂ V eine Teilmenge der Knotenmenge. Ein Steinerbaum ist ein zusammenh¨ angender, kreisfreier Teilgraph G = (V , E ) von G, der alle Knoten uber hinaus in V aus U enth¨ alt, also U ⊂ V . Die Knoten aus V \ U , die dar¨ enthalten sind, dienen wie im vorangehenden Beispiel als Hilfsknoten. Als Beispiel stellen wir uns ein Schienennetz vor, das wie in der Realit¨ at ausged¨ unnt wird. Wir gehen aber so weit, dass nur noch alle Landeshauptst¨ adte gegenseitig erreichbar sind. Dann sind die Landeshauptst¨ adte die Knoten der Teilmenge U , die durch die Kanten des Teilgraphen G und einigen weiteren (Hilfs-) St¨ adten miteinander verbunden sind. Einen solchen Steinerbaum mit minimalem Gewicht zu finden, ist im Allgemeinen nur mit einem extrem hohen Rechenaufwand m¨ oglich. Aber zwei Spezialf¨ alle, die sehr einfach zu l¨ osen sind, haben wir bereits kennen gelernt: Besteht die Menge U = {u, v} aus genau zwei Knoten, so reduziert sich das Problem darauf, einen k¨ urzesten Weg von u nach v zu finden. Algorithmen wie der von Dijkstra l¨ osen das Problem. Wenn die Menge U = V alle Knoten des Graphen enth¨ alt, dann ist ein minimaler Spannbaum zu finden. Algorithmen wie der von Kruskal l¨ osen das Problem. Wir haben bereits fr¨ uher gesehen, dass Probleme im Allgemeinen sehr schwer l¨ osbar sein k¨ onnen. Wenn man aber Spezialf¨ alle betrachtet, sind L¨ osungen oft sehr einfach zu finden. F¨ arben von bipartiten Graphen ist z. B. sehr einfach. Sobald wir aber allgemeine Graphen als Eingabe zulassen, sind die Probleme schwer l¨ osbar. Bei den Steinerb¨ aumen ist es auch so. Die Spezialf¨ alle |U | = 2 und U = V sind einfach zu l¨ osen, die schwierigen F¨ alle liegen dazwischen.
3 Zahlen und Strukturen
¨ Ubersicht 3.1 3.2 3.3 3.4 3.5 3.6 3.7
3.1
Einf¨ uhrung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ganze Zahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Wahrscheinlichkeiten und Primzahltests . . . . . . . . . . . . . . . . . . . . . . . . . Rationale Zahlen und K¨ orper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RSA-Verschl¨ usselung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Reelle Zahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ¨ Abz¨ ahlbarkeit und Uberabz¨ ahlbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . .
113 116 146 164 167 172 200
Einf¨ uhrung
Im digitalen Computer werden nur Nullen und Einsen gespeichert. Um Buchstaben oder Zahlen in der uns gewohnten Form anzuzeigen, m¨ ussen diese Symbole codiert werden. Die uns bekannten Rechenverfahren wie Addition und Multiplikation m¨ ussen auf Dualzahlen durchgef¨ uhrt werden (vgl. Kapitel 1.2.1). Die interne Speicherung der Daten ist nicht nur f¨ ur Entwickler der Hardware interessant, sondern auch f¨ ur Programmierer. Wir m¨ ochten anhand einiger Beispiele zeigen, dass wir beim Programmieren die Zahlendarstellungen verstehen m¨ ussen, um bestimmte Fehler zu erkennen und zu vermeiden. 1 2 3 4 5 6 7 8 9 10
#include < stdio .h > void main ( void ) { f l o a t x = 1.0; printf ( " X | X * X \ n " ); printf ( " - - - - - - -+ - - - - - - -\n " ); while ( x != 2.0) { printf ( " %6.2 f | %6.2 f \ n " , x , x * x ); x += 0.1; } } Listing 3.1 Ungenauigkeiten bei float
S. Goebbels, J. Rethmann, Mathematik für Informatiker, DOI 10.1007/978-3-642-55340-0_3, © Springer-Verlag Berlin Heidelberg 2014
114
3 Zahlen und Strukturen
Betrachten Sie das Programm in Listing 3.1, und versuchen Sie zu bestimmen, welche Ausgabe das Programm erzeugt. Die Datentypen float und double dienen dazu, Zahlen mit Nachkommastellen in einer gewissen Genauigkeit zu speichern. Dabei ist double genauer als float. Wie das Speichern genau geschieht, wird am Ende des Kapitels beschrieben. Wir vermuten, dass die Quadrate der Zahlen von 1,0 bis 2,0 ausgegeben werden, wobei die Zwischenwerte jeweils um 0,1 erh¨ oht werden. Wenn wir das Programm aber tats¨ achlich starten, dann stoppt es anscheinend nicht. Wir werden hier noch nicht die Erkl¨ arung f¨ ur dieses seltsame Verhalten des Programms liefern (diese folgt auf Seite 191), sondern schauen uns mit Listing 3.2 ein weiteres Beispiel an. Auch hier sollten Sie zun¨ achst versuchen, die Ausgabe des Programms zu bestimmen, und erst danach das Programm tats¨ achlich starten und testen. 1 2 3 4 5 6 7 8 9 10
#include < stdio .h > void main ( void ) { i n t x , f a k u l t a e t = 1; printf ( " X | X !\ n " ); printf ( " - - - -+ - - - - - - - - - - - - -\n " ); f o r ( x = 1; x void main ( void ) { int x = 16777212; f l o a t f = 16777212.0; printf ( " x | f \ n " ); printf ( " - - - - - - - - - - -+ - - - - - - - - - - - - -\n " ); f o r ( i n t i = 0; i < 10; i ++) { printf ( " %9 d | %12.1 f \ n " , x , f ); x += 1; f += 1.0; } } Listing 3.3 Fehlende Zahlen
Wir sollten hier davon ausgehen k¨ onnen, dass die Werte von 16 777 212 bis 16 777 221 jeweils doppelt auf dem Bildschirm ausgegeben werden. Aber auch hier wird unsere Erwartung nicht erf¨ ullt, siehe Tabelle 3.2. Falls Sie andere Werte erhalten, dann verwendet Ihr Rechner 64-Bit-Werte. Geben Sie dann anstelle von 16 777 212 den Wert 254 − 4 im Programm an. Wir werden dieses Verhalten auf Seite 197 kl¨ aren. Um zu verstehen, warum diese Programme sich so verhalten, m¨ ussen wir uns mit der Zahlendarstellung im Rechner befassen. Tab. 3.2 Mit Listing 3.3 berechnete Zahlen
x 16 777 212 16777213 16777214 16777215 f 16 777 212,0 16 777 213,0 16 777 214,0 16 777 215,0 x 16 777 216 16777217 16777218 f 16 777 216,0 16 777 216,0 16 777 216,0
116
3 Zahlen und Strukturen
3.2
Ganze Zahlen
3.2.1
Nat¨ urliche und ganze Zahlen, Gruppen und Ringe
Wir sehen uns in den folgenden Abschnitten die wichtigsten Zahlenmengen an. Dabei betrachten wir die f¨ ur die Zahlenmengen geltenden Rechenregeln, die in den verschiedenen Strukturen der Algebra (wie Gruppen, Ringen und K¨ orpern) ihren Niederschlag finden und die ihrerseits in der Informatik z. B. in der Kodierungstheorie ben¨ otigt werden. Zudem betrachten wir die Darstellung der Zahlen im Computer. Die nat¨ urlichen Zahlen 1, 2, 3, 4, . . . lassen sich dadurch definieren, dass es eine erste Zahl 1 gibt und dass zu jeder nat¨ urlichen Zahl genau ein Nachfolger existiert. Statt die Zahlen 1, Nachfolger(1), Nachfolger(Nachfolger(1)), . . . zu nennen, entstanden die k¨ urzeren aber willk¨ urlichen Bezeichnungen 1, 2 := Nachfolger(1), 3 := Nachfolger(2), . . . Wir nennen die Menge dieser Zahort die Null nicht zu N, wir verwenden N0 := N ∪ {0}. Das len N. Bei uns geh¨ ist in der Literatur aber nicht durchweg so, so dass Sie sich die grundlegenden Definitionen immer kurz ansehen m¨ ussen. Die nat¨ urlichen Zahlen sind total geordnet, d. h., die Relation ≤ ist eine totale Ordnung (siehe Seite 50). F¨ ur m, n ∈ N gilt also entweder m ist kleiner oder gleich n, d. h. m ≤ n (d. h., m = n oder n ist direkter oder indirekter Nachfolger von m) oder n ist kleiner oder gleich m, d. h. n ≤ m (d. h., m = n oder m ist direkter oder indirekter Nachfolger von n) oder beides, wenn n und m gleich sind. Diese Ordnung besitzen alle Zahlenmengen, denen wir in diesem Kapitel noch begegnen, einschließlich der reellen Zahlen. Die noch gr¨ oßere Menge der komplexen Zahlen, die wir hier nicht mehr betrachten, ist nicht mehr total geordnet. Neben ≤ benutzen wir ≥, < und > in der u ur gr¨ oßer gleich, kleiner sowie gr¨ oßer. ¨ blichen Weise, also f¨ onnen wir addieren und multiplizieren. Es gibt aber Probleme mit In N0 k¨ den Umkehroperationen Subtraktion und Division, die beide aus der Menge hinausf¨ uhren k¨ onnen und damit nicht vern¨ unftig definiert sind. achst mit der Addition +“. Eine Menge mit Wir betrachten die Menge N0 zun¨ ” einer oder mehreren darauf definierten Operationen nennt man eine Struktur. Hier handelt es sich um eine Halbgruppe: Definition 3.1 (Halbgruppe) Ein Paar (H, ◦) bestehend aus einer Menge H und einer Verkn¨ upfung ◦, die zwei beliebigen Elementen von H als Ergebnis genau ein Element von H zuordnet, heißt Halbgruppe genau dann, wenn
3.2 Ganze Zahlen
117
H = ∅ und die Verkn¨ upfung assoziativ ist, d. h., wenn (a ◦ b) ◦ c = a ◦ (b ◦ c) f¨ ur alle a, b, c ∈ H gilt. Eine Halbgruppe heißt kommutativ oder Abel’sch genau dann, wenn zus¨ atzlich das Kommutativgesetz a◦b=b◦a f¨ ur alle a, b ∈ H erf¨ ullt ist. Die Verkn¨ upfung ◦ ist eine Abbildung ◦ : H × H → H. Die Definition erlaubt also neben der Addition auch andere Verkn¨ upfungen. W¨ ahlen wir f¨ ur ◦ die Addition +, dann ist offensichtlich (N0 , +) eine kommutative Halbgruppe. Aber ahlt, erf¨ ullt das Assoziativ- und auch (N0 , ·), d. h. ◦ wird als Multiplikation gew¨ Kommutativgesetz und ist eine (andere) kommutative Halbgruppe. Vielleicht fragen Sie sich, warum man in der Mathematik Strukturen wie Halbgruppen diskutiert. Dass sich die Grundrechenarten wie angegeben verhalten, weiß doch jedes Kind. Hat man aber nur basierend auf den Halbgruppeneigenschaften eine Reihe von S¨ atzen bewiesen, dann gelten diese f¨ ur jede konkrete Halbgruppe. So gen¨ ugt die Halbgruppeneigenschaft, um Potenzen zu definieren. In einer Halbgruppe (H, ◦) verstehen wir f¨ ur n ∈ N unter an das Element
a ◦ a ◦· · · ◦ a . n-mal
Potenzen schreibt man h¨ aufig (aber nicht zwingend), wenn es sich bei ◦ um eine irgendwie geartete Multiplikation handelt, also insbesondere f¨ ur (N0 , ·). Da mit dem Assoziativgesetz Klammern beliebig gesetzt werden k¨ onnen, gilt f¨ ur n, m ∈ N die wichtige Rechenregel an+m = (a · a · · · a) · (a · a · · · a) = an ◦ am . n Faktoren
m Faktoren
Mit der gleichen Begr¨ undung gilt außerdem (an )m = an·m .
(3.1)
Ist die Halbgruppe kommutativ, so gilt z. B. (a ◦ b)2 := (a ◦ b) ◦ (a ◦ b) = a ◦ (b ◦ a) ◦ b = a ◦ (a ◦ b) ◦ b = (a ◦ a) ◦ (b ◦ b) = a2 ◦ b2 . Entsprechend k¨ onnen wir in (a ◦ b)n nach a und b sortieren und erhalten: (a ◦ b)n = an ◦ bn .
118
3 Zahlen und Strukturen
Jetzt sehen wir den Vorteil der Halbgruppendefinition: Die Rechenregeln f¨ ur Potenzen werden f¨ ur alle weiteren Zahlenmengen, die wir im Folgenden besprechen, ebenso gelten, da diese Halbgruppen sind. Dar¨ uber hinaus werden wir auch Matrizen multiplizieren. Die quadratischen Matrizen (Zahlenschemata mit gleich vielen Zeilen und Spalten) zusammen mit der Matrixmultiplikation (siehe Seite 296) werden ebenfalls eine (nicht-kommutative) Halbgruppe bilden, so dass wir bereits jetzt die Rechenregeln An+m = An · Am und (An )m = An·m f¨ ur eine quadratische Matrix A bewiesen haben. Was also auf den ersten Blick sehr k¨ unstlich wirkt, erweist sich auf den zweiten Blick als n¨ utzlich und spart Arbeit. Wir haben ja bereits darauf hingewiesen: Wir sind faul! Wir erweitern nun N0 so, dass die Subtraktion nicht mehr aus der Zahlenmenge f¨ uhrt, um die Division k¨ ummern wir uns sp¨ ater. Ein Philosoph, ein Ingenieur und ein Mathematiker stehen vor einem Aufzug. Sie sehen, wie drei Leute einsteigen. Die T¨ ur schließt sich und geht nach einer Minute wieder auf, und es kommen 5 Leute heraus. Der Philosoph sch¨ uttelt den Kopf und sagt: Unm¨ oglich. Der Ingenieur winkt ab mit den Worten: Messfehler. Der Mathematiker sagt: Wenn jetzt noch zwei Leute herein gehen, dann ist keiner mehr drin. Die erweiterte Zahlenmenge ist die Menge der ganzen Zahlen
Z := {. . . , −3, −2, −1, 0, 1, 2, 3, . . . } = {0, 1, −1, 2, −2, 3, −3, . . . }. Auch (Z, +) ist eine kommutative Halbgruppe. Jetzt stehen aber mit den negativen Zahlen auch Inverse bez¨ uglich der Addition zur Verf¨ ugung. Diese Struktur (Z, +) ist eine kommutative Gruppe: Definition 3.2 (Gruppe) Eine Halbgruppe (G, ◦) heißt eine Gruppe genau dann, wenn zus¨ atzlich zum Assoziativgesetz der Halbgruppe gilt: In G gibt es ein neutrales Element e mit e◦a = a f¨ ur alle a ∈ G. Sei e ein neutrales Element. Dann besitzt jedes a ∈ G ein inverses Element a−1 ∈ G mit a−1 ◦ a = e. Die Gruppe heißt kommutativ oder Abel’sch, wenn dies f¨ ur die Halbgruppe gilt. Die Bezeichnung e f¨ ur ein neutrales Element erinnert an die Eins, das neutrale Element der Multiplikation. W¨ are ◦ eine Addition, dann m¨ ussten wir eigentlich
3.2 Ganze Zahlen
119
von einer Null sprechen. In allgemeinen Situationen ist aber die Bezeichnung e u ¨blich. Entsprechend bezeichnet die Schreibweise a−1 ein inverses Element und bedeutet hier nicht, dass wie bei der Bruchrechnung ein Kehrwert (z. B. 3−1 = 31 ) zu nehmen ist. Ist ◦ eine Multiplikation, dann berechnet man ein Inverses u ¨ ber den Kehrwert, bei einer Addition jedoch nicht. Der Exponent −1 steht in der Mathematik also f¨ ur ein Inverses, das nicht unbedingt ein Kehrwert sein muss. Die kommutative Halbgruppe (Z, +) ist eine kommutative Gruppe, denn zu a ∈ Z gibt es ein inverses Element a−1 := −a, wobei e = 0 ein neutrales Element ist. Die Zahl 5 hat also eine inverse Zahl −5, denn (−5) + 5 = 0. Offensichtlich ist 0 das einzige neutrale Element. Wir haben die Axiome aber so gehalten, dass es mehrere neutrale Elemente geben k¨ onnte. Dass das aber nie der Fall ist, zeigt der folgende Satz: Satz 3.3 (Eigenschaften einer Gruppe) Jede Gruppe G hat genau ein neutrales Element e. In der Definition der Gruppe wird das neutrale Element von links mit den Elementen der Gruppe multipliziert. Auch ohne Kommutativit¨ at ist das neutrale Element auch bei Verkn¨ upfung von rechts neutral: a ◦ e = a f¨ ur alle a ∈ G. Weiterhin ist das Inverse a−1 ∈ G jedes Elements a ∈ G eindeutig. Auch ohne Kommutativit¨ at gilt bei Verkn¨ upfung von rechts: ur alle a ∈ G. a ◦ a−1 = e f¨
Beweis Wir zeigen a ◦ a−1 = e, also dass bei Verkn¨ upfung mit einem Inversen von rechts ein neutrales Element e entsteht: Sei dazu a−1 ein (Links-)Inverses zu a mit a−1 ◦ a = e: (a ◦ a−1 ) ◦ [a ◦ a−1 ] = a ◦ (a−1 ◦ [a ◦ a−1 ]) ◦ a] ◦ a
−1
= a ◦ (e ◦ a
−1
= a ◦ ([a
−1
(Assoziativit¨ at)
)
(Assoziativit¨ at)
)
(a−1 ist inverses Element)
= a ◦ a−1
(e ist neutrales Element).
Wir nennen a ◦ a−1 nun b. Mit anderen Worten, wir haben gezeigt: b ◦ b = b. In diesem Fall muss aber b das neutrale Element e = b−1 ◦ b sein, denn b = e ◦ b = (b−1 ◦ b) ◦ b = b−1 ◦ (b ◦ b) = b−1 ◦ b = e.
120
3 Zahlen und Strukturen
Damit haben wir gezeigt, dass a ◦ a−1 = e ist, d. h., man darf ein Inverses auch von rechts multiplizieren. Mit dem soeben Gezeigten beweisen wir, dass ein neutrales Element e auch bei Verkn¨ upfung von rechts neutral ist: a =e◦a
erster Beweisschritt
=
(a ◦ a−1 ) ◦ a = a ◦ (a−1 ◦ a) = a ◦ e.
Damit ist das neutrale Element eindeutig: Seien e und e˜ neutrale Elemente: e˜
e neutral von links
=
e ◦ e˜
e ˜ neutral von rechts
=
e.
(3.2)
Schließlich beweisen wir noch, dass zu jedem a ∈ G das inverse Element ˜ −1 ein weiteres Inverses f¨ ur a. Dann gilt: a−1 ∈ G eindeutig ist. Sei dazu a ˜−1 ) = (a−1 ◦ a) ◦ a ˜−1 = e ◦ a ˜−1 = a ˜−1 . a−1 = a−1 ◦ e = a−1 ◦ (a ◦ a H¨ atten wir (die hier nicht erforderliche) Kommutativit¨ at vorausgesetzt, w¨ are klar, dass die Verkn¨ upfung von links und rechts gleich ist. Damit w¨ urde sich der Beweis auf die beiden letzten Punkte reduzieren. Aufgabe 3.1 Zeigen Sie, dass in einer Gruppe (a−1 )−1 = a gilt. ¨ ur theoretische Uberlegungen in der Mathematik Die Zahlenmenge Z ist f¨ sehr hilfreich. Leider steht uns in der Informatik die Unendlichkeit nicht zur Verf¨ ugung, da mit einem Computer wegen des endlichen Speichers nur endlich viele Zahlen unterschieden werden k¨ onnen. Daher sind in der Informatik Restklassen wichtig: Auf der Menge Zn := {0, 1, 2, . . . , n − 1} wird eine Addition + wie in N definiert. Damit das Ergebnis aber in Zn bleibt, nimmt man bei einem Resultat ≥ n den Rest der Ganzzahldivision durch n (man rechnet also modulo n bzw. ¨ mod n, siehe Seite 51 – insbesondere f¨ ur die Aquivalenzrelation ≡n ). Mit dieser Definition von + entsteht eine kommutative Gruppe (Zn , +). In Z5 (also n = 5) gilt beispielsweise 1 + 1 = 1, 2 + 3 = 0, 3 + 4 = 2. Das inverse Element zu m mit 0 < m < n ist n − m. In Z5 ist das Inverse von 3 die Zahl 5 − 3 = 2, denn otigt. 3 + 2 = 5 ≡5 0. Damit werden keine negativen Zahlen“ ben¨ ” Die Zahlen 0, . . . , n−1 heißen Vertreter (Repr¨ asentanten) von Restklassen. Dabei steht der Vertreter k f¨ ur die Restklasse, also die Menge [k] := {k + m · n : m ∈ Z} = {j ∈ Z : j ≡n k} = {j ∈ Z : j ≡ k mod n}.
3.2 Ganze Zahlen
121
Wir identifizieren beispielsweise 1 mit der Restklasse {1, 1 + n, 1 − n, 1 + 2n, 1 − 2n, . . . }. F¨ ur n = 5 ist also [1] = {1, 6, −4, 11, −9, . . . }. Die nicht-negativen Elemente einer Restklasse haben bei Division durch n den gleichen Rest. Beachten Sie, dass in der Restklasse [1] aber auch negative Zahlen wie −4 liegen. Der Rest der Ganzzahldivision von −4 durch 5 ist aber −4 mod 5 = −4 und nicht 1. Die Elemente einer Restklasse sind zueinander kongruent modulo n. Die Restklassen ¨ sind die Aquivalenzklassen der Kongruenzrelation ≡n . Die Gruppe (Z12 , +) kennen Sie aus dem Alltag als Zifferblatt der Uhr. Dort sehen Sie die Repr¨ asentanten 1 bis 12, wobei 0 ∈ [12]. Die n Restklassen des Zn haben offensichtlich keine gemeinsamen Elemente, sind also disjunkte Mengen. Ihre Vereinigung ergibt Z:
Z=
n−1
{k + m · n : m ∈ Z}.
k=0
Damit bilden die Restklassen eine disjunkte Zerlegung von Z. Das wussten wir eigentlich bereits wegen (1.12) und (1.13) auf Seite 52, da es sich um ¨ Aquivalenzklassen handelt. In der Informatik kann man das f¨ ur das Hashing ausnutzen: Hier werden Daten anhand ihres Schl¨ ussels s ∈ N mittels einer HashFunktion einem von n Containern eindeutig zugeordnet. Eine h¨ aufig benutzte Hash-Funktion ist h(s) := s mod n. Wir k¨ onnen nun die Addition auch direkt f¨ ur die Restklassen erkl¨ aren: Zwei Restklassen werden addiert, indem man aus beiden Restklassen je ein beliebiges Element ausw¨ ahlt und die beiden Elemente in N addiert. Die Ergebnisrestklasse ist die, in der die so berechnete Zahl liegt. Tats¨ achlich rechnen wir ur ein systemabh¨ angiges in Listing 3.2 nicht mit ganzen Zahlen sondern in Zn f¨ (großes) n. Ausgegeben werden Repr¨ asentanten von Restklassen. Zun¨ achst stimmen die Repr¨ asentanten mit dem Rechenergebnis in Z u ¨berein. Da es aber nur n verschiedene Restklassen gibt, werden nach einigen Berechnungen Repr¨ asentanten genommen, die uns verwundern. Eigentlich erwarten wir das Ergebnis 14! = 87 178 291 200. Mit 32 Bits lassen sich 232 = 4 294 967 296 verschiedene Bin¨ arzahlen darstellen. Davon reservieren wir aber die H¨ alfte zur Dar31 stellung von negativen Zahlen, so dass wir nur 2 verschiedene positive Zahlen darstellen k¨ onnen. Genaueres dazu sehen wir uns auf Seite 130 an. Also erhalten wir 14!/231 = 40 Rest 1 278 945 280, und genau dieser Rest wird durch das Programm auch ausgegeben. Aufgabe 3.2 In dieser Aufgabe soll ein deterministischer, endliche Automat (siehe Kapitel 1.3.1) ¨ uber dem Alphabet Σ = {0,1} erstellt werden, der alle nat¨ urlichen Zahlen in Bin¨ ardarstellung erkennt, die ohne Rest durch drei teilbar sind. Hinweis: Die Zust¨ ande des Automaten repr¨ asentieren die Restklassen bez¨ uglich
122
3 Zahlen und Strukturen
¨ der Division durch drei. Uberlegen Sie sich, was das Lesen einer Null bzw. einer Eins bedeutet. Bislang haben wir nur Strukturen betrachtet, in denen eine Verkn¨ upfung eruhrt zu kl¨ art war. In Z sind aber Addition und Multiplikation definiert. Das f¨ einem weiteren Begriff: Definition 3.4 (Ring) Ein 3-Tupel (R, +, ·) bestehend aus einer Menge R und zwei Verkn¨ upfungen + und ·, die jeweils zwei beliebigen Elementen aus R ein Ergebnis aus R zuordnen, heißt ein Ring genau dann, wenn (R, +) eine kommutative Gruppe ist, (R, ·) eine Halbgruppe ist und die Verkn¨ upfungen vertr¨ aglich im Sinne der Distributivgesetze sind: a · (b + c) = (a · b) + (a · c),
(a + b) · c = (a · c) + (b · c)
f¨ ur alle a, b, c ∈ R (zwei Regeln sind n¨ otig, da keine Kommutativit¨ at vorausgesetzt ist). Ein Ring heißt kommutativ genau dann, wenn a · b = b · a f¨ ur alle a, b ∈ R gilt. Ein Element 1 ∈ R heißt Einselement genau dann, wenn 1·a = a·1 = a f¨ ur alle a ∈ R ist. Falls es ein Einselement gibt, dann ist dieses analog zu (3.2) auch eindeutig. Z ist ein kommutativer Ring mit Einselement, wobei das Einselement, wie der Name vermuten l¨ asst, tats¨ achlich die Zahl Eins ist. Erkl¨ art man in Zn eine Multiplikation analog zur Addition, indem man zun¨ achst wie in N multipliziert und dann modulo n rechnet, so wird (Zn , +, ·) ein kommutativer Ring mit Einselement. Um den Bezug zu den Restklassen herzustellen, spricht man von einem Restklassenring.
3.2.2
Stellenwertsysteme und Darstellung ganzer Zahlen im Computer
Warum verwechseln Mathematiker Weihnachten mit Halloween? Weil OCT 31 gleich DEC 25 ist. Mit DEC ist das Dezimal- und mit OCT das Oktalsystem gemeint. Unter Ber¨ ucksichtigung dieser Stellenwertsysteme sind die Zahlen tats¨ achlich gleich. Das werden wir in diesem Abschnitt verstehen.
3.2 Ganze Zahlen
123
Wir schreiben Zahlen mit Ziffern, dem (Dezimal-) Punkt (in deutscher Schreibweise ist das ein Komma) und einem Vorzeichen. Das klassische indischarabische Alphabet zur Darstellung von Ziffern ist Σ10 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}. Davon abgeleitete Alphabete sind: Σ2
=
{0, 1}
(dual, bin¨ ar)
Σ8
=
{0, 1, 2, . . . , 7}
(oktal)
Σ16
=
{0, 1, 2, . . . , 9, A, B, C, D, E, F }
(hexadezimal).
Im Hexadezimalsystem k¨ onnen wir die Ziffern 10, 11, 12, . . . , 15 nicht mehr mit einem einzelnen Symbol aus Σ10 darstellen, deshalb greifen wir auf Buchstaben zur¨ uck. Wir k¨ onnten nun eine Zahl ziffernweise beispielsweise in ASCII (siehe Seite 1.3.3) darstellen. Dann w¨ urde die Zahl 42 mittels 00110100 00110010 codiert werden. Tats¨ achlich bietet die Programmiersprache COBOL die M¨ oglichkeit, nat¨ urliche Zahlen als entsprechende Zeichenketten zu speichern. Damit lassen sie sich leicht ausgeben. Aber die Nachteile beim Rechnen u achst ¨ berwiegen: Zun¨ einmal stellen wir fest, dass eine solche Darstellung sehr speicherintensiv ist. Der Wert 123 w¨ urde in ASCII-Codierung dargestellt als 00110001 00110010 00110011 und ben¨ otigt somit 3 Byte; 123 lautet als Dualzahl 1111011 und ben¨ otigt in dieser Form nur 1 Byte. Außerdem wird eine aufw¨ andige Arithmetik ben¨ otigt, um zwei Zahlen zu addieren, denn die ASCII-Werte k¨ onnen nicht einfach stellenweise summiert werden, wie wir das aus der Schule und von Seite 13 kennen: 8
00111000
= ˆ
8
+9
+ 00111001
= ˆ
9
17
01110001
= ˆ
q.
Damit dieses Problem nicht auftritt, verwenden wir eine Stellenwertdarstellung zur Basis 2. Damit ist jede Stelle ein einzelnes Bit und muss nicht anderweitig codiert werden. Satz 3.5 (Stellenwertdarstellung) urliche Zahl x mit 0 ≤ x ≤ bn − 1 und Sei b ∈ N und b > 1. Dann ist jede nat¨ ange n ¨ uber Σb dargestellt n ∈ N eindeutig als Wort xn−1 xn−2 . . . x0 der L¨ durch x = xn−1 · bn−1 + xn−2 · bn−2 + . . . + x1 · b1 + x0 · b0 .
124
3 Zahlen und Strukturen
Offensichtlich ist x0 der Rest der Division x/b, x0 = x mod b, außerdem ist x1 = [(x − x0 )/b] mod b usw. Daraus folgt insbesondere die Existenz und Eindeutigkeit der Darstellung. Wir wollen einige Vereinbarungen treffen: In der Ziffernschreibweise geben wir in der Regel die Basis der Zahlendarstellung explizit an, außer wenn es sich um die vertraute Basis 10 handelt oder aus dem Zusammenhang eindeutig klar ist, welche Basis gemeint ist. Die Basis selbst wird immer dezimal angegeben. Betrachten wir zun¨ achst ein Beispiel im Dezimalsystem, also sei b = 10. Die eindeutige Darstellung von x = 5209 lautet x = 5 · 103 + 2 · 102 + 0 · 101 + 9 · 100 = 5 · 1000 + 2 · 100 + 0 · 10 + 9 · 1 = 5000 + 200 + 9 und in Ziffernschreibweise (5209)10 . Das war einfach, da uns die Dezimalschreibweise vertraut ist und nichts umzurechnen war. Betrachten wir daher nun ein Beispiel im Dual- oder Bin¨ arsystem, also sei b = 2. Die eindeutige Darstellung von x = 42 (vgl. Adams (1979)) lautet x = 1 · 25 + 0 · 24 + 1 · 23 + 0 · 22 + 1 · 21 + 0 · 20 = 1 · 32 + 0 · 16 + 1 · 8 + 0 · 4 + 1 · 2 + 0 · 1 = 32 + 8 + 2 und in Ziffernschreibweise (101010)2 . Historisch – und um den anf¨ anglichen Witz zu verstehen – ist auch das Oktalsystem interessant. Sei also b = 8, dann lautet die eindeutige Darstellung von x = 93 x = 1 · 82 + 3 · 81 + 5 · 80 = 1 · 64 + 3 · 8 + 5 · 1 = 64 + 24 + 5 und in Ziffernschreibweise (135)8 . Oft werden Zahlen in hexadezimaler Schreibweise angegeben, da damit die Werte von 0 bis 255 eines Bytes mit zwei Ziffern angegeben werden k¨ onnen. Sei jetzt also b = 16, dann lautet die eindeutige Darstellung von x = 342 x = 1 · 162 + 5 · 161 + 6 · 160 = 1 · 256 + 5 · 16 + 6 · 1 = 256 + 80 + 6 und in Ziffernschreibweise (156)16 . Ab einem Alter von 32 (und bis 41) war es in unserem Freundeskreis beliebt, das Alter hexadezimal anzugeben. . . In Kapitel 3.6.3 sehen wir uns Stellenwertdarstellungen, die dann auch einen Nachkommateil haben werden, noch etwas intensiver an. Jetzt betrachten wir speziell die Grundrechenarten f¨ ur die in der Informatik wichtigste Basis 2. Die Addition von Dualzahlen haben wir bereits in Kapitel 1.2.1 kennen gelernt. Die Multiplikation einstelliger Dualzahlen ist noch einfacher als die Addi¨ tion, da dabei keine Ubertr¨ age auftreten und die meisten Ergebnisse Null sind: 0 · 0 = 0,
0 · 1 = 0,
1 · 0 = 0,
1 · 1 = 1.
3.2 Ganze Zahlen
125
Mehrstellige Zahlen k¨ onnen nach der Schulmethode multipliziert werden. Dabei m¨ ussen nur die Stellen des rechten Operanden ber¨ ucksichtigt werden, die eins sind. Dezimal 37 · 21
Dual 00100101 · 00010101
37
100101
740
10010100
777
1001010000 1100001001
Etwas schwieriger wird es, wenn wir subtrahieren wollen. Machen wir uns daher zun¨ achst klar, wie wir in der Schule Subtrahieren gelernt haben. Wir betrachten dazu nat¨ urlich wieder ein Beispiel: 63 - 21. In diesem Beispiel k¨ onnen wir einfach ziffernweise von rechts nach links subtrahieren und erhalten als Ergebnis 42. Was passiert aber, wenn bei der ziffernweise durchgef¨ uhrten Subtraktion an einer Stelle ein negativer Wert vorkommt? In einem solchen Fall k¨ onnen wir nicht mehr stellenweise subtrahieren. In der Schule haben wir gelernt, dass wir uns eine Eins von der n¨ achst h¨ oheren Stelle leihen m¨ ussen. Wir erhalten hier ¨ also auch so etwas wie einen Ubertrag, nur m¨ ussen wir von der n¨ achst h¨ oheren Stelle eins subtrahieren, nicht addieren. Betrachten wir dazu das Beispiel 623 ¨ 478. Bereits bei der ersten Stelle, also der Stelle ganz rechts, tritt ein Ubertrag auf, so dass wir uns von der n¨ achst h¨ oheren Stelle eine Eins leihen. 6
2
3
-4
7
8
→
6
1
13
-4
7
8 5
→
5
11
13
-4
7
8
1
4
5
Auch an der zweiten Stelle ist die obere Zahl kleiner als die untere Zahl, so dass wir uns wieder von der n¨ achst h¨ oheren Stelle eine Eins borgen m¨ ussen. Wie wir sofort erkennen, d¨ urfen wir nur kleinere von gr¨ oßeren Zahlen subtrahieren, da wir uns sonst keine Einsen leihen k¨ onnen. Damit k¨ onnen wir 33 − 36 so nicht ausrechnen, sondern m¨ ussen den Ansatz −(36 − 33) = −3 machen. Wenn wir die Differenz x − y mit der Schulmethode berechnen wollen, dann ben¨ otigen wir eine Fallunterscheidung: Ist x ≥ 0 und y < 0, dann k¨ onnen wir addieren. Ist x < 0 und y ≥ 0, dann addieren wir die nicht-negativen Zahlen −x und y und versehen dann das Ergebnis mit einem Minuszeichen. Ist x ≥ 0 und y ≥ 0, dann m¨ ussen wir subtrahieren. F¨ ur x ≥ y k¨ onnen wir das direkt tun, falls aber x < y ist, m¨ ussen wir y − x rechnen und dann mit −1 multiplizieren.
126
3 Zahlen und Strukturen
Ist x < 0 und y < 0, dann m¨ ussen wir analog zum vorangehenden Fall die Zahlen sortieren und subtrahieren. Die Ursache f¨ ur die Komplexit¨ at ist, dass wir negative Zahlen ungeschickt dadurch codieren, dass wir das Vorzeichen separat aufschreiben. Leider gibt es dadurch auch mit −0 und +0 zwei Darstellungen der Null, und wir ben¨ otigen Addierer und Subtrahierer. Wie wir ohne komplizierte Entscheidungslogik und ohne Subtrahierer auskommen k¨ onnen, sehen wir jetzt. Im folgenden ist n immer eine fest gew¨ ahlte Stellenzahl, d. h., wir arbeiten immer mit Zahlen fester Wortl¨ ange, z. B. n = 16 Bit, wobei damit auch das Vorzeichen codiert werden muss. Sei xi eine Stelle einer Dualzahl. Mit ⎧ ⎨ 1 falls xi = 0 xi = ⎩ 0 falls x = 1 i bezeichnen wir die Negation bzw. das Komplement dieser Stelle. Definition 3.6 (Einer- und Zweier-Komplement) Das Einer-Komplement der Dualzahl x = ±(0 xn−2 xn−2 . . . x0 )2 ist definiert als ⎧ ⎨ 0 xn−2 xn−3 . . . x0 falls x ≥ 0 x1 := ⎩ 1 xn−2 xn−3 . . . x0 sonst, wobei f¨ ur x = 0 auch die Darstellung 1 1 1 . . . 1 erlaubt ist. Das ZweierKomplement der Zahl x entsteht im Fall x < 0 aus dem EinerKomplement, indem zum Einer-Komplement eine Eins addiert wird und ¨ ein eventuell auftretender Ubertrag der n-ten Stelle weggelassen wird: F¨ ur 2 ur x < 0 setzen wir x ≥ 0 ist x := x und f¨ x2 := ((1 xn−2 xn−3 . . . x0 )2 + 1) mod 2n , wobei durch mod 2n -Rechnung eine eventuell auftretende Stelle xn entfernt wird. Entsprechende Komplement-Darstellungen gibt es analog auch f¨ ur Stellenwertdarstellungen zu anderen Basen als zwei. F¨ ur positive ganze Zahlen ist die Komplementdarstellung gleich der Bin¨ ardarstellung, nur negative Zahlen werden speziell dargestellt, siehe Tabelle 3.3. Diese erkennt man in den Komplementdarstellungen an der f¨ uhrenden Eins. Der Wert −4 beim ZweierKomplement stellt eine Ausnahme dar, da −4 nicht in der Vorzeichendarstellung mit drei Bits gespeichert werden kann und wir daf¨ ur eigentlich nicht das ZweierKomplement definiert haben. Die Darstellung der −4 ist m¨ oglich, da es beim Zweier-Komplement nur eine Codierung der Null gibt.
3.2 Ganze Zahlen
127
Tab. 3.3 Darstellung von Dualzahlen mit separatem Vorzeichen, im Einer- und ZweierKomplement bei einer L¨ ange von drei Bit.
mit Vorzeichen
Einer-Komplement
Zweier-Komplement
+00 +01 +10 +11
= = = =
0 1 2 3
000 001 010 011
= = = =
0 1 2 3
000 001 010 011
= = = =
0 1 2 3
-00 -01 -10 -11
= = = =
0 -1 -2 -3
100 101 110 111
= = = =
-3 -2 -1 0
100 101 110 111
= = = =
-4 -3 -2 -1
Wir betrachten jeweils ein Beispiel mit der Wortl¨ ange 8 Bit bzw. 16 Bit: x = −001101101011000
x = −0110100 x
1
x1 = 1110010010100111
= 11001011
x2 = 11001100
x2 = 1110010010101000 .
Stellen wir Zahlen x und y im Einer-Komplement dar, dann ergibt die Addition dieser Einer-Komplemente unabh¨ angig von den Vorzeichen das Einer¨ Komplement der Summe x+y, sofern wir einen eventuell auftretenden Ubertrag entfernen und als Eins hinzu addieren. Wir m¨ ussen nicht mehr auf Vorzeichen achten. Bevor wir dies begr¨ unden, rechnen wir ein Beispiel. Beispiel 3.7 (Subtraktion mit Einer-Komplement bei n = 8 Stellen) −00010111 = ˆ −23
01110111 = ˆ 119 −00111011 = ˆ −59 00111100 = ˆ
und
−00111001 = ˆ −57
(3.3)
−01010000 = ˆ −80
60
wird im Einer-Komplement zu 01110111 +11000100
11101000 und
100111011
+11000110 . 110101110
¨ Nun m¨ ussen noch die aufgetretenen Ubertr¨ age behandelt werden. Wir streichen ¨ die Ubertr¨ age und addieren eine Eins auf die Ergebnisse und erhalten 00111011 +1 00111100
10101110 und
+1 . 10101111
128
3 Zahlen und Strukturen
Rechts ist eine negative Zahl entstanden, die im Einer-Komplement vorliegt. Um diese Zahl in die uns gewohnte Vorzeichen-Betrag-Darstellung umzuwandeln, m¨ ussen wir wieder alle Bits negieren und das Vorzeichen schreiben. Auch das werden wir uns im Anschluss u ¨berlegen. Aus 10101111 wird −01010000, das Ergebnis entspricht also −80. Wir u ur den Fall 0 < x, y < 2n−1 , dass ¨ berlegen uns jetzt exemplarisch f¨ wir mit dem Einer-Komplement f¨ ur die Rechnung y − x tats¨ achlich das richtige Ergebnis erhalten: Das Einer-Komplement einer negativen Zahl −x entsteht, indem wir −x zu der Zahl 2n − 1, die aus n Einsen besteht, addieren. Denn dadurch werden als alle Nullen Einsen und umgekehrt, z. B. wird aus x = 01010000 der Wert −01010000 + 11111111 = 10101111. Damit ist 1
1
y 1 + −x = y + −x = y + 2n − 1 − x = y − x + 2n − 1.
(3.4)
Wenn wir auf diese Weise die Differenz y − x f¨ ur x, y ≥ 0 berechnen wollen, 1 ¨ als n + 1-te Stelle dann pr¨ ufen wir, ob y + −x eine Eins durch einen Ubertrag bekommt: ¨ Falls durch einen Ubertrag eine weitere Stelle entsteht, so ist y − x positiv, denn zur n-stelligen Zahl 2n − 1 kommt in (3.4) etwas hinzu. Um in diesem 1 Fall das richtige Ergebnis zu erhalten, m¨ ussen wir von y + −x die Zahl achst 2n ab, indem wir die f¨ uhrende Stelle 2n − 1 abziehen. Wir ziehen zun¨ weglassen und m¨ ussen dann noch 1 addieren. 1 Falls keine zus¨ atzliche Stelle entsteht, ist y − x ≤ 0. Wir erhalten mit y + −x direkt das Ergebnis im Einer-Komplement: 1
1
2n − 1 + (y − x) = y + [2n − 1 − x] = y + −x = y 1 + −x . ¨ Tritt also nach dem Addieren von Einer-Komplementen ein Ubertrag an der h¨ ochsten Stelle auf, so muss man diesen als 1 zum bisherigen Ergebnis addieren. Ein Nachteil des Einer-Komplements ist, dass die Null immer noch zwei Darstellungen besitzt, z. B. bei n = 4 Stellen 0000 und 1111. Das l¨ asst sich durch das Zweier-Komplement verhindern. Heute arbeiten nur noch wenige Prozessoren mit dem Einer-Komplement. Das Zweier-Komplement hat sich durchgesetzt. Addieren wir zwei Zahlen im Zweier-Komplement, dann erhalten wir auch die Summe in Zweier-Komplement-Darstellung: Beispiel 3.8 (Rechnung im Zweier-Komplement) Wir f¨ uhren die beiden Subtraktionen aus (3.3) mittels Zweier-Komplement durch: x2 01110111 x2 11101001 +y 2 +11000101 100111100
und
+y 2 +11000111 . 110110000
3.2 Ganze Zahlen
129
¨ Die Ubertr¨ age werden gestrichen, und wir erhalten die gew¨ unschten Ergebnisse. Bei der rechten Rechnung ist eine negative Zahl berechnet worden. Um dieses Ergebnis in die uns gewohnte Vorzeichen-Betrag-Darstellung umzuwandeln, m¨ ussen wir wie bei der Umwandlung einer negativen Zahl in das ZweierKomplement vorgehen und zun¨ achst ziffernweise das Komplement bilden und anschließend Eins addieren. Aus 10110000 erhalten wir zun¨ achst 01001111, und nach der Addition von Eins erhalten wir 01010000, also −80. Wir analysieren wieder exemplarisch anhand der Rechnung y − x f¨ ur Zahlen n−1 , warum das Zweier-Komplement funktioniert. Wir sehen uns 0 < x, y < 2 2 2 also y 2 + −x = y + −x an. Zun¨ achst k¨ onnen wir −x schreiben als 1
=−x
2 −x = [(2n − 1 − x) +1] −2n , also −x = 2n − x. =−x
(3.5)
2
Damit erhalten wir 2
y − x = y + −x − 2n .
(3.6) 2
Wir addieren zu y = y 2 das Zweier-Komplement von x, d. h. y + −x , und unterscheiden zwei F¨ alle: ¨ Falls es an der h¨ ochsten Stelle einen Ubertrag mit Wert 2n gibt, subtrahiert n alt ein nicht-negatives Ergebnis y − x, siehe (3.6). In diesem man 2 und erh¨ ¨ Fall kann der Ubertrag also einfach ignoriert werden. ¨ Gibt es hier keinen Ubertrag, so ist y − x negativ wegen (3.6). In diesem Fall 2 liefert y + −x bereits die Zweier-Komplementdarstellung von y − x, denn wir benutzen (3.5) einmal f¨ ur x ersetzt durch −(y − x) und einmal f¨ ur x: 2
2
y − x = 2n − (−(y − x)) = y + (2n − x) = y + −x . Damit ist klar, warum wir im Beispiel tats¨ achlich die richtige Zweier¨ Komplement-Darstellung des Ergebnisses erhalten haben. Die Ubersetzung dieses Ergebnisses in die Vorzeichen-Darstellung k¨ onnen wir jetzt auch ver2 stehen: Sie funktioniert, da bei negativem y − x wegen (3.5) gilt: y − x = n n 2 −(−(y−x)) = 2 +(y−x). Wenn wir also die Stellen des Zweier-KomplementErgebnisses negieren und dann eins addieren, berechnen wir wieder wegen (3.5) 2n − (2n + (y − x)) = −(y − x) und haben das Ergebnis nur noch mit −1 zu multiplizieren, d. h., wir m¨ ussen als Vorzeichen ein Minus setzen. ¨ Beim Einer-Komplement muss ein Ubertrag an der h¨ ochsten Stelle ber¨ ucksichtigt werden, beim Zweier-Komplement k¨ onnen Sie ihn einfach weglassen.
130
3 Zahlen und Strukturen
Wir haben zuvor gesagt, dass wir im Computer nicht mit Z, sondern mit einem Restklassenring rechnen. Jetzt haben wir gesagt, dass selten im Einer- und h¨ aufig im Zweier-Komplement gerechnet wird. Tats¨ achlich passt beides zusammen. Die Komplementdarstellungen sind immer auf eine beliebige, aber fest vorgegebene Stellenzahl n bezogen. Bei der Rechnung im Einerkomplement werden asentanten des Z2n −1 verwendie Zahlen −2n−1 + 1, . . . , 0, . . . , 2n−1 − 1 als Repr¨ det. Beim Zweier-Komplement steht wegen der Eindeutigkeit der Null eine weitere Zahl zur Verf¨ ugung, so dass die Repr¨ asentanten −2n−1 , . . . , 0, . . . , 2n−1 − 1 uhrung des Listings 3.2 wird das Zweierdes Z2n verwendet werden. Bei der Ausf¨ Komplement verwendet. 1 2 3 4 5 6 7 8 9 10 11 12
#include < stdio .h > void main ( void ) { int i, x; printf ( " Wert ? " ); scanf ( " % d " , & x ); f o r ( i = 31; i >= 0; i - -) { i f ( x & (1 1 besitzt eine bis auf die Reihenfolge der Faktoren eindeutige Darstellung als Produkt von (eventuell mehrfach auftretenden) Primzahlen: a = p1 · p2 · · · pk . Die Primzahlen p1 , . . . , pk heißen Primfaktoren. Hier sieht man, warum 1 nicht als Primzahl definiert ist: W¨ are 1 eine Primzahl, dann w¨ are die Primfaktorzerlegung nicht mehr eindeutig, man k¨ onnte eine beliebige Anzahl von Einsen hinzuf¨ ugen. Ist a bereits eine Primzahl, dann besteht das Produkt nur aus dieser Primzahl p1 = a. Wir sprechen also auch dann noch von einem Produkt, wenn es nur einen Faktor gibt. Beispiele f¨ ur Primfaktorzerlegungen sind 12 = 2 · 2 · 3, 26 = 2 · 13 und 630 = 2 · 3 · 3 · 5 · 7. Beweis Die Existenz einer Primfaktorzerlegung f¨ ur n > 1 erh¨ alt man, indem man eine erstellt: Ist n bereits eine Primzahl, dann sind wir fertig. Anderenfalls l¨ asst sich n durch eine Zahl m mit 1 < m < n teilen. Dadurch l¨ asst sich n als n ·m. Jetzt wiederholen wir Produkt kleinerer nat¨ urlicher Zahlen schreiben: n = m dieses Argument f¨ ur die kleineren Faktoren, bis wir schließlich bei Primzahlen ankommen. Den Beweis der Eindeutigkeit f¨ uhren wir als Induktion. Induktionsanfang: Offensichtlich hat n = 2 eine eindeutige Zerlegung mit dem einzigen Primfaktor 2. Induktionsannahme: Alle Zahlen 2, 3, . . . , n − 1 m¨ ogen eine eindeutige Zerlegung haben. Induktionsschluss: Mit der Induktionsannahme ist zu zeigen, dass auch die Zahlen von 2 bis n eine eindeutige Zerlegung haben, wir m¨ ussen das also nur noch f¨ ur n zeigen. Da eine Primzahl aufgrund der Definition nur sich selbst als (eindeutige) Primfaktorzerlegung hat, m¨ ussen wir nur den Fall betrachten, dass n keine Primzahl ist. Dann gibt es also mindestens zwei Primfaktoren in jeder Zerlegung von n. Weiterhin k¨ onnen zwei verschiedene Primfaktorzerlegungen von n keinen gemeinsamen Primfaktor p enthalten, da dann die kleinere Zahl n/p ebenfalls verschiedene Zerlegungen h¨ atte. Das kann aber laut Induktionsannahme nicht sein. Wir nehmen an, n h¨ atte mindestens zwei verschiedene Primfaktorzerlegungen. In einer Primfaktorzerlegung von n sei die Primzahl p und in einer anderen die nach der Vor¨ uberlegung von p zwangsl¨ aufig verschiedene Primzahl q enthalten, also n = p · a = q · b.
136
3 Zahlen und Strukturen
Da p kein Teiler von q ist, teilt nach dem Lemma von Euklid (Satz 3.13) p die Zahl b. Jetzt hat b nach Induktionsannahme eine eindeutige Primfaktorzerlegung, so dass nach dem Lemma von Euklid sogar p einen der Primfaktoren teilt und damit gleich dieser Primzahl ist. Jetzt haben aber beide Primfaktorzerlegungen den gemeinsamen Primfaktor p – Widerspruch. Hat man Primfaktorzerlegungen von n und m, so kann man ggT(n, m) direkt als Produkt der gemeinsamen Primfaktoren (unter Ber¨ ucksichtigung ihrer gemeinsamen Vielfachheit) berechnen. Ist beispielsweise n = 23 · 32 · 13 = 936 und m = 22 · 33 · 17 = 1836, dann ist ggT(n, m) = 22 · 32 = 36. Definition 3.15 (kleinstes gemeinsames Vielfaches) Das kleinste gemeinsame Vielfache kgV(n, m) zweier nat¨ urlicher Zahlen n und m ist die kleinste nat¨ urliche Zahl, die sowohl von n als auch von m geteilt wird. Das kleinste gemeinsame Vielfache kann u oßten gemeinsamen Teiler ¨ ber den gr¨ berechnet werden: n·m . kgV(n, m) = ggT(n, m) Hier werden in der Primfaktorzerlegung von n · m genau die Faktoren wegdividiert, die von n und m doppelt beigesteuert werden. F¨ ur teilerfremde Zahlen n und m gilt also kgV(n, m) = n · m. Eine direkte Konsequenz aus der Eindeutigkeit der Primfaktorzerlegung ist: Satz 3.16 (unendlich viele Primzahlen) Es gibt keine gr¨ oßte Primzahl, d. h., es gibt unendlich viele Primzahlen.
Beweis Wenn es diese Primzahl p g¨ abe und p1 , p2 , . . . , pn = p die endlich vielen Primzahlen kleiner oder gleich p sind, dann m¨ usste mit diesen Zahlen auch q := p1 · p2 · p3 · . . . · pn + 1 als Primfaktorzerlegung schreibbar sein. Durch die Addition der Eins teilt aber keine der endlich vielen Primzahlen q. are W¨ urde n¨ amlich p1 beide Seiten teilen, dann w¨ q = k·p1 = (p2 . . . pn )·p1 +1 =⇒ k·p1 −(p2 . . . pn )·p1 = 1 =⇒ (k−p2 . . . pn )·p1 = 1, aber 1 ist nicht durch p1 teilbar. Die Primfaktorzerlegung kann also nicht existieren. Da es aber stets eine Primfaktorzerlegung gibt, kann unsere Annahme nicht stimmen, es muss also unendlich viele Primzahlen geben.
3.2 Ganze Zahlen
137
Aufgabe 3.4 Wie viele aufeinander folgende Nullen hat die Dezimalzahl 80! am Ende? Hinweis: Eine Null entspricht einem Faktor 10, nutzen Sie dessen eindeutige Primfaktorzerlegung. Wir haben den erweiterten Euklid’schen Algorithmus zum Beweis der Eindeutigkeit der Primfaktorzerlegung eingesetzt. Eine weitere Anwendung des erweiterten Euklid’schen Algorithmus ist der Chinesische Restsatz, der bereits in der Antike in China bekannt war. Wir haben auf den Seiten 51 und 120 f¨ ur ganze uhrt, die Zahlen a, b und m die Notationen a ≡m b bzw. a ≡ b mod m eingef¨ bedeuten, dass a = b + km f¨ ur eine Zahl k ∈ Z ist; a und b liegen in der gleichen Restklasse des Zm , d. h., a ist kongruent zu b modulo m. Beim Restsatz sind nun L¨ osungen f¨ ur ein System von Modulo-Gleichungen (Kongruenzgleichungen) gesucht: Satz 3.17 (Chinesischer Restsatz) Seien m1 , . . . , mn teilerfremde ganze Zahlen (ungleich null). Zu jeder Wahl von ganzen Zahlen a1 , . . . , an hat das Gleichungssystem x ≡ a1 mod m1
∧
x ≡ a2 mod m2
∧ ... ∧
x ≡ an mod mn
eine L¨ osung x = a1 s1
M M M + a2 s2 + · · · + an sn , m1 m2 mn
wobei M := m1 · m2 · · · mn und s1 , s2 , . . . , sn Faktoren sind mit M M 1 = ggT mk , = rk mk + sk . mk mk otigt) exisEntsprechende Faktoren sk und rk ∈ Z (rk wird nicht weiter ben¨ tieren nach Lemma 3.12 und lassen sich mit dem erweiterten Euklid’schen Divisionsalgorithmus bestimmen. osung ist Jede andere L¨ osung hat die Darstellung x + k · M , k ∈ Z. Die L¨ also insbesondere modulo M eindeutig. Mit diesem Satz k¨ onnen z. B. Berechnungen in Verschl¨ usselungsalgorithmen beschleunigt werden, indem nicht mit der sehr großen Zahl m1 · m2 · · · mn , sondern mit den einzelnen Faktoren m1 , . . . , mn gerechnet wird, siehe Seite 171. Beweis Da die einzelnen Faktoren mk teilerfremd sind, sind auch mk und onnen, wie im Satz beschrieben, u M/mk teilerfremd, 1 ≤ k ≤ n. Damit k¨ ¨ ber den erweiterten Euklid’schen Divisionsalgorithmus Zahlen rk und sk ∈ Z berechnet werden mit M M M = rk mk + sk , d. h. 1 − rk · mk = sk . 1 = ggT mk , mk mk mk
138
3 Zahlen und Strukturen
Wir m¨ ussen also nur“ zeigen, dass ” M M M + a2 s2 + · · · + an sn x := a1 s1 m1 m2 mn tats¨ achlich alle Gleichungen erf¨ ullt. Wir sehen uns das beispielhaft an der ersten M M ist ein Vielfaches von m1 , das als Faktor Gleichung an: a2 s2 m2 + · · · + an sn m n M ur k ≥ 2 steckt. Damit ist wegen (1.11) auf Seite 51 in mk f¨ x ≡ a1 s1
(1.11) M mod m1 ⇐⇒ x ≡ a1 [1 − r1 m1 ] mod m1 ⇐⇒ x ≡ a1 mod m1 . m1
Nicht nur ist x L¨ osung der ersten Gleichung, sondern auch modulo m1 eindeutig. Entsprechend folgt aus den anderen Gleichungen, dass x modulo mk eindeutig ist. L¨ osungen m¨ ussen also gleichzeitig die Gestalt x + l1 m1 , x + l2 m2 usw. haben. Abz¨ uglich x, ist jede L¨ osung ein gemeinsames Vielfaches aller Zahlen m1 , . . . , mn . Da die mk teilerfremd sind, ist das kleinste gemeinsame Vielfache osung x sogar modulo M eindeutig aller mk ihr Produkt M . Damit ist die L¨ und zus¨ atzlich ergibt sich sofort, dass jede Zahl x + kM eine L¨ osung ist.
Beispiel 3.18 Wir l¨ osen das Gleichungssystem x ≡ 2 mod 3
∧
x ≡ 4 mod 5,
indem wir eine L¨ osung x wie im Restsatz angegeben berechnen. Im Beispiel sind also a1 = 2 und a2 = 4. Die Zahlen m1 = 3 und m2 = 5 sind teilerfremd, M = m1 · m2 = 15, M/m1 = m2 = 5, M/m2 = m1 = 3. 1 = r1 · 3 + s1 · 5,
1 = r2 · 5 + s2 · 3,
wobei wir auch ohne den Euklid’schen Algorithmus eine L¨ osung r1 = s2 = 2 und s1 = r2 = −1 ablesen. Damit ist x = a1 s1
M M + a2 s2 = 2 · (−1) · 5 + 4 · 2 · 3 = 14, m1 m2
und deshalb erhalten wir 14 ≡ 2 mod 3 und 14 ≡ 4 mod 5. Wir kommen etwas sp¨ ater noch einmal zu Primzahlen und Teiler zur¨ uck. Um zu testen, ob eine Zahl eine Primzahl ist, hilft die Wahrscheinlichkeitsrechnung, so dass wir zun¨ achst kurz Kombinatorik und dann etwas diskrete Wahrscheinlichkeitsrechnung betrachten.
3.2 Ganze Zahlen
3.2.4
139
Abz¨ ahlen: Kombinatorik
Wenn wir n verschiedene Zahlen (oder generell unterscheidbare Objekte, die wir mit nat¨ urlichen Zahlen codieren k¨ onnen) sortieren wollen, dann k¨ onnten wir einen Generate-and-Test“-Ansatz w¨ ahlen, bei dem wir alle m¨ oglichen Rei” henfolgen der Zahlen (man spricht auch von Permutationen) durchprobieren und bei jeder Reihenfolge pr¨ ufen, ob diese sortiert ist. W¨ ahrend ein solches Verfahren f¨ ur einige Problemstellungen mangels bekannter Alternativen durchaus sinnvoll kann, ist es keine gute Idee so zu sortieren. Wir u ¨ berlegen uns, wie viele verschiedene Reihenfolgen es geben kann: An der ersten Stelle der Anordnung k¨ onnen wir alle n verschiedenen Zahlen hinschreiben. F¨ ur jede Wahl der ersten Zahl stehen noch n − 1 Zahlen f¨ ur die zweite Stelle zur Verf¨ ugung. Es gibt also n · (n − 1) M¨ oglichkeiten f¨ ur die ersten beiden Stellen. F¨ ur jede dieser M¨ oglichkeiten k¨ onnen wir noch n−2 Zahlen an der dritten Stelle platzieren usw. Insgesamt gibt es also n · (n − 1) · (n − 2) · · · 2 · 1 = n! m¨ ogliche Reihenfolgen. Die Fakult¨ at aus Listing 3.2 gibt damit die Anzahl der Permutationen von n verschiedenen Zahlen an. Es erweist sich als praktisch, wenn wir den Wert von 0! als eins definieren, es gibt also eine leere Permutation. Wie wir zuvor gesehen haben, werden die Fakult¨ aten mit wachsendem n sehr schnell sehr groß, so dass der Generate-and-Test-Ansatz f¨ ur das Sortieren ungeeignet ist. Das Abz¨ ahlen von M¨ oglichkeiten ist in der Regel gar nicht einfach. Allerdings gibt es vier typische Situationen, f¨ ur die es einfach anzuwendende Formeln gibt, die in Tabelle 3.4 zusammengefasst sind. Diese wollen wir im Folgenden erl¨ autern. Tab. 3.4 Anzahlen von Kombinationen und Variationen
Reihenfolge spielt keine Rolle: Kombinationen Reihenfolge spielt eine Rolle: Variationen
mit Wiederholung n+m−1 m nm
ohne Wiederholung n n! := m (n − m)! m! n! (n − m)!
In Anlehnung an Lotto betrachten wir ein Gef¨ aß mit n verschiedenen Kugeln, die von 1 bis n nummeriert sind. Beim Lotto ist n = 49. Wir ziehen m Kugeln (0 ≤ m ≤ n, z. B. m = 6) ohne die gezogenen Kugeln zur¨ uckzulegen. Die gezogenen Kugeln legen wir in der Reihenfolge der Ziehung nebeneinander. Das ist beim Lotto anders, da werden die Zahlen sortiert. Wie viele verschiedene unterschiedliche Ergebnisse sind bei unserer Ziehung m¨ oglich? F¨ ur die erste gezogene Kugel gibt es n M¨ oglichkeiten, f¨ ur die zweite n − 1 M¨ oglichkeiten usw.
140
3 Zahlen und Strukturen
F¨ ur die m-te Kugel bleiben dann noch n − m + 1-Alternativen. Wir erhalten insgesamt ( (n( n! (n − m) m( −( 1) · · · 2 n · (n − 1) · · · · 1 = ( −( n·(n−1) · · · (n−m+1) = ( ( ( ( (n − m)! (n − m) · ( (n( − m − 1) · · · 2· 1 unterschiedliche Ergebnisse. Damit haben wir die Anzahlformel f¨ ur Variation! oglichkeiten, aus einer Menge nen ohne Wiederholung: Es gibt (n−m)! M¨ von n verschiedenen Zahlen m Zahlen auszuw¨ ahlen, wenn die Reihenfolge bei der Auswahl eine Rolle spielt und jede Zahl h¨ ochstens einmal gew¨ ahlt werden darf (daher die Bezeichnung ohne Wiederholung“). Die Reihenfolge spielt in ” unserem Beispiel eine Rolle, da die Kugeln in der Reihenfolge ihrer Wahl aufgelistet werden. Beim Lotto spielt diese Reihenfolge aber gerade keine Rolle. Wir m¨ ussen uns daf¨ ur also u ¨ berlegen, wie viele Variationen ohne Wiederholung sich nur durch die Reihenfolge unterscheiden. Da wir m Zahlen auf m! Weisen in eine Reihenfolge bringen k¨ onnen, k¨ onnen wir jeweils m! verschiedene Variationen ohne Wiederholung zusammenfassen, die sich nur in der Reihenfolge unterschein! dividiert durch m!. den. Die verbleibende Anzahl von M¨ oglichkeiten ist (n−m)! Im Gegensatz zu Variationen, bei denen die Reihenfolge eine Rolle spielt, benutzt man den Begriff Kombination, wenn die Reihenfolge in der getroffenen Auswahl keine Rolle spielt. Wir haben damit gez¨ ahlt, wie viele Kombinationen ohne Wiederholung es gibt, wenn aus einer Menge von n Zahlen m (verschiedene) gew¨ ahlt werden. Beim Lotto wird eine Kombination von 6 aus 49 Zahlen ermittelt. Insgesamt gibt es 49 · 48 · 47 · 46 · 45 · 44 49! = = 13 983 816 (49 − 6)!6! 6·5·4·3·2 verschiedene Tippreihen. n! so wichtig ist, bekommt er einen Namen und ein Weil der Term (n−m)! m! Symbol. Er heißt der Binomialkoeffizient von n u ¨ber m, wird als n u ¨ ber m gesprochen und geschrieben als n! n . (3.10) := (n − m)! m! m ur andere Werte Die Berechnung ist wohldefiniert f¨ ur n ∈ N0 und 0 ≤ m ≤ n. F¨ n := 0. von m setzen wir m Um sp¨ ater die Formel f¨ ur Kombinationen mit Wiederholung aus Tabelle 3.4 erkl¨ aren zu k¨ onnen, ben¨ otigen wir Rechenregeln f¨ ur Binomialkoeffizienten. F¨ ur n, m ∈ N0 gilt: n n = , denn f¨ ur n < m sind beide Seiten null, sonst gilt: m n−m (3.10) n n! n! n! = = = m (n − m)! · m! m! · (n − m)! (n − (n − m))! ·(n − m)! =m!
3.2 Ganze Zahlen
141
(3.10)
=
n . n−m
n n n n = = 1 und = = n. 0 n n−1 1 Die erste Gleichung folgt aus der Definition, ebenso die zweite f¨ ur n ≥ 1: n! n n! = = = n und n−1 n − (n − 1))!(n − 1)!) 1! · (n − 1)! n! n = = n. 1 (n − 1)! · 1! F¨ ur n = 0 sind nach Definition auch die beiden Binomialkoeffizienten null. Eine wichtige Beziehung, mit der man die Binomialkoeffizienten sukzessive berechnen kann, ist f¨ ur 1 ≤ m ≤ n: n n n+1 + = , (3.11) m−1 m m denn
n! n n (3.10) n! + = + m−1 m (n − (m − 1))! · (m − 1)! (n − m)! · m!
=
n! · m n! · (n−m+1) + (Hauptnenner) (n−m+1)! · (m−1)! · m (n−m)! · (n−m+1) ·m! =m!
=(n−m+1)!
n![m + (n − m + 1)] n! (n + 1) n! m + n! (n − m + 1) = = = (n − m + 1)! m! (n − m + 1)! m! (n − m + 1)! m! (n + 1)! n+1 = . = m (n − m + 1)! m! Die Formel (3.11) erm¨ oglicht die Berechnung der Binomialkoeffizienten u ¨ ber das Pascal’sche Dreieck, siehe Abbildung 3.1. Dabei erhalten wir im Inneren des Dreiecks den Wert eines Binomialkoeffizienten als Summe seiner beiden Vorg¨ anger in der Zeile dar¨ uber. So kann ein Binomialkoeffizient mit Algorithmus 3.3 rekursiv berechnet werden. Außerdem erkennen wir daran, dass alle Binomialkoeffizienten nat¨ urliche Zahlen sind. An der Definition als Bruch von Fakult¨ aten ist das nicht direkt zu erkennen. Aufgabe 3.5 Bei der Ausf¨ uhrung von Algorithmus 3.3 werden Binomialkoeffizienten mehrfach berechnet. Vollziehen Sie anhand eines Beispiels alle Funktionsaufrufe nach. Wie kann der Algorithmus hinsichtlich seiner Laufzeit optimiert werden?
142
3 Zahlen und Strukturen
0 0
1 0
2 0
3 0
4 0
=1
=1 @ @ 4 1
=1
@ @ 3 1
=4
=1
@ @ 2 1
=1 @ @ 1 1
=2 @ @ 3
=3
2
@ @ 4 2
=6
=1 @ @ 2 2
=3 @ @ 4 3
=1 @ @ 3 3
=4
=1 @ @ 4 4
=1
Abb. 3.1 Pascal’sches Dreieck
Aufgabe 3.6 Wir betrachten n Geraden in einer Ebene, wobei sich nie mehr als zwei Geraden in einem Punkt schneiden und keine Geraden parallel verlaufen. Zeigen Sie, dass es n2 Schnittpunkte gibt. Wir kehren zur¨ uck zu Tabelle 3.4 und sehen uns die Formeln f¨ ur die Auswahlen mit Wiederholung an. Bei Variationen mit Wiederholung ziehen wir aus den n nummerierten Kugeln m-mal eine Kugel, schreiben ihre Nummer in einer Liste auf, so dass die Reihenfolge wichtig ist (daher: Variationen) und legen Sie dann wieder in das Gef¨ aß zur¨ uck. Durch das Zur¨ ucklegen kann die gleiche Kugel mehrfach gezogen werden, wir bekommen also Wiederholungen. Bei jedem Zug haben wir alle n Kugel zur Verf¨ ugung. F¨ ur jede der n M¨ oglichkeiten des ersten Zugs gibt es wieder n M¨ oglichkeiten f¨ ur den zweiten, bei m = 2 haben wir also n · n = n2 Variationen mit Wiederholung. Allgemein sind es nm . Wir w¨ ahlen m = 8-mal eine Ziffer 0 oder 1 (d. h. n = 2) mit Wiederholung und unter Beachtung der Reihenfolge. Das Ergebnis l¨ asst sich als ein Byte schrei8 onnen u ben. Es gibt 2 = 256 verschiedene Ergebnisse, damit k¨ ¨ ber ein Byte die nat¨ urlichen Zahlen von 0 bis 255 codiert werden. Beim Spiel 77, das zusammen mit Lotto angeboten wird, sind die n = 10 Kugeln mit den Ziffern 0 bis 9 beschriftet. Hier wird siebenmal mit Zur¨ ucklegen unter Beachtung der Reihenfolge gezogen, um die Gewinnnummer zu ermitteln. Es gibt also 107 Nummern.
Algorithmus 3.3 Rekursive Berechnung der Binomialkoeffizienten procedure binom(n, m) if (m > n) ∨ (n < 0) ∨ (m < 0) then return 0 if m = 0 then return 1 return binom(n − 1, m − 1) + binom(n − 1, m)
3.2 Ganze Zahlen
143
Aufgabe 3.7 In Kapitel 1.3.1 haben wir endliche Automaten kennen gelernt. Wie viele verschiedene endliche, deterministische Automaten ¨ uber dem Alphabet Σ = {0,1,2} kann man erstellen, wenn jeder Automat genau vier Zust¨ ande bzw. h¨ ochstens vier Zust¨ ande hat? Schließlich sehen wir uns den Eintrag f¨ ur Kombinationen mit Wiederholung in Tabelle 3.4 an. Wir ziehen wieder aus dem Gef¨ aß mit n von 1 bis n nummerierten Kugeln m-mal, wobei die Reihenfolge der ermittelten Zahlen wie beim Lotto keine Rolle spielt. Jetzt legen wir aber nach jedem Zug die Kugel wieder zur¨ uck, so dass Wiederholungen m¨ oglich sind. Mit m = 8, n = 2 und den mit 0 und 1 beschrifteten Kugeln fragen wir uns, wie viele verschiedene Anzahlen von Einsen in einem Byte vorliegen k¨ onnen. Die Anzahlformel aus der Tabelle liefert hier 9! n+m−1 2+8−1 = = = 9. m 8 1! · 8! Das Ergebnis stimmt offensichtlich, da die Anzahlen 0 bis 8 auftreten k¨ onnen. Die Formel f¨ ur Kombinationen mit Wiederholung ist etwas schwieriger zu verstehen als ihre drei Geschwister. Aus der Formel f¨ ur Variationen ohne Wiederholung haben wir die Formel f¨ ur Kombinationen ohne Wiederholung gewonnen, indem wir durch die Anzahl der Permutationen von m verschiedenen Zahlen (also durch m!) dividiert haben. Dadurch haben wir uns unabh¨ angig von der Reihenfolge gemacht. Leider k¨ onnen wir so einfach nicht von Variationen mit Wiederholung auf Variationen ohne Wiederholung schließen. Denn jetzt gibt es weniger als m! verschiedene Permutationen, da Zahlen mehrfach vorkommen. Wenn wir in (1, 2, 1) beispielsweise die erste und dritte Position vertauschen, entsteht keine neue Permutation. Es gibt nicht 3! = 6 sondern nur 3 verschiedene Permutationen. F¨ ur m = 0 gibt es eine“ M¨ oglichkeit, nichts auszuw¨ ahlen, hier stimmt die ” Formel. Wir beweisen sie daher mittels vollst¨ andiger Induktion f¨ ur n ≥ 1 und m ≥ 1. Der Trick dabei ist, dass wir weder einzeln nach n noch nach m eine Induktion machen, sondern nach k := n+m. Wir beweisen also mittels Induktion f¨ ur k ≥ 2 die Aussage A(k), dass die Formel f¨ ur alle Werte von n und m mit n + m = k gilt. Induktionsanfang f¨ ur k = 2, also n = 1 und m = 1: Es gibt eine M¨ oglichkeit, eine Kugel aus einem Gef¨ aß mit einer Kugel zu w¨ ahlen, das n+m−1 1 = 1 =1u stimmt mit ¨ berein. m Induktionsannahme: F¨ ur ein beliebiges, festes k ∈ N gelte die Formel f¨ ur alle n und m mit n + m ≤ k.
144
3 Zahlen und Strukturen
Induktionsschluss: Wir m¨ ussen zeigen, dass die Formel f¨ ur alle Werte von n und m mit n + m ≤ k + 1 gilt. Nach Induktionsannahme m¨ ussen wir also nur f¨ ur Werte von n und m mit n + m = k + 1 etwas beweisen. – Ist n = 1, so besteht die Kombination aus m-mal der einen Kugel, es gibt m = m = 1. eine M¨ oglichkeit. Die Formel stimmt also: n+m−1 m – Ist m = 1, so gibt es n M¨ oglichkeiten, eine Kugel zu ziehen, das passt: n+m−1 n = = n. m 1 – Seien also n > 1 und m > 1. In diesem Fall zerlegen wir die Menge aller M¨ oglichkeiten in zwei disjunkte Teilmengen. Die erste besteht aus den Kombinationen mit Wiederholung, in denen die Kugel mit Nummer 1 vorkommt. Die zweite bestehe aus allen Kombinationen mit Wiederholung ohne 1. Wenn wir aus jeder Kombination der ersten Menge genau eine 1 herausnehmen (die restlichen bleiben enthalten), erhalten wir alle Kombinationen mit Wiederholung von m − 1 Zahlen aus n und damit – weil St¨ uck. n + m − 1 = k ist – nach Induktionsannahme n+m−1−1 m−1 Die zweite Menge besteht aus allen Kombinationen mit Wiederholung von m Zahlen aus n − 1 (da die Eins nicht vorkommt). Wegen n − 1 + m = k ergibt sich die Gr¨ oße dieser Menge ebenfalls aus der Induktionsannahme: n−1+m−1 . m Mit (3.11) erhalten wir die gew¨ unschte Anzahl als Summe: n+m−1−1 n−1+m−1 n+m−1 + = . m−1 m m Aufgabe 3.8 Wie viele W¨ orter kann man ¨ uber dem Alphabet {a, b, c, . . . , z} bilden, wenn a) jedes Wort aus genau f¨ unf Buchstaben besteht? b) jedes Wort aus h¨ ochstens f¨ unf Buchstaben besteht? c) jedes Wort aus genau f¨ unf Buchstaben besteht, aber keine Buchstaben mehrfach vorkommen d¨ urfen? Aufgabe 3.9 Eine Kreisringscheibe wird in sechs gleichgroße St¨ ucke unterteilt. Die Vorderseiten werden eingef¨ arbt: Drei St¨ ucke werden rot, zwei blau und eins gr¨ un. Die St¨ ucke werden mit der farbigen Seite nach oben auf einen Tisch gelegt. Auf wie viele verschiedene Arten kann der Ring durch Verschieben der Teile zusammengesetzt werden? Zwei Ringe heißen verschieden, wenn ihre Farbmuster durch Drehen nicht in Einklang gebracht werden k¨ onnen.
3.2 Ganze Zahlen
145
Eine direkte Anwendung der Binomialkoeffizienten ist die binomische Formel (vgl. Abbildung 3.2), die Sie zumindest f¨ ur Spezialf¨ alle aus der Schule kennen. Vielleicht erinnern Sie sich an 2 2 2 0 2 1 1 2 0 2 2 2−k k 2 2 2 a b + a b + a b = a b , (a + b) = a + 2ab + b = 0 1 2 k k=0
wobei wir a2 + 2ab + b2 mit der Summe wesentlich komplizierter geschrieben haben. In dieser Darstellung gilt die Formel aber auch dann, wenn wir 2 durch otigen wir einen beliebigen Exponenten n ∈ N ersetzen. Und in dieser Form ben¨ sie anschließend auch in Beweisen.
a2
ab
ab
b
a a+b
2
b
Abb. 3.2 Die binomische Formel (a + b)2 = a2 + 2ab+b2 = a2 +ab+ab+b2 stellt den Fl¨ acheninhalt des Quadrats mit Kantenl¨ ange a + b u achen ¨ber vier Teilfl¨ dar.
Satz 3.19 (binomischer Satz/binomische Formel) n F¨ ur n ∈ N gilt: n n−k k n (a + b) = a b . k
(3.12)
k=0
Beweis Induktionsanfang f¨ ur n = 1: 1 1 1−k k 1 1 a b = a+ b = a + b. k 0 1 k=0
Induktionsannahme: F¨ ur ein beliebiges, festes n ∈ N gelte (3.12). n+1 n+1−k k Induktionsschluss: Zu zeigen ist (a + b)n+1 = n+1 a b . k=0 k (a + b)
=
=
=
n+1
= (a + b)(a + b)
n Induktionsannahme
=
n n n−k k (a + b) a b k
n n n n−k k n n−k k a· a b +b· a b k k k=0 k=0 n n n n+1−k k n n−k k+1 a b + a b k k k=0 k=0 n+1 n n n+1−k k n an+1−k bk a b + k k−1 k=0
k=1
k=0
(Indextransformation, vgl. S. 28)
146
3 Zahlen und Strukturen
n n n n n+1 n n+1 n+1−k k + a b + b a + k k−1 n 0
=
k=1
(3.11)
=
=
(Ein Summand der ersten und zweiten Summe wurde abgetrennt.) n n n + 1 n+1−k k n n+1 n+1 a + a b + b 0 k n k=1 =1 =1 n n+1 n + 1 n+1−k k n+1 n+1 0 a b + a b + a0 bn+1 0 k n + 1 k=1 =1 =1 =1
=
n+1 k=0
=1
n + 1 n+1−k k a b (als eine Summe geschrieben). k
Bereits in der einfachsten Fassung bereitet die binomische Formel in Klausuur beliebige Werte von a und ren h¨ aufig Probleme: Es gilt nicht (a+b)2 = a2 +b2 f¨ b. W¨ ahlen wir beispielsweise a = b = 1, so wird die Formel zu 4 = 2. Potenziert man eine Summe, so entstehen gemischte Terme! Entweder Sie multiplizieren aus oder Sie verwenden die binomische Formel. Aufgabe 3.10 n n Zeigen Sie mit der binomischen Formel, dass n k=0 k = 2 gilt.
3.3
Wahrscheinlichkeiten und Primzahltests
3.3.1
Diskrete Wahrscheinlichkeitsrechnung
Bei einem Zufallsexperiment sind nicht alle Faktoren bekannt oder bestimmbar, die sich auf das Ergebnis auswirken. Unter Zufall verstehen wir den Einfluss dieser Faktoren. Beim W¨ urfeln sind das beispielsweise die genaue Bewegung und die Geschwindigkeit, die Oberfl¨ achenstruktur des W¨ urfels und des Tisches, Einfluss von Luftbewegungen usw. Wir haben zuvor bereits die Kombinationen ohne Wiederholung beim Lotto verschiedene Ausg¨ ange des Experiments 6 aus 49. Die gez¨ ahlt. Es gibt 49 6 Wahrscheinlichkeit, dass genau eine zuvor ausgew¨ ahlte Kombination gezogen wird – also die Wahrscheinlichkeit f¨ ur sechs Richtige bei einer Tippreihe, ist = anschaulich gleich der relativen H¨ aufigkeit dieses Ergebnisses, also 1/ 49 6 1/13 983 816 ≈ 0. Wenn Sie zehn verschiedene Tipps abgegeben haben, dann . erhalten wir u aufigkeit die Erfolgswahrscheinlichkeit 10/ 49 ¨ ber die relative H¨ 6 49 Haben Sie sogar 6 verschiedene Tipps abgegeben, dann gewinnen Sie mit der
3.3 Wahrscheinlichkeiten und Primzahltests
147
49 = 100%. Allerdings lohnt sich dieses / 6 = 1 = 100 Wahrscheinlichkeit 49 100 6 Vorgehen nicht, da nur die H¨ alfte der Eins¨ atze als Gewinn ausgesch¨ uttet wird. Betrachten wir ein einfacheres Beispiel, n¨ amlich eine Urne mit 20 weißen und 30 schwarzen Kugeln. Die Wahrscheinlichkeit, eine weiße Kugel zu ziehen, ist gleich der relativen H¨ aufigkeit der weißen Kugeln bezogen auf die Gesamtzahl der Kugeln, also 20/(20 + 30) = 2/5 bzw. 40 %. Wissen Sie nicht, wie viele weiße und schwarze Kugeln in der Urne liegen, k¨ onnen Sie n-mal mit Zur¨ ucklegen ziehen und dann die relative H¨ aufigkeit der Ergebnisse weiß und schwarz als Wahrscheinlichkeit f¨ ur das Ziehen von weiß“ oder schwarz“ auffassen. Aller” ” dings k¨ onnen Sie bei einer erneuten Messung zu einem anderen Wert gelangen. F¨ ur eine Definition ist dies also ungeeignet. Allerdings vermuten wir, dass mit wachsendem n die relative H¨ aufigkeit immer n¨ aher an der tats¨ achlichen Wahrscheinlichkeit ist. Die mathematische Definition der Wahrscheinlichkeit bildet dies nach. Die Durchf¨ uhrung eines Zufallsexperiments heißt ein Versuch, sein Ergebnis ein Elementarereignis. Die Menge aller m¨ oglichen Versuchsausg¨ ange, also aller Elementarereignisse, heißt Grundgesamtheit oder Elementarereignisraum und wird u otigen in diesem ¨ blicherweise mit Ω bezeichnet. Wir ben¨ Buch ausschließlich Grundgesamtheiten mit endlich vielen Elementarereignissen, so dass wir auf die etwas schwieriger zu handhabenden unendlichen Grundgesamtheiten auch hier nicht eingehen. Die Grundgesamtheit beim einmaligen W¨ urfeln k¨ onnen wir mit Ω := {1, 2, 3, 4, 5, 6} modellieren. Das Ereignis eines geraden Wurfs ist dann G := {2, 4, 6}, das Ereignis eines ungeraden Wurfs ist U := {1, 3, 5}. Ein Ereignis E ist eine Teilmenge der Grundgesamtheit Ω, E ⊂ Ω. Mit einem Ereignis fassen wir Elementarereignisse zusammen. Wir sagen, dass bei einem Experiment ein Ereignis E genau dann eingetreten ist, wenn ein Elementarereignis beobachtet wird, das Element von E ist. Als Ereignis sind auch ∅ und Ω zugelassen. Da in ∅ keine Elementarereignisse liegen, kann ∅ auch niemals eintreten, ∅ heißt das unm¨ ogliche Ereignis. Da in Ω alle Elementarereignisse sind, tritt das Ereignis Ω bei jedem Experiment ein, es ist das sichere Ereignis. Die Wahrscheinlichkeit wird nun u ¨ber die zentralen Eigenschaften der relativen H¨ aufigkeit definiert: Definition 3.20 (Axiome der Wahrscheinlichkeit) Sei P eine Abbildung, die jedem Ereignis eine Zahl zwischen 0 und 1 zuordnet und die beide folgenden Axiome erf¨ ullt: Die Wahrscheinlichkeit des sicheren Ereignisses Ω ist auf eins normiert (also auf 100 100 = 100 %): P (Ω) = 1.
148
3 Zahlen und Strukturen
F¨ ur je zwei disjunkte (elementfremde) Ereignisse E1 und E2 gilt die Additivit¨ at: P (E1 ∪ E2 ) = P (E1 ) + P (E2 ). Die Abbildung P heißt Wahrscheinlichkeitsmaß. Vereinigt man zwei disjunkte Ereignisse, so tritt das dabei entstehende Ereignis ein, wenn entweder das eine oder das andere Ereignis eintritt. Da sie disjunkt sind, k¨ onnen sie nicht gleichzeitig eintreten. Die relative H¨ aufigkeit der Elementarereignisse des vereinigten Ereignisses ist damit gleich der Summe der relativen H¨ aufigkeiten zu beiden einzelnen Ereignissen. Dies ist mit dem Axiom zur Additivit¨ at nachempfunden, das durch iterierte Anwendung auf die Vereinigung von n paarweise disjunkten Ereignissen E1 , . . . , En ausgedehnt werden kann: P (E1 ∪ E2 ∪ · · · ∪ En ) = P (E1 ) + P (E2 ) + · · · + P (En ). Beim einmaligen W¨ urfeln mit einem ungezinkten W¨ urfel gilt: P ({1}) = P ({2}) = P ({3}) = P ({4}) = P ({5}) = P ({6}) =
1 . 6
Die Wahrscheinlichkeit eines geraden Wurfs ist P ({2, 4, 6}) = P ({2})+P ({4})+ P ({6}) = 36 = 12 , die eines ungeraden Wurfs ist ebenfalls P ({1, 3, 5}) = 12 . Satz 3.21 (Rechenregeln f¨ ur ein Wahrscheinlichkeitsmaß) F¨ ur ein Wahrscheinlichkeitsmaß P sowie Ereignisse A, B und das zu A ent/ A} gelten die Rechenregeln gegengesetzte Ereignis A := CΩ A = {ω ∈ Ω : ω ∈ P (A) = 1 − P (A),
P (A ∪ B) = P (A) + P (B) − P (A ∩ B).
Beweis Die erste Gleichung ergibt sich mit der Normierung und der Additivit¨ at aus Definition 4.4 so: 1 = P (Ω) = P (A ∪ A) = P (A) + P (A). Die zweite Gleichung folgt ebenfalls aus der Additivit¨ at. Dazu muss A ∪ B in disjunkte Mengen zerlegt werden: A ∪ B = (A \ B) ∪ (B \ A) ∪ (A ∩ B): P (A ∪ B) = P (A \ B) + P (B \ A) + P (A ∩ B) = [P (A \ B) + P (A ∩ B)] + [P (B \ A) + P (A ∩ B)] − P (A ∩ B) = P (A) + P (B) − P (A ∩ B).
3.3 Wahrscheinlichkeiten und Primzahltests
149
Die Wahrscheinlichkeit eines Elementarereignisses ω ∈ Ω ist u ¨ ber P ({ω}) definiert. Damit ist P bereits vollst¨ andig u ¨ ber diese Elementarwahrscheinlichkeiten erkl¨ art: P ({ω}). (3.13) P (E) = ω∈E
Besonders wichtig ist der Fall, bei dem (wie in den bisherigen Beispielen) alle Elementarwahrscheinlichkeiten gleich sind. Hier sprechen wir von einem Laplace-Experiment. Satz 3.22 (Laplace-Experiment) Die Grundgesamtheit Ω bestehe aus n Elementarereignissen und alle Elementarereignisse m¨ ogen die gleiche Wahrscheinlichkeit haben. Dann gilt f¨ ur . jedes Ereignis E mit m Elementarereignissen: P (E) = m n Beweis Sei Ω = {ω1 , ω2 , . . . , ωn } und p die Wahrscheinlichkeit jedes Elementarereignisses: n n {ωk } = p = n · p. 1 = P (Ω) = P Damit ist p =
1 n
und P (E) =
k=1 1 ω∈E n
k=1
=
m n.
Um die Wahrscheinlichkeit eines Ereignisses bei Laplace-Experimenten zu berechnen, muss man die Anzahl der Elemente des Ereignisses bestimmen – hier hilft das im vorangehenden Abschnitt u ¨ ber Kombinatorik Gelernte. Von der Modellierung eines Zufallsexperiments h¨ angt es ab, ob dieses ein Laplace-Experiment ist oder nicht. Wir betrachten zweimaliges W¨ urfeln. W¨ ahlen wir Ω := {(j, k) : j, k ∈ {1, 2, . . . , 6}}, wobei wir an der ersten Stelle das Ergebnis des ersten Wurfs und an der zweiten Stelle das Resultat des zweiten Wurfs notieren, dann sind alle Elementarereignisse gleich wahrscheinlich, wir haben ein Laplace-Experiment: P ({(j, k)}) = 1 1 1 urfe merken, in|Ω| = 62 = 36 . Wenn wir uns aber nicht die Reihenfolge der W¨ dem wir zu jeder Ziffer nur aufschreiben, ob sie null-, ein- oder zweimal gefallen ist, dann sind die Elementarwahrscheinlichkeiten nicht mehr gleich: Ω := {(k1 , k2 , k3 , k4 , k5 , k6 ) : k1 , k2 , . . . , k6 ∈ {0, 1, 2} und k1 +k2 +· · ·+k6 = 2}. 2 Beispielsweise ist P ({(1, 1, 0, 0, 0, 0)}) = 36 die Wahrscheinlichkeit, dass eine 1 und eine 2 gew¨ urfelt wird. Denn das Elementarereignis (1, 1, 0, 0, 0, 0) wird beobachtet, wenn zuerst 1 und dann 2 oder erst 2 und dann 1 gew¨ urfelt wird. Das entspricht zwei Elementarereignissen unseres ersten Modells, so dass wir 1 erhalten. Dagegen ist die Wahrscheinlichkeit, dass die Wahrscheinlichkeit 2 · 36
150
3 Zahlen und Strukturen
1 , denn hier zwei Einsen gew¨ urfelt werden, eine andere: P ({(2, 0, 0, 0, 0, 0)}) = 36 gibt es nur eine M¨ oglichkeit, diese zu werfen. Wir k¨ onnten auch ein weiteres Modell w¨ ahlen, bei dem wir nur die Summe der Augenzahlen aus beiden W¨ urfen notieren: Ω := {2, 3, 4, . . . , 12}. 1 2 , P ({3}) = P ({11}) = 36 , Hier erhalten wir ebenfalls P ({2}) = P ({12}) = 36 3 ahlen, auf wie viele Weisen eine P ({4}) = P ({10}) = 36 usw., indem wir z¨ Augensumme zustande kommen kann (vgl. auch (3.16) weiter unten). Berechnen wir eine Wahrscheinlichkeit f¨ ur eine eingeschr¨ ankte Grundgesamtheit, so sprechen wir von einer bedingten Wahrscheinlichkeit. Die Wahrscheinlichkeit, dass eine Zahl aus E = {1, 2, 3} gew¨ urfelt wird, ist 36 = 12 . Wissen wir aber bereits, dass nur gerade Zahlen gew¨ urfelt werden, dann sinkt 1 die Wahrscheinlichkeit auf 3 . Denn die Grundgesamtheit ist dann nicht mehr Ω = {1, 2, 3, 4, 5, 6}, sondern das Ereignis F = {2, 4, 6} eines geraden Wurfs. Mit P (E|F ) bezeichnen wir die Wahrscheinlichkeit, dass E eintritt, wenn als Nebenbedingung bekannt ist, dass F eintritt. Bei einem Laplace-Experiment ist
P (E|F ) =
Anzahl der Elemente von E ∩ F . Anzahl der Elemente von F
Dividieren wir Z¨ ahler und Nenner durch die Anzahl der Elemente von Ω, so erhalten wir P (E ∩ F ) . (3.14) P (E|F ) = P (F ) Dies ist eine Gleichung, die f¨ ur beliebige Wahrscheinlichkeitsmaße sinnvoll ist. Zwei Ereignisse E und F heißen stochastisch unabh¨ angig genau dann, wenn das Eintreten eines der Ereignisse keinen Einfluss auf die Eintrittswahrscheinlichkeit des anderen Ereignisses hat, wenn also P (E|F ) = P (E) bzw. P (F |E) = P (F ) ist. L¨ osen wir die bedingte Wahrscheinlichkeit auf, dann ist P (E) = P (E|F ) =
P (E ∩ F ) ⇐⇒ P (E ∩ F ) = P (E) · P (F ). P (F )
(3.15)
Stochastische Unabh¨ angigkeit von Ereignissen bedeutet also, dass die Wahrscheinlichkeit des gemeinsamen Eintretens gleich dem Produkt der Einzelwahrscheinlichkeiten ist. Aufgabe 3.11 Eine Familie hat zwei Kinder. Bei einem Besuch kommt zuf¨ allig ein Junge in den Raum, wobei die Wahrscheinlichkeit, welches der beiden Kinder den Raum betritt, gleich sei. Die Wahrscheinlichkeit, dass auch das zweite Kind ein Junge ist, wenn Jungen und M¨ adchen mit der gleichen Wahrscheinlichkeit 12 geboren werden und die Geburten stochastisch unabh¨ angig sind, ist 12 . Welcher Fehler steckt daher im folgenden Modell: Mit Ω := {JJ, M M, JM, M J } m¨ oge der erste Buchstabe der Elementarereignisse das Geschlecht des Erstgeborenen
3.3 Wahrscheinlichkeiten und Primzahltests
151
angeben. Jedes Elementarereignis hat die Wahrscheinlichkeit 14 . Das Ereignis, dass mindestens ein Kind ein Junge ist (was ja beobachtet wird), ist damit E := {JJ, JM, M J} mit P (E) = 34 . Die Wahrscheinlichkeit, dass unter dieser Nebenbedingung beide Kinder Jungen sind, ist P ({JJ}|E) =
P ({JJ}) P ({JJ} ∩ E) = = P (E) P (E)
1 4 3 4
=
1 1 = . 3 2
Die Grundgesamtheit Ω kann aus irgendwelchen Objekten bestehen. Wir haben bereits Zahlen, Paare und Sechstupel f¨ ur die Modellierung benutzt. Um aussagekr¨ aftige Kennzahlen berechnen zu k¨ onnen, w¨ are es sehr hilfreich, wenn die Elementarereignisse Zahlen w¨ aren. Daher wurden Zufallsvariablen eingef¨ uhrt. Das sind Abbildungen, die den Elementarereignissen Zahlen zuordnen. Sie werden u ¨ blicher Weise mit Großbuchstaben wie X oder Y bezeichnet, die an Variablen erinnern. Ihr Wert h¨ angt vom Ausgang des Experiments ab und ist in diesem Sinne zuf¨ allig. Sind wir beim zweimaligen W¨ urfeln beispielsweise an der Augensumme interessiert, so k¨ onnen wir auf Ω = {(j, k) : j, k ∈ {1, 2, . . . , 6}} die Zufallsvariable X : Ω → {2, 3, . . . , 12} definieren u onnen wir auch ¨ ber X((j, k)) := j + k. Jetzt k¨ sagen, mit welcher Wahrscheinlichkeit die Zufallsvariable einen Wert annimmt und verwenden daf¨ ur die Schreibweise P (X = Wert): 1 = P ({6, 6}) = P (X = 12), 36 2 = P ({(5, 6), (6, 5)}) = P (X = 11),(3.16) P (X = 3) = P ({(1, 2), (2, 1)}) = 36 3 = P (X = 10) usw. P (X = 4) = P ({(1, 3), (2, 2), (3, 1)}) = 36 P (X = 2) = P ({(1, 1)}) =
Allgemein gilt: P (X = x) = P ({ω ∈ Ω : X(ω) = x}).
(3.17)
Wir berechnen nun den Wert, den die Zufallsvariable im Mittel“ annimmt. ” Das ist der Erwartungswert E(X) der Zufallsvariable X: Wir summieren u ¨ ber alle Zahlen des Wertebereichs W (X) gewichtet mit ihrer Eintrittswahrscheinlichkeit und erhalten x · P (X = x). (3.18) E(X) := x∈W (X)
Im Beispiel ergibt sich 2 3 4 5 6 1 +3· +4· +5· +6· +7· 36 36 36 36 36 36 4 3 2 1 5 +8 · +9· + 10 · + 11 · + 12 · = 7. 36 36 36 36 36
E(X) = 2 ·
152
3 Zahlen und Strukturen
Werden im Gegensatz zu diesem Beispiel alle n Werte der Zufallsvariable mit der gleichen Wahrscheinlichkeit n1 angenommen, dann ist der Erwartungswert das arithmetische Mittel der Werte, bei dem alle Werte addiert und dann durch ihre Anzahl geteilt werden: E(X) =
1 n
x.
x∈W (X)
Wollen wir die durchschnittliche Laufzeit eines Algorithmus (Average-Case) f¨ ur eine (endliche) Menge m¨ oglicher Eingaben angeben, dann m¨ ussen wir die Laufzeiten zu allen Eingaben addieren und durch die Anzahl der Eingaben teilen. Bei gleicher Wahrscheinlichkeit der Eingaben ist dies auch die erwartete Laufzeit. Das arithmetische Mittel der Zahlen 1, 2, 2, 2, 3, 3 und 4 ist 1 3 2 1 1+2+2+2+3+3+4 =1· +2· +3· +4· . 6 6 6 6 6 Die Zahlen werden also wie in der Definition des Erwartungswerts summiert und mit relativen H¨ aufigkeiten (statt der Wahrscheinlichkeiten) gewichtet. Der ¨ Erwartungswert ist die Ubertragung des arithmetischen Mittels in die Wahrscheinlichkeitsrechnung. Wir k¨ onnen den Erwartungswert auch als Summe u ¨ ber die Elementarereignisse darstellen:
(3.18)
E(X) =
(3.17)
x · P (X = x) =
x∈W (X) (3.13)
=
x∈W (X)
=
⎡
x·⎣
x · P ({ω ∈ Ω : X(ω) = x})
x∈W (X)
⎤
P ({ω})⎦ =
ω∈Ω:X(ω)=x
x∈W (X) ω∈Ω:X(ω)=x
X(ω) ·P ({ω}) =x
X(ω) · P ({ω}),
ω∈Ω
da Ω = x∈W (X) {ω ∈ Ω : X(ω) = x}. Diese Darstellung hilft uns beim Beweis einer wichtigen Eigenschaft: der Linearit¨ at des Erwartungswerts, die wir z. B. f¨ ur die Analyse des Quicksort in Kapitel 4.5 ben¨ otigen. Auf einem Wahrscheinlichkeitsraum k¨ onnen ganz unterschiedliche Zufallsvariablen definiert sein, beispielsweise kann eine Variable das Ergebnis des ersten Wurfs beim zweimaligen W¨ urfeln angeben, eine andere das Ergebnis des zweiten Wurfs und eine dritte wie oben die Augensumme. Sind X und Y Zufallsvariablen auf Ω sowie c und d Zahlen. Dann ist auch c · X + d · Y eine Zufallsvariable, die f¨ ur ω ∈ Ω den Wert c · X(ω) + d · Y (ω) annimmt: (3.19)
E(c · X + d · Y ) = =c·
ω∈Ω
[c · X(ω) + d · Y (ω)] · P ({ω})
ω∈Ω
X(ω) · P ({ω}) + d·
ω∈Ω
Y (ω) · P ({ω}) = c · E(X) + d · E(Y ). (3.19)
3.3 Wahrscheinlichkeiten und Primzahltests
153
Wie weit die Werte um den Erwartungswert streuen, misst man mit der Varianz. Dabei quadrieren wir die Abst¨ ande der Werte zum Erwartungswert, gewichten mit den zugeh¨ origen Eintrittswahrscheinlichkeiten und summieren: (x − E(X))2 · P (X = x). Var(X) = E (X − E(X))2 = x∈W (X)
Durch das Quadrieren werden die Abst¨ ande nicht-negativ, so dass wir beim Summieren keine Ausl¨ oschungen bekommen und tats¨ achlich alle Abweichungen eingehen. Außerdem werden kleine Abweichungen zwischen −1 und 1 dadurch noch kleiner, aber gr¨ oßere Abweichungen f¨ uhren zu gr¨ oßeren Zahlen und werden betont. Im Beispiel ergibt sich: 1 2 3 4 5 + (3 − 7)2 + (4 − 7)2 + (5 − 7)2 + (6 − 7)2 36 36 36 36 36 2 6 2 5 2 4 2 3 + (8 − 7) + (9 − 7) + (10 − 7) +(7 − 7) 36 36 36 36 35 2 2 2 1 + (12 − 7) = . +(11 − 7) 36 36 6
Var(X) = (2 − 7)2
Was bedeutet nun diese Zahl? Die Antwort gibt: Satz 3.23 (Ungleichung von Tschebycheff) Die Wahrscheinlichkeit, dass X einen Wert annimmt, der mehr als ein beliebiges, fest gew¨ ahltes ε > 0 vom Erwartungswert abweicht, ist h¨ ochstens Var(X) : 2 ε P (|X − E(X)| > ε) = P ({ω ∈ Ω : |X(ω) − E(X)| > ε}) ≤
Var(X) . ε2
Je kleiner die Varianz ist, desto unwahrscheinlicher ist die Beobachtung einer großen Abweichung – und die Wahrscheinlichkeit f¨ ur eine solche Beobachtung l¨ asst sich mit der Varianz ganz grob absch¨ atzen. Der Beweis der TschebycheffUngleichung ist erstaunlich einfach, wenn wir die Darstellung (3.19) des Erwartungswerts verwenden: Beweis Das Ereignis P (|X−E(X)| > ε), dass X einen Wert liefert, der weiter als ε vom Erwartungswert entfernt ist, lautet Aε := {ω ∈ Ω : |X(ω) − E(X)| > ε}.
(3.19) Var(X) = E (X − E(X))2 = (X(ω) − E(X))2 P ({ω}) weniger Summanden
≥
ω∈Ω
(X(ω) − E(X))2 P ({ω})
ω∈Aε Definition Aε
≥
ω∈Aε
ε2 P ({ω}) = ε2 P (Aε ) = ε2 P (|X − E(X)| > ε).
154
3 Zahlen und Strukturen
Wir f¨ uhren ein Zufallsexperiment n-mal unabh¨ angig voneinander durch und erhalten so n Werte x1 , . . . , xn einer Zufallsvariablen X. Mit wachsendem n n¨ ahert sich das arithmetische Mittel n1 n k=1 xk in der Regel immer mehr dem Erwartungswert E(X) an (das ist das Gesetz der großen Zahlen). Denn wenn wir auch das arithmetische Mittel als Zufallsvariable auffassen, dann hat sie den gleichen Erwartungswert wie die Zufallsvariable X und ihre Varianz strebt mit wachsendem n gegen null (wobei wir das hier nicht zeigen, der Beweis ist aber nicht schwierig). Im Sinne der Tschebycheff-Ungleichung werden dann Abweichungen vom Erwartungswert immer unwahrscheinlicher. Daher ist der Erwartungswert tats¨ achlich der im Mittel zu erwartende Wert der Zufallsvariablen. Wenn wir also sehr oft mit zwei W¨ urfeln eine Augensumme ermitteln und zum arithmetischen Mittel dieser Augensummen u ¨ bergehen, dann werden wir ungef¨ ahr den Wert 7 erhalten. Aufgabe 3.12 Berechnen Sie Erwartungswert und Varianz f¨ ur eine Zufallsvariable X mit P (X = −2) = 0,1, P (X = −1) = 0,2, P (X = 0) = 0,3, P (X = 2) = 0,3 und P (X = 8) = 0,1. Zum Abschluss dieses kurzen Exkurses in die Wahrscheinlichkeitsrechnung betrachten wir einen Datenblock mit n Bits. Die Wahrscheinlichkeit, dass ein Bit fehlerhaft ist, sei 0 ≤ p ≤ 1. Entsprechend ist es mit Wahrscheinlichkeit 1 − p korrekt. Wir gehen davon aus, dass es keine Wechselwirkungen zwischen den Bits gibt. Ein fehlerhaftes Bit m¨ oge nicht die Wahrscheinlichkeit beeinflussen, dass irgend ein anderes fehlerhaft ist. Verschiedene Fehlerereignisse sind damit stochastisch unabh¨ angig, die Wahrscheinlichkeit des gemeinsamen Eintretens ist das Produkt der Einzelwahrscheinlichkeiten. Die Zufallsvariable X m¨ oge angeben, wie viele Bits fehlerhaft sind. Wir berechnen jetzt P (x = k) f¨ ur 0 ≤ k ≤ n: M¨ o glichkeiten, k fehlerhafte Positionen auszuw¨ a hlen (KombinatioEs gibt n k nen ohne Wiederholung). Die Wahrscheinlichkeit, dass eine einzelne dieser Kombinationen eintritt, ist pk · (1 − p)n−k . Hier haben wie die Wahrscheinlichkeiten f¨ ur die k fehlerhaften und n − k fehlerfreien Bits multipliziert. Damit ist n k p · (1 − p)n−k , (3.20) P (X = k) = k und man spricht von einer Binomialverteilung. Es muss 1 = n k=0 P (X = k) gelten. Dass das tats¨ achlich so ist, folgt mit dem binomischen Satz: n n n k P (X = k) = p · (1 − p)n−k = (p + 1 − p)n = 1n = 1. k k=0
k=0
Mit der binomischen Formel erhalten wir auch den Erwartungswert von X: n n (3.18) (3.20) n k E(X) = k · P (X = k) = k p (1 − p)n−k k k=0
k=0
3.3 Wahrscheinlichkeiten und Primzahltests
(3.10)
=
= (3.10)
=
=
n k=0 n
k
155
n! pk (1 − p)n−k k!(n − k)!
n(n − 1)! pk (1 − p)n−k k(k − 1)![n − 1 − (k − 1)]! k=0 n n n−1 k k p (1 − p)n−1−(k−1) k k−1 k=1 n−1 n − 1 k+1 n p (1 − p)n−1−k (Indextransformation) k k
k=0
(3.12)
=
np(p + 1 − p)n−1 = np.
Im Mittel sind also n · p Bits fehlerhaft. Damit werden wir uns noch intensiver in Kapitel 5.1 besch¨ aftigen. Aufgabe 3.13 Der Erwartungswert einer binomialverteilten Zufallsvariable X l¨ asst sich unmittelbar mit der Linearit¨ at des Erwartungswerts berechnen, wenn wir f¨ ur jedes uhren, die eins ist, wenn das Bit fehlerhaft ist, Bit eine Zufallsvariable Xi einf¨ und sonst den Wert null hat. Schreiben Sie X ¨ uber diese Zufallsvariablen, und berechnen Sie damit E(X). Aufgabe 3.14 Bei einem Multiple-Choice-Test mit m Aufgaben werden zu jeder Aufgabe n Antworten angeboten. Dabei sei n ≥ 3 ungerade. Richtig k¨ onnen 1 bis n−1 2 Antworten sein, wobei eine Aufgabe nur dann als korrekt anerkannt wird, wenn genau alle richtigen Antworten angekreuzt werden. Jede m¨ ogliche Variante sei dabei gleich wahrscheinlich. a) Wie wahrscheinlich ist es, eine Aufgabe durch Raten richtig zu beantworten, wenn wir wissen, dass k Antworten richtig sind? b) Wie wahrscheinlich ist es, ohne zus¨ atzliches Wissen eine Aufgabe durch Raten richtig zu beantworten? c) Der Test ist genau dann bestanden, wenn h¨ ochstens eine Aufgabe falsch beantwortet ist. Wie wahrscheinlich ist das Bestehen, wenn die Aufgaben stochastisch unabh¨ angig voneinander geraten werden? Geben Sie eine Formel mit den Variablen n und m an.
3.3.2
Primzahltests
Egal, ob sich der Web-Server beim Web-Browser authentifizieren muss, damit wir sicher sein k¨ onnen, dass wir tats¨ achlich mit dem richtigen Server verbunden sind und nicht mit einem Betr¨ uger, oder ob wir die WLAN-Verbindung gegen
156
3 Zahlen und Strukturen
unerlaubten Zugriff absichern wollen, oder unsere E-Mails gegen das Mitlesen fremder Geheimdienste sch¨ utzen wollen, immer sind Verschl¨ usselungsverfahren am Werk. Und viele Verschl¨ usselungsalgorithmen wie das RSA-Verfahren (siehe Abschnitt 3.5) arbeiten mit großen, wirklich großen Primzahlen. Und diese großen Primzahlen werden auch noch miteinander multipliziert, wodurch eine schrecklich große Zahl entsteht. Daher besch¨ aftigen wir uns hier mit dem Erkennen von Primzahlen. Wenn Sie das zu theoretisch finden, aber dennoch das Prinzip des RSA-Verfahrens verstehen wollen, dann sehen Sie sich zumindest den wirklich grundlegenden kleinen Satz von Fermat auf Seite 158 an. Der einfachste Primzahltest f¨ ur eine Zahl p besteht darin, durch alle kleineren nat¨ urlichen Zahlen ab 2 zu dividieren. Wird so kein Teiler gefunden, dann handelt es sich um eine Primzahl. Eine kleine Optimierung besteht dann darin, ucksichtigen. Denn wenn sie ein Teiler Zahlen i mit i2 > p nicht mehr zu ber¨ sind, dann muss i · k = p f¨ ur eine Zahl k < i sein, die bereits u uft wurde. ¨ berpr¨ F¨ ur sehr große Zahlen p ist der Aufwand bei diesem Vorgehen aber zu groß. Algorithmus 3.4 Sieb des Eratosthenes for i := 2 bis p do prim[i] :=wahr for i := 2 bis p do if prim[i] =wahr then Ausgabe der Primzahl i for k := i2 bis p, Schrittweite i do prim[k] :=falsch M¨ ochten wir mehr als eine Primzahl finden, dann vervielfacht sich der Aufwand auch noch entsprechend. Hier ist es besser, wenn wir uns die Zahlen merken, von denen wir bereits wissen, dass sie keine Primzahlen sind. Algorithmus 3.4 beschreibt das Sieb des Eratosthenes, bei dem Vielfache von Primzahlen als nicht-prim markiert werden. Dies geschieht in der inneren Schleife, die erst ur m < i bereits durch vorangebei i2 beginnt, da alle Vielfachen m · i von i f¨ hende Schleifendurchl¨ aufe markiert wurden. In dieser Schleife wird k nicht nach jedem Durchlauf um 1 erh¨ oht, sondern es wird k := k + i gerechnet, d. h., die Schleife wird mit der Schrittweite i durchlaufen. Nachteil dieses Algorithmus ist, dass man f¨ ur Zahlen bis p ein entsprechend großes Array ben¨ otigt. Eine kleine Optimierung w¨ are das Weglassen der geraden Zahlen. Da es aber in der Praxis um sehr große Primzahlen geht, scheidet auch diese Speichervariante aus. Eine besser geeignete L¨ osung f¨ ur das Erkennen sehr großer Primzahlen erhalten wir, wenn wir dem Zufall eine Chance geben. Ein randomisierter Algorithmus trifft w¨ ahrend seiner Ausf¨ uhrung gewisse Entscheidungen zuf¨ allig. Es gibt zwei prinzipiell unterschiedliche Typen: Las-Vegas-Algorithmen liefern immer korrekte Ergebnisse, die Berechnung erfolgt mit hoher Wahrscheinlichkeit effizient. Solche Algorithmen wer-
3.3 Wahrscheinlichkeiten und Primzahltests
157
den eingesetzt, wenn der deterministische Algorithmus eine schlechte Laufzeit im ung¨ unstigsten Fall hat, der ung¨ unstige Fall aber nur selten auftritt und durch die Randomisierung sehr unwahrscheinlich gemacht werden kann. Als Beispiel sei hier der randomisierte Quicksort genannt. Den klassischen Quicksort behandeln wir in Kapitel 4.3. Der randomisierte Algorithmus unterscheidet sich nur dadurch, dass das Pivot-Element zuf¨ allig ausgew¨ ahlt wird. Ihn analysieren wir in Abschnitt 4.5. Monte-Carlo-Algorithmen sind sehr effizient, aber das Ergebnis ist nur mit einer gewissen Wahrscheinlichkeit korrekt. Solche Algorithmen finden Verwendung, wenn kein effizienter deterministischer Algorithmus f¨ ur das Problem bekannt ist. Falls Sie bereits von den NP-vollst¨ andigen Problemen geh¨ ort haben, m¨ ussen wir Sie an dieser Stelle leider entt¨ auschen: F¨ ur solch schwere Probleme sind auch keine effizienten randomisierten Algorithmen bekannt. Algorithmus 3.5 Einfacher Monte-Carlo-Test, ob n eine Primzahl ist procedure Prim(n) W¨ ahle a ∈ {2, 3, . . . , n − 1} zuf¨ allig mit gleicher Wahrscheinlichkeit f¨ ur jeden Wert Laplace-Experiment if ggT(a, n) = 1 then return falsch n ist keine Primzahl return wahr
n ist wahrscheinlich Primzahl
Wir beginnen mit einem ersten Versuch f¨ ur einen randomisierten Primzahltest, siehe Algorithmus 3.5. Wenn a und n einen gemeinsamen Teiler ungleich 1 haben, dann hat n insbesondere einen von 1 verschiedenen Teiler und kann daher keine Primzahl sein. Dies ist ein schlechter Test: Sei n = p · q ≥ 6 das Produkt zweier verschiedener Primzahlen p, q. Dann tritt das Ereignis {p, q}, dass a = p oder a = q gew¨ ahlt wird, nur mit der Laplace-Wahrscheinlichkeit 2 2 2 ein. Mit Wahrscheinlichkeit 1 − n−2 = n−4 P ({p, q}) = n−2 n−2 = 1 − n−2 wird n f¨ alschlich als Primzahl eingesch¨ atzt. F¨ ur große Werte von n ist die Wahrscheinlichkeit nahe bei 1 (vgl. mit Grenzwertbetrachtungen in Kapitel 4.4). Ein einzelner Test mittels ggT ist also unbrauchbar. Wenn wir ihn aber m-mal wie in Algorithmus 3.6 wiederholen, wird die Fehlerwahrscheinlichkeit mit m potenziert und dadurch wesentlich kleiner (denn wir d¨ urfen die Einzelwahrscheinlichkeiten wegen (3.15) multiplizieren). So werden wir die Trefferrate auch bei den im Folgenden beschriebenen Tests verbessern. Den ersten besseren Primzahltest erhalten wir mit dem kleinen Satz von Fermat, der zudem die Grundlage f¨ ur die RSA-Verschl¨ usselung ist:
158
3 Zahlen und Strukturen
Algorithmus 3.6 Wiederholte Ausf¨ uhrung eines Primzahltests f¨ ur n k := 0 repeat k := k + 1, erg := Prim(n) until (erg = falsch) ∨ (k ≥ m) return erg
Satz 3.24 (kleiner Satz von Fermat) Sei p eine Primzahl, und sei a ∈ N, so dass a kein Vielfaches von p ist. Dann gilt: ap−1 ≡ 1 mod p. Auf diesem Satz basiert der Fermat’sche Primzahltest in Algorithmus 3.7. Bevor wir den Satz beweisen, ben¨ otigen wir eine Hilfsaussage: Algorithmus 3.7 Fermat’scher Primzahltest f¨ ur n procedure Prim(n) W¨ ahle a ∈ {2, 3, . . . , n − 1} zuf¨ allig mit gleicher Wahrscheinlichkeit f¨ ur jeden Wert Laplace-Experiment if (ggT(a, n) = 1) oder (an−1 mod n = 1) then return falsch n ist keine Primzahl return wahr n ist wahrscheinlich Primzahl
Lemma 3.25 (Teilbarkeit der Binomialkoeffizienten) ur k = 1, . . . , n − 1. Sei n eine Primzahl. Dann gilt: n teilt n k f¨ Am Pascal’schen Dreieck (siehe Seite 142) sehen Sie, dass die Aussage zumindest f¨ ur n = 2 und n = 3 richtig ist. Beweis Nach Definition der Binomialkoeffizienten ist n n · (n − 1) · . . . · (n − k + 1) = . k k · (k − 1) · . . . · 1 Alle Faktoren des Nenners sind kleiner als die Primzahl n im Z¨ ahler. Damit hat der Nenner eine Primfaktorzerlegung aus Primzahlen, die alle kleiner als n sind. Da n eine Primzahl ist, teilen diese n nicht. Die Binomialkoeffizienten sind wegen (3.11) nat¨ urliche Zahlen (vgl. Pascal’sches Dreieck). Daher teilen die Primfaktoren des Nenners den Z¨ ahler n · [(n − 1) · . . . · (n − k + 1)]. Nach Satz 3.13 ist (n − 1) · . . . · (n − k + 1) sukzessive durch alle Primfaktoren des Nenners teilbar, da daf¨ ur der Faktor n nicht in Frage kommt. Es gibt also ein a ∈ N mit n k = n · a, d. h. der Binomialkoeffizient ist durch n teilbar.
3.3 Wahrscheinlichkeiten und Primzahltests
159
Jetzt k¨ onnen wir den kleinen Satz von Fermat beweisen: Beweis Zun¨ achst multiplizieren wir die Potenz (a + 1)p aus. Jetzt erweist es sich als g¨ unstig, dass wir den allgemeinen binomischen Satz (Satz 3.12) kennen: p p p p p p−1 p−2 (a + 1) = a + a + a + ... + a + 1. p−1 p−2 1 Nach Lemma 3.25 sind die Binomialkoeffizienten kp f¨ ur k = 1, . . . , p − 1 durch p teilbar, also gilt (3.21) (a + 1)p ≡ ap + 1 mod p. Das folgt auch mit b = 1 aus Aufgabe 3.15 unten. Wir zeigen mittels Induktion nach a ≥ 1, dass mit (3.21) gilt: (a + 1)p ≡ a + 1 mod p.
(3.22) =1
Induktionsanfang f¨ ur a = 1: (3.21) besagt: 2 ≡ 1p +1 mod p. Induktionsannahme: F¨ ur ein beliebiges, festes a ∈ N gelte (a + 1)p ≡ ur ein l ∈ Z. a + 1 mod p, also (a + 1)p = a + 1 + lp f¨ Induktionsschluss: Nach der Vor¨ uberlegung (3.21), in der wir a durch a+1 ersetzen, gilt f¨ ur ein k ∈ Z p
(a + 2)p ≡ (a + 1)p + 1 mod p, also (a + 2)p = (a + 1)p + 1 + kp. Mit der Induktionsannahme wird daraus f¨ ur ein l ∈ Z (a + 2)p = a + 1 + lp + 1 + kp = a + 2 + (l + k)p ≡ (a + 2) mod p. Damit haben wir u ¨ ber die Induktion die Formel (3.22) bewiesen. Ersetzen wir in (3.22) a + 1 durch a ≥ 2, so haben wir k p a f¨ ur ein k ∈ Z bewiesen. Ist a = 1, so gilt diese Beziehung auch mit k = 0. Die linke Seite ist eine nat¨ urliche Zahl, also ist k · p durch a teilbar. Da a nach Voraussetzung kein Vielfaches von p ist, ist die Primzahl p durch keinen Primfaktor von a teilbar, so dass nach dem Lemma von Euklid (Satz 3.13) k durch jeden Primfaktor von a, d. h. durch a, teilbar ist, also ka ∈ Z. Damit haben wir ap−1 ≡ 1 mod p bewiesen. ap ≡ a mod p, also ap = a + k · p bzw. ap−1 = 1 +
Aufgabe 3.15 Zeigen Sie, dass f¨ ur alle nat¨ urlichen Zahlen a, b und alle Primzahlen n gilt: (a + b)n ≡ an + bn mod n. Das ist kein Widerspruch zum binomischen Satz, da wir hier modulo n rechnen. Ohne die Modulo-Rechnung ist die Formel falsch!
160
3 Zahlen und Strukturen
Jetzt haben wir verstanden, warum der Algorithmus 3.7 funktioniert. Leider ur ein gibt es ein Problem: Es gibt Zahlen n ∈ N, so dass an−1 ≡ 1 mod n f¨ a ∈ {2, 3, . . . , n − 1} gilt, obwohl n keine Primzahl ist. Solche Zahlen nennt man Fermat’sche Pseudo-Primzahlen. F¨ ur n = 341 gilt 2340 ≡ 1 mod 341, aber 341 = 11 · 31 ist keine Primzahl. ur alFermat’sche Pseudo-Primzahlen n, bei denen sogar an−1 ≡ 1 mod n f¨ le Zahlen a aus {2, 3, . . . , n − 1} gilt, die teilerfremd zu n sind, nennt man Carmichael-Zahlen. Es gibt unendlich viele Carmichael-Zahlen, die kleinsten sind: 3 · 11 · 17 =
561
5 · 17 · 29 = 2465
5 · 13 · 17 = 1105
7 · 13 · 31 = 2821
7 · 13 · 19 = 1729
7 · 23 · 41 = 6601.
Wir diskutieren jetzt bedingte Fehlerwahrscheinlichkeiten f¨ ur das Ereignis F , dass der Fermat’sche Primzahltest beim m-facher Wiederholung f¨ ur eine zuf¨ allig ausgew¨ ahlte Zahl n einen Fehler macht: Ist die zu testende Zahl n eine Primzahl (dieses Ereignis bezeichnen wir mit A), so ist die Ausgabe immer korrekt. Ist n keine Primzahl aber auch keine Carmichael-Zahl (Ereignis B), so ist die Fehlerwahrscheinlichkeit bei einem Experiment kleiner oder gleich 12 . Um das zu beweisen, muss man die Anzahl der Zahlen a z¨ ahlen, die zu einer Fehlbewertung f¨ uhren. Das gelingt mittels Gruppentheorie, da diese Zahlen in einer Gruppe liegen, die echt in Zn enthalten ist. Ein Satz der Gruppentheorie besagt, dass die Anzahl der Elemente der enthaltenen Gruppe die Anzahl der Elemente der Obergruppe teilt, also hier h¨ ochstens n/2 ist. Damit ist die Fehlerwahrscheinlichkeit kleiner oder gleich n/2 n = 1/2. Wiederholen wir mit Algorithmus 3.6 des Test m-mal, so entsteht nur dann ein Fehler, wenn bei allen Experimenten ein Fehler gemacht wird. Da diese unabh¨ angig voneinander sind, darf man die Fehlerwahrscheinlichkeiten multiplizieren und erh¨ alt insgesamt eine Wahrscheinlichkeit kleiner oder gleich 21m . Wir haben bereits ¨ mehrfach gesehen, wie groß Zweierpotenzen werden – durch Ubergang zum Kehrwert wird die Wahrscheinlichkeit also sehr schnell sehr klein. Ist n eine Carmichael-Zahl (Ereignis C), so liefert der Primzahltest nur dann ein korrektes Ergebnis, wenn zuf¨ allig ein Teiler von n gefunden wird. Um jetzt aus diesen bedingten Wahrscheinlichkeiten die Wahrscheinlichkeit f¨ ur F zu berechnen, ben¨ otigen wir die Formel f¨ ur die totale Wahrscheinlichkeit. Voraussetzung ist, dass die Nebenbedingungen A, B und C paarweise elementfremd sind und ihre Vereinigung die Grundgesamtheit bildet. Diese Voraussetzung ist bei uns erf¨ ullt, es liegt also eine disjunkte Zerlegung von Ω vor. Damit gilt: P (F ) = P (F |A) · P (A) + P (F |B) · P (B) + P (F |C) · P (C).
3.3 Wahrscheinlichkeiten und Primzahltests
161
Bevor wir die Formel anwenden, beweisen wir sie kurz: P (F |A) · P (A) + P (F |B) · P (B) + P (F |C) · P (C) (3.14) P (F ∩ A) P (F ∩ B) P (F ∩ C) = · P (A) + · P (B) + · P (C) P (A) P (B) P (C) = P (F ∩ A) + P (F ∩ B) + P (F ∩ C). Die disjunkten Mengen F ∩ A, F ∩ B und F ∩ C ergeben vereinigt F . Die Additivit¨ at des Wahrscheinlichkeitsmaßes f¨ uhrt daher zu P (F ∩ A) + P (F ∩ B) + P (F ∩ C) = P (F ), womit die Formel u ur den Fer¨ber die totale Wahrscheinlichkeit bewiesen ist. F¨ mat’schen Primzahltest erhalten wir damit: 1 P (F ) = P (F |A) ·P (A) + P (F |B) ·P (B) + P (F |C) ·P (C) ≤ m + P (C). 2 ≤1
1 ≤ 2m
=0
Wir wollen uns hier nicht mit der Auftrittswahrscheinlichkeit von CarmichaelZahlen besch¨ aftigen, sondern statt dessen direkt einen Algorithmus betrachten, der auch f¨ ur Carmichael-Zahlen gute Ergebnisse liefert. Das f¨ uhrt uns zum Miller-Rabin-Test. Um diesen Test zu verstehen, m¨ ussen wir mit dem Rest der Ganzzahldivision arbeiten. Lemma 3.26 (Rechenregeln f¨ ur den Rest der Ganzzahldivision) F¨ ur nat¨ urliche Zahlen a, b, m und n gilt: (a · b) mod n = ((a mod n) · (b mod n)) mod n, a
m
mod n = (a mod n)
(a mod m · n) mod n = a mod n.
m
mod n,
(3.23) (3.24) (3.25)
Beachten Sie, dass im Allgemeinen statt (3.25) nicht (a mod m) mod n = a mod n gilt. Beweis Zun¨ achst haben a und b Darstellungen a = k1 · n + (a mod n) und b = k2 ·n+(b mod n), die sich aus den Ergebnissen k1 und k2 der Ganzzahldivision durch n sowie dem Rest dieser Division ergeben:
(a · b) mod n = [k1 · n + (a mod n)] · [k2 · n + (b mod n)] mod n = (a mod n)·(b mod n)+[k1k2 n+k1 (b mod n)+(a mod n)k2 ]·n mod n = (a mod n)·(b mod n) mod n.
162
3 Zahlen und Strukturen
Die Aussage (3.24) folgt direkt, indem wir 3.23 iterativ f¨ ur die m−1 Produkte anwenden. Zum Beweis von (3.25) sei k1 das Ergebnis der Ganzzahldivision von a durch m · n, also a = k1 · m · n + (a mod m · n). Außerdem sei k2 das Ergebnis der Ganzzahldivision von a mod m · n = a − k1 · m · n durch n, d. h. a mod m · n = k2 n + (a − k1 · m · n) mod n = k2 n + (a mod n). Damit erhalten wir (a mod m · n) mod n = [[k1 · m · n + (a mod m · n)] mod m · n] mod n = [[k1 · m · n + k2 · n + (a mod n)] mod m · n] mod n = [k2 n + (a mod n)] mod n = a mod n. Ausgangspunkt f¨ ur den Miller-Rabin-Test ist eine Umformulierung des kleinen Satzes von Fermat: F¨ ur eine Primzahl n gilt f¨ ur 2 ≤ a < n (so dass a kein Vielfaches von n ist): an−1 ≡ 1 mod n ⇐⇒ an−1 − 1 ≡ 0 mod n, d. h. n | an−1 − 1.
(3.26)
Wir schreiben nun n − 1 als 2k · m, wobei m eine ungerade Zahl sei. In der Primfaktorzerlegung von n−1 kommt die Zwei also k-mal vor. Damit ist an−1 = k k am·2 = (am )(2 ) . Die Zahl an−1 entsteht, indem wir am k-mal quadrieren. Wir wenden nun k-mal die Umformung x2 − y 2 = (x + y) · (x − y) an, die Sie vielleicht unter dem Namen dritte binomische Formel kennen. Im ersten Schritt setzen wir dabei x2 = an−1 und y 2 = 1. ! ! n−1 n−1 an−1 −1 = a 2 + 1 · a 2 − 1 ! ! ! n−1 n−1 n−1 = a 2 +1 · a 4 +1 · a 4 −1 ! ! ! ! n−1 n−1 n−1 n−1 = a 2 +1 · a 4 +1 · a 8 +1 · a 8 −1 k
! n−1 n−1 i k 2 2 = ··· = a +1 a (3.27) −1 . i=1
am
F¨ ur eine Primzahl n erhalten wir jetzt in Abh¨ angigkeit von k: k
Ist k = 0, dann gilt a2 m = am = an−1 ≡ 1 mod n. Ist k > 0, so teilt n nach (3.26) die linke Seite von (3.27). Aufgrund des Lemmas von Euklid (Satz 3.13) muss sie dann auch einen der Faktoren auf der rechten Seite teilen, also ! n−1 ur ein 1 ≤ i ≤ k oder n | (am − 1) . n | a 2i + 1 f¨ Das ist ¨ aquivalent zu a
n−1 2i
≡ −1 mod n f¨ ur ein 1 ≤ i ≤ k
oder
am ≡ 1 mod n.
3.3 Wahrscheinlichkeiten und Primzahltests
163
Der Miller-Rabin-Test berechnet modulo n die zuvor auftretenden Potenzen von am : ! ! n−1 n−1 n−1 k−1 k am , (am )2 , (am )4 , . . . , (am )2 , (am )2 = a 2k , a 2k−1 , . . . , a 2 , an−1 . Wir wissen jetzt, dass f¨ ur eine Primzahl n der erste Eintrag am dieses Tupels i aus der Restklasse [1] bez¨ uglich Zn ist, oder (bei k > 0) ein Eintrag (am )2 , 0 ≤ i ≤ k − 1 einen Wert aus der Restklasse [−1] = [n − 1] haben muss. Genau das pr¨ uft der Algorithmus 3.8. Das berechnete Tupel hat eine der zwei folgenden Formen: (?, ?, . . . , ?, n − 1, 1, 1, . . . , 1) oder (1, 1, . . . , 1). Beachten Sie, dass wegen der fortlaufenden Quadrierung nach einer Zahl aus [1] oder [−1] = [n − 1] immer nur Einsen folgen k¨ onnen. Wenn Sie in den Algorithmus schauen, dann sehen Sie, dass b zun¨ achst den m Wert a hat und dann sukzessive quadriert wird. Nach jedem Quadrieren wird der Rest der Ganzzahldivision durch n berechnet. Das geschieht durch die Anweisung b := b2 mod n. Ebenso wie die Initialisierung b := am mod n ist die Modulo-Rechnung wegen (3.24) gestattet. Da die berechneten Zahlen nichtnegativ sind, wird nicht auf −1 gepr¨ uft, sondern auf den positiven Vertreter n − 1 der Restklasse [−1]. Durch die mod n-Rechnung ist das auch der einzige Vertreter aus [−1], der vorliegen kann. Algorithmus 3.8 Miller-Rabin-Primzahltest f¨ ur n procedure Prim(n) berechne k und m, so dass n − 1 = 2k · m und m ungerade ist w¨ ahle a ∈ {2, 3, . . . , n − 1} zuf¨ allig b := am mod n if (b = 1) ∨ [(b = n − 1) ∧ (k > 0)] then return wahr n ist wahrscheinlich Primzahl else for i := 1 bis k − 1 do b := b2 mod n if b = n − 1 then d. h. b ≡ −1 mod n return wahr n ist wahrscheinlich Primzahl return falsch n ist keine Primzahl Leider haben die Tupel nicht ausschließlich f¨ ur Primzahlen die abgepr¨ ufte Form. Es gibt sogenannte starke Pseudo-Primzahlen, die so f¨ alschlich als Primzahlen erkannt werden. Als Beispiel betrachten wir die Fermat’sche Pseudo-
164
3 Zahlen und Strukturen
Primzahl n = 11 · 31 = 341, also n − 1 = 340 = 22 · 85 = 2k m mit k = 2 und m = 85. Wegen 2985 ≡ −1 mod n
3085 ≡ −1 mod n
4685 ≡ −1 mod n
5485 ≡ −1 mod n
6185 ≡ −1 mod n
8585 ≡ −1 mod n
und 485 ≡ 1 mod n
1685 ≡ 1 mod n
4785 ≡ 1 mod n
6485 ≡ 1 mod n
7085 ≡ 1 mod n
7885 ≡ 1 mod n
wird n f¨ ur a ∈ {29, 30, 46, 54, 61, 85, 4, 16, 47, 64, 70, 78} f¨ alschlich als Primzahl erkannt. Wenn Sie ohne Langzahlen-Arithmetik nachrechnen m¨ ochten, dass die Potenzen tats¨ achlich in den angegebenen Restklassen liegen, k¨ onnen Sie (3.24) anwenden, z. B. ist 2985 mod 341 = (295 mod 341)17 mod 341 = 34017 mod 341. Da aber [340] = [n−1] = [−1] ist, liegt das Ergebnis in der Restklasse [(−1)17 ] = [−1]. Die Fehlerwahrscheinlichkeit kann wieder mittels Aussagen u ¨ ber Gruppen abgesch¨ atzt werden: Eine Primzahl wird exakt als solche erkannt. Ist n keine Carmichael-Zahl und keine Primzahl, so ist die Fehlerwahrscheinlichkeit weiterhin maximal 1/2. Wiederholen wir den Test mit Algorithmus 3.6 bis zu m-mal (wobei jeweils stochastisch unabh¨ angig eine Testzahl a gew¨ ahlt wird), so wird die Fehlerwahrscheinlichkeit f¨ ur das gegebene n wie zuvor kleiner oder gleich 1/2m . Ist n eine Carmichael-Zahl, so ist jetzt die Fehlerwahrscheinlichkeit ebenfalls kleiner oder gleich 1/2. Auch f¨ ur ein solches n wird die Wahrscheinlichkeit m maximal 1/2 . Da in jedem Fall die Fehlerwahrscheinlichkeit bei m-facher Wiederholung ochstens mit h¨ ochstens 1/2m ist, wird jede beliebig fest vorgegebene Zahl n h¨ dieser Wahrscheinlichkeit falsch als Primzahl eingestuft.
3.4
Rationale Zahlen und K¨ orper
Wir verlassen die ganzen Zahlen, wenn wir dividieren: 53 ∈ Z. Daher erweitern wir Z zu " # p Q := : p ∈ Z, q ∈ Z \ {0} , q
3.4 Rationale Zahlen und K¨ orper
165
die Menge der rationalen Zahlen. Eine rationale Zahl ist ein Bruch, bei dem Z¨ ahler und Nenner eine ganze Zahl sind. Mit Br¨ uchen haben wir bereits gerechnet, und Sie kennen sie nat¨ urlich aus der Schule. Wir m¨ ochten nicht, dass die Br¨ uche 32 und 46 verschieden sind. Die Darstelp lung eines Bruchs q wird eindeutig, wenn wir verlangen, dass p und q teilerfremd sind (so dass wir nicht mehr k¨ urzen k¨ onnen) und dass der Nenner positiv ist. Streng genommen k¨ onnen wir vergleichbar mit den Restklassen des Zn zu ¨ Aquivalenzklassen u ¨ bergehen, die die rationalen Zahlen darstellen und dann mit Repr¨ asentanten rechnen. Diesen Aufwand scheuen wir hier aber. Die Menge Q bildet zusammen mit der u ¨ blichen Addition und Multiplikation einen K¨ orper: Definition 3.27 (K¨ orper) Sei (K, +, ·) ein kommutativer Ring mit Einselement 1. K heißt ein K¨ orper genau dann, wenn 1 = 0, wobei 0 das neutrale Element hinsichtlich der Addition + ist, und jedes von 0 verschiedene Element hinsichtlich der Multiplikation · ein inverses Element (einen Kehrwert) hat. In einem K¨ orper gelten also die folgenden Axiome f¨ ur alle a, b, c ∈ K: Axiome zur Addition: – – – –
Kommutativgesetz: a + b = b + a, Assoziativgesetz: (a + b) + c = a + (b + c), Existenz eines (eindeutigen) neutralen Elements 0 ∈ K mit a + 0 = a. Jedes a hat (genau) ein inverses Element −a ∈ K, so dass a + (−a) = a − a = 0.
Axiome zur Multiplikation: – – – –
Kommutativgesetz: a · b = b · a, Assoziativgesetz: (a · b) · c = a · (b · c), Existenz eines (eindeutigen) neutralen Elements 1 ∈ K mit 1 · a = a. Jedes a = 0 hat (genau) ein inverses Element a−1 ∈ K, so dass a · a−1 = 1.
Distributivgesetz (zwischen Addition und Multiplikation): (a + b) · c = (a · c) + (b · c). Aufgabe 3.16 orper ist. Dabei wird als AdditiZeigen Sie, dass B := ({0, 1}, ⊕, ) ein K¨ on das exklusive Oder und als Multiplikation das logische Und, das bei BitVerkn¨ upfungen auch mit geschrieben wird, verwendet.
166
3 Zahlen und Strukturen
Die rationalen Zahlen lassen sich als Dezimalzahlen schreiben, die entweder nur endlich viele Nachkommastellen besitzen oder bei denen sich ab einer Nachkommastelle ein Ziffernblock periodisch wiederholt. Der sich wiederholende Ziffernblock heißt Periode. Eine Periode wird mit einem Balken gekennzeichnet: 1 7 = 0,142857 142857 14... = 0, 142857. Dass man Br¨ uche p/q tats¨ achlich so schreiben kann, sieht man durch fortgesetzte schriftliche Division: Dividiert man p durch q, erh¨ alt man einen Rest 0 ≤ r < q. Das Gleiche passiert bei den folgenden Divisionen. Wird der Rest irgendwann 0, so ist die Anzahl der Nachkommastellen endlich. Sonst muss sich ein Rest sp¨ atestens nach q Divisionen wiederholen, da dann alle m¨ oglichen Reste aufgebraucht sind. Ab dieser Stelle wiederholen sich die Divisionen, und die Periode entsteht. Offensichtlich ist umgekehrt auch jede Dezimalzahl mit endlich vielen Nachkommastellen ein Bruch. Hat eine Dezimalzahl ein Periode, so k¨ onnen wir sie ebenfalls als Bruch darstellen: bn bn−1 . . . b0 , c1 c2 . . . cm a1 a2 . . . ak = bn bn−1 . . . b0 , c1 c2 . . . cm + 10−m · 0, a1 a2 . . . ak . Damit m¨ ussen wir nur noch r = 0, a1 a2 . . . ak als Bruch schreiben. 10k · r = a1 a2 . . . ak , a1 a2 . . . ak =⇒ 10k · r − r = a1 a2 . . . ak , a1 a2 . . . ak − 0, a1 a2 . . . ak =⇒ (10k − 1) · r = a1 a2 . . . ak . Damit ist r=
a1 a2 . . . a k a1 a2 . . . a k , = 10k − 1 99 . . . 9 k Neunen
so dass die Darstellung als Bruch gefunden ist. Tats¨ achlich ist die Darstellung eines Bruchs als Dezimalzahl fast“ eindeutig. ” Lediglich mit Neunerperioden gibt es ein Problem, da z. B. 0, 9 =
9 = 1, 9
0,129 = 0,13.
Eine Zahl kann aufgrund dieser Problematik zwei Dezimaldarstellungen haben. Wenn man auf Neunerperioden verzichtet, wird die Darstellung eindeutig. Bei den vorangehenden Rechnungen haben wir mit unendlich vielen Nachkommastellen hantiert. Das, was wir getan haben, war alles richtig, aber streng genommen h¨ atten wir erst einmal erkl¨ aren m¨ ussen, wie sich aus unendlich vielen Nachkommastellen ein Zahlenwert ergibt. Das werden wir uns sp¨ ater genauer mit Satz 3.34 auf Seite 187 ansehen und in Kapitel 4.4 mit dem Grenzwertbegriff vertiefen.
3.5 RSA-Verschl¨ usselung
167
Mit den Halbgruppeneigenschaften haben wir bereits Potenzen mit Expouhrt. Jetzt k¨ onnen wir f¨ ur Basen a ∈ Q, a = 0, beliebige nenten aus N eingef¨ Exponenten aus Z zulassen: a0 := 1,
a−n :=
1 f¨ u r n ∈ N. an
Diese bekannte Definition ist vertr¨ aglich mit den Regeln zur Potenzrechnung: 1=
an = an · a−n = an+(−n) = a0 . an
Zum Abschluss des Abschnitts sehen wir uns noch andere K¨ orper als Q an. Es orper l¨ asst sich beweisen, dass der Restklassenring (Zn , +, ·) genau dann ein K¨ ist, wenn n eine Primzahl ist. Dabei ist die Schwierigkeit zu zeigen, dass multiplikative Inverse existieren. Warum existiert zu jedem a ∈ Zn mit a = 0 ein a−1 , wenn n eine Primzahl ist? Wenn wir im Z5 rechnen, dann ist 3 · 2 = 1, wobei 1 wie auch 6 Repr¨ asentanten der Restklasse [1] = {1 + k · 5 : k ∈ Z} sind. onnen wir dem erweiterten Euklid’schen AlHier gilt also 3−1 = 2. Allgemein k¨ gorithmus (siehe Seite 133) die Inverse berechnen. Da n eine Primzahl ist, gilt f¨ ur 1 ≤ a < n: 1 = ggT(a, n) = r · a + s · n. Wegen r·a = 1−s·n ist r·a ≡ 1 mod n, d. h., r ist ein Repr¨ asentant der Inversen a−1 . Im Beispiel erhalten wir mit dem erweiterten Euklid’schen Algorithmus 5 = 1·3+2 3 = 1·2+1
so dass
2 = 2 · 1 + 0,
2 = 5−1·3 1 = 3 − 1 · 2.
R¨ uckw¨ arts-Einsetzen liefert 1 = 3 − 1 · 2 = 3 − 1 · [5 − 1 · 3] = 2 · 3 − 1 · 5. Wir k¨ onnen wir zu 3 die Inverse 2 ablesen. Ist n keine Primzahl, dann gibt es im Ring (Zn , +, ·) zumindest zu den Eleur die menten a mit ggT(a, n) = 1 eine Inverse a−1 . Das nutzen wir jetzt f¨ RSA-Verschl¨ usselung.
3.5
RSA-Verschl¨ usselung
Hier beschreiben wir das nach seinen Erfindern Rivest, Shamir und Adleman benannte RSA-Verschl¨ usselungsverfahren. Symmetrische Verschl¨ usselungsverfahren verwenden einen Schl¨ ussel sowohl zum Ver- als auch zum Entschl¨ usseln. Ein ganz einfaches Beispiel ist der CaesarCode aus der Antike: Alle Buchstaben in einem Text wurden durch einen anderen Buchstaben ersetzt, der im Alphabet (zyklisch) n Positionen sp¨ ater steht.
168
3 Zahlen und Strukturen
Diese Verschiebung kann unter Kenntnis von n leicht wieder r¨ uckg¨ angig gemacht werden. Moderne Verfahren sind hier nat¨ urlich besser, ein Beispiel ist die XorVerschl¨ usselung von Seite 12. Allerdings gibt es das prinzipielle Problem, dass Sender und Empf¨ anger einer Nachricht u ussel verf¨ ugen m¨ ussen. ¨ ber den Schl¨ Dieser kann nicht im Klartext an das Dokument angef¨ ugt werden. Dieses Problem gibt es bei asymmetrischen Verfahren nicht. Sie verwenden zwei getrennte Schl¨ ussel. Ein Schl¨ ussel kann ¨ offentlich bekannt gemacht werden, der andere bleibt geheim. Jeder kann nun mit dem o ussel eine Nachricht ver¨ffentlichen Schl¨ schl¨ usseln, aber nur der Besitzer des privaten Schl¨ ussels kann sie entschl¨ usseln. Umgekehrt kann auch der Besitzer des privaten Schl¨ ussels verschl¨ usseln, und jeder kann dann die Nachricht mit dem ¨ offentlichen Schl¨ ussel entschl¨ usseln. Diese Variante erscheint allerdings zun¨ achst merkw¨ urdig: Wenn jeder die Nachricht lesen kann, warum verschl¨ usselt man sie dann u ¨ berhaupt? Auf diese Weise kann man sicher sein, dass die Nachricht wirklich von dem einen Besitzer des privaten Schl¨ ussels stammt, nur er konnte sie verschl¨ usseln. Damit ist der Urheber authentisiert. Auf diese Weise werden Dokumente signiert. Die Signatur belegt die Urheberschaft. In beiden F¨ allen muss lediglich noch sichergestellt werden, dass der ¨ offentliche Schl¨ ussel auch tats¨ achlich zum angegebenen Urheber geh¨ ort. Dazu wird eine vertrauensw¨ urdige Zertifizierungs- und Validierungsstelle ben¨ otigt, die die Schl¨ ussel vergibt und pr¨ uft. Die RSA-Verschl¨ usselung ist das g¨ angigste asymmetrische Verfahren. Wir werden jedoch sehen, dass es mit umfangreichen Berechnungen verbunden ist. Daher wird es h¨ aufig nur zum Austausch eines Schl¨ ussels f¨ ur ein effizienteres symmetrisches Verfahren genutzt. Genau so funktioniert auch HTTPS: Der (Sitzungs-) Schl¨ ussel f¨ ur eine symmetrische Verschl¨ usselung wird mit einem asymmetrischen Verfahren ausgetauscht. Die zu verschl¨ usselnde Information wird beim RSA-Verfahren zun¨ achst als eiardarstellung ne Zahl aus Zn = {0, 1, 2, . . . , n−1} aufgefasst, z. B. indem ihre Bin¨ als (sehr große) Dualzahl interpretiert wird. Die Verschl¨ usselung ist dann eine bijektive Abbildung auf ein (anderes) Element des Zn . Die Abbildung verwendet z. B. einen ¨ offentlichen Schl¨ ussel. F¨ ur die Umkehrabbildung, also f¨ ur das Entschl¨ usseln, ben¨ otigen wir dann einen privaten Schl¨ ussel. Damit die Entschl¨ usselung nicht einfach durch Ausprobieren geschehen kann, muss die nat¨ urliche Zahl n sehr groß sein. Beim RSA-Algorithmus wird nun n nicht beliebig gew¨ ahlt, sondern man definiert n := p · q als ein Produkt von zwei großen verschiedenen Primzahlen p und q. Als privaten Schl¨ ussel w¨ ahlen wir ein Zahlenpaar (n, a) f¨ ur eine Zahl a ∈ N. Der ¨offentliche Schl¨ ussel ist ein Zahlenpaar (n, b), wobei b invers zu a bei
3.5 RSA-Verschl¨ usselung
169
ussen wir der Multiplikation in Z(p−1)(q−1) ist. Damit a ein Inverses hat, m¨ bei der Wahl von a darauf achten, dass a und (p − 1)(q − 1) teilerfremd sind, also ggT(a, (p − 1)(q − 1)) = 1. Dann k¨ onnen wir außerdem b aus a mit dem erweiterten Euklid’schen Algorithmus berechnen, wie wir das im vorangehenden Unterkapitel getan haben. usselt u Ein Dokument x ∈ Zn wird verschl¨ ¨ber den Rest y der Ganzzahldiviusselung von y zu x l¨ asst sion von xb durch n, also y = xb mod n. Die Entschl¨ a mod n berechnen. Umgekehrt kann aber (z. B. zur Erstellung sich dann u ber y ¨ usselt werden. einer Signatur) auch mit xa mod n ver- und mit y b mod n entschl¨ Satz 3.28 (Korrektheit des RSA-Verfahrens) Seien p und q verschiedene Primzahlen, a und b seien invers zueinander ur hinsichtlich der Multiplikation in Z(p−1)(q−1) , also [a · b] = [1]. Dann gilt f¨ jedes 0 ≤ x < n = p · q: !a xb mod n mod n = x, asst sich umkehren, also entschl¨ usseln. d. h., die Verschl¨ usselung xb mod n l¨
Beweis Wir verwenden, dass a · b ≡ 1 mod (p − 1)(q − 1) ist, es also ein k ∈ N0 gibt mit a · b = 1 + k(p − 1)(q − 1): (xb mod n)a mod n
(3.24)
!a
=
= xb
mod n = xab mod n
=
x1+k(p−1)(q−1) mod n = x · xk
!(p−1)(q−1) mod n.
Wir betrachten den Fall, dass x kein Vielfaches von p und kein Vielfaches von q ist. Dann sind p und q auch keine Teiler von x und auch nicht von xk(p−1) und xk(q−1) (in den Potenzen kommen die gleichen Primfaktoren wie in x vor), und wir k¨ onnen den kleinen Satz von Fermat (Satz 3.24 auf Seite 158) zweimal anwenden, einmal f¨ ur die Primzahl p und einmal f¨ ur q:
q−1 xk(p−1) ≡ 1 mod q
und
p−1 xk(q−1) ≡ 1 mod p.
Damit existieren Konstanten k1 , k2 ∈ Z mit
q−1 xk(p−1) = 1 + k1 q
und
p−1 xk(q−1) = 1 + k2 p.
Damit ist k1 q = k2 p, also teilt p die Zahl k1 q, und q teilt die Zahl k2 p. Wegen p = q und des Satzes von Euklid (Satz 3.13) ist daher die Primzahl p ein Teiler von k1 und die Primzahl q ein Teiler von k2 . Es gibt also ein k3 ∈ Z mit k1 q = k2 p = k3 pq. Wir haben soeben eine einfache Variante des
170
3 Zahlen und Strukturen
Chinesischen Restsatzes gezeigt, umgekehrt h¨ atten wir diesen Satz hier auch anwenden k¨ onnen. Insgesamt haben wir jetzt wegen n = p · q:
!(p−1)(q−1) mod n (xb mod n)a mod n = x · xk !(q−1) mod n = x · (1 + k3 pq) mod pq = x mod pq = x, = x · xk(p−1) da x < pq = n ist. Im Fall, dass x ein Vielfaches von p (oder q) ist, kann x nicht gleichzeitig ein Vielfaches von q (oder p) und damit von p · q sein wegen x < p · q. Wir betrachten jetzt den Fall, dass x = k2 p ist. Der verbleibende Fall x = k1 q ist
q−1 analog. Der kleine Satz von Fermat liefert jetzt xk(p−1) = 1 + k1 q, so dass !(p−1)(q−1) mod n = k2 p · [1 + k1 q] mod n (xb mod n)a mod n = x · xk = (k2 p + k1 k2 pq) mod n = (x + k1 k2 n) mod n = x mod n = x. Wie schwierig ist es nun, diese Verschl¨ usselung zu brechen? Ist das zu verschl¨ usselnde Dokument x = 0 oder x = 1 oder wird a = b = 1 gew¨ ahlt, dann ist das verschl¨ usselte Dokument y = x. Auch macht es keinen Sinn, mit dem RSA-Verfahren einzelne Zeichen (mit dem gleichen Schl¨ ussel) zu verschl¨ usseln, da z. B. mittels der Buchstabenh¨ aufigkeit der Code leicht zu erraten ist. Generell ist die RSA-Verschl¨ usselung bei Verwendung sehr großer Primzahlen, die nicht zu nah zusammen liegen, und bei einem großen Verschl¨ usselungsexponenten b aber mit heutigen Mitteln h¨ ochstens unter sehr großem Aufwand zu knacken. Ein Weg dazu ist die Berechnung der Primfaktorzerlegung von n in die Faktoren p und q. Wie schwierig die Faktorisierung f¨ ur Zahlen n mit mehreren hundert Dezimalstellen ist, zeigte die RSA Factoring Challenge. Das war ein Wettbewerb, in dessen Verlauf Zahlen mit ungef¨ ahr 200 Stellen nur mit monatelanger Rechenzeit und großem Hardwareeinsatz faktorisiert werden konnten. Aufgabe 3.17 Verschl¨ usseln Sie mit dem RSA-Algorithmus f¨ ur p = 3, q = 5 (also n = 15) und b = 7 das Dokument“ x = 8. Berechnen Sie a mit a · b ≡ 1 mod (p − 1)(q − 1), ” und entschl¨ usseln Sie damit Ihr Ergebnis. ussel k¨ onnen mit dem Chinesischen Die Rechnungen f¨ ur den privaten Schl¨ Restsatz beschleunigt werden. Mit ihm kann man statt mit der sehr großen Zahl n = p · q, die zu aufw¨ andigen Rechnungen f¨ uhrt, einzeln mit den viel kleineren (aber immer noch sehr großen) Faktoren p und q rechnen. Diese d¨ urfen nat¨ urlich nicht ¨ offentlich bekannt sein, da man sonst mit dem ¨ offentlichen Schl¨ ussel leicht den privaten Schl¨ ussel berechnen k¨ onnte. Daher ist es sinnvoll, einen kleinen Wert b (mit dem relativ schnell gerechnet werden kann) f¨ ur den ¨ offentlichen und
3.5 RSA-Verschl¨ usselung
171
einen großen Wert a f¨ ur den privaten Schl¨ ussel zu verwenden und f¨ ur das Rechnen mit dem privaten Schl¨ ussel den Restsatz zur Beschleunigung einzusetzen. Wir werden statt x = y a mod n die Zahlen mp := x mod p und mq := x mod q berechnen. Wie man das geschickt macht, sehen wir gleich. Wenn wir erst einmal onnen wir daraus mit dem Chinesischen Restsatz x mp und mq kennen, dann k¨ berechnen, denn x ≡ mp mod p ∧ x ≡ mq mod q. Jetzt sehen wir uns an, wie wir tats¨ achlich mp und mq berechnen k¨ onnen. (3.25)
mp = x mod p = (y a mod n) mod p = (y a mod p · q) mod p = y a mod p. Entsprechend ist mq = y a mod q. Um jetzt den Exponenten dramatisch zu verkleinern, falls a viel gr¨ oßer als p bzw. q ist, ben¨ otigen wir: Satz 3.29 (Folgerung aus dem kleinen Satz von Fermat) Sei p eine Primzahl und a, y ∈ N. Dann gilt: (3 24)
y a mod p = y a mod (p−1) mod p = (y mod p)a mod (p−1) mod p. Mit dieser Folgerung erhalten wir mp = y a mod (p−1) mod p und mq = y a mod (q−1) mod q, und die rechten Seiten lassen sich schneller berechnen als y a mod n. Beweis zu Satz 3.29: Ist p ein Teiler von y, dann sind beide Seiten gleich null, und die Aussage ist gezeigt. Falls p dagegen y nicht teilt, gibt es nach dem kleinen Satz von Fermat (Satz 3.24) ein k1 ∈ N0 mit y p−1 = 1 + k1 p.
(3.28)
Damit erhalten wir f¨ ur ein k2 ∈ N0 unter Verwendung des binomischen Lehrsatzes (3.12):
k2 mod p y a mod p = y a mod (p−1)+k2 (p−1) mod p = y a mod (p−1) · y p−1
(3.28) = y a mod (p−1) · (1 + k1 p)k2 mod p k
2 (3.12) k2 k2 −k a mod (p−1) k = y · 1 (k1 p) mod p k k=0
k2 k 2 y a mod (p−1) · 1 + p · k1k pk−1 mod p = k k=1
= y a mod (p−1) mod p.
172
3 Zahlen und Strukturen
Jetzt ist der Exponent von y a mod (p−1) gegebenenfalls viel kleiner als a, er kann aber immer noch sehr groß sein. Außerdem haben wir nicht xb optimiert. Bei der Berechnung beider Potenzen kann der folgende, rekursiv anzuwendende Trick f¨ ur b > 1 helfen: b b y2 · y2, falls b gerade b y = b−1 b−1 2 2 y ·y · y, falls b ungerade. Dabei m¨ ussen die Potenzen nat¨ urlich jeweils nur einmal und nicht doppelt berechnet werden. Außerdem k¨ onnen wir mit (3.23) Modulo-Werte der einzelnen Faktoren bilden und so mit noch kleineren Faktoren rechnen: y b mod n ⎧ ! !! ⎨ y 2b mod n · y 2b mod n mod n, falls b gerade ! ! ! = b−1 b−1 ⎩ y 2 mod n · y 2 mod n · (y mod n) mod n, falls b ungerade.
3.6
Reelle Zahlen
3.6.1
Von den Br¨ uchen zu den reellen Zahlen
Dezimalzahlen, die unendlich viele Nachkommastellen aber keine Periode besitzen, sind keine Br¨ uche. Diese werden aber auch ben¨ otigt: Nach dem Satz von Pythagoras ist die Entfernung zwischen den Punkten (0, 0) und (1, 1) in der √ √ osung der Gleichung x2 = 2. Diese Ebene 12 + 12 = 2, also die positive L¨ real existierende Streckenl¨ ange (siehe Abbildung 3.3) liegt aber dummerweise nicht in Q, was wir mit einem indirekten Beweis zeigen wollen: osung der Gleichung x2 = 2, also G¨ abe es einen Bruch pq mit p, q ∈ N als L¨
2 p p2 = 2 ⇐⇒ 2 = 2 ⇐⇒ p2 = 2q 2 , q q so g¨ abe es ein Problem mit der eindeutig existierenden Primzahlzerlegung von p und q: Wegen der Quadrate kommt in p2 und q 2 jeder Primfaktor geradzahlig oft vor. Jetzt steht aber auf der rechten Seite ein zus¨ atzlicher Faktor 2. Damit kommt der Primfaktor 2 rechts ungeradzahlig oft vor. Das ist ein Widerspruch zur Eindeutigkeit der Zerlegung.
0
1 √2
√ Abb. 3.3 2 ist eine real existierende Stelle auf der Zahlengeraden
3.6 Reelle Zahlen
173
Daher werden die reellen Zahlen so axiomatisch eingef¨ uhrt, dass jeder Punkt auf der Zahlengeraden einer reellen Zahl entspricht (vgl. Abbildung 3.3). Praktisch bedeutet das, dass man Dezimalzahlen mit beliebigen, auch nichtperiodischen Nachkommateilen erh¨ alt. Die reellen Zahlen, die keine Br¨ uche sind, √ heißen irrationale Zahlen, z. B. ist 2 irrational. Ebenso sind die Zahlen e und π, auf die wir noch eingehen werden, irrational. orper der Formal erweitert man in der Mathematik den K¨ orper Q so zum K¨ uche enthalten sind, die Zahlen mittels reellen Zahlen R, dass weiterhin die Br¨ der Relation ≥“ verglichen werden k¨ onnen, diese Relation vertr¨ aglich mit der ” Addition und Multiplikation ist (d. h. x ≥ y =⇒ x + c ≥ y + c, aus x ≥ 0 und y ≥ 0 folgt x · y ≥ 0), und es sich um die kleinste“ Erweiterung handelt, die ” eine vollst¨ andige Zahlenmenge ist. Der Begriff der Vollst¨ andigkeit kann auf verschiedene Weisen erkl¨ art werden. Anschaulich bedeutet er, dass es auf dem Zahlenstrahl keine L¨ ucken gibt. Formal kann man das mit einer Intervallschachtelung ausdr¨ ucken. Eine Menge [a, b] := {x ∈ R : a ≤ x ≤ b} ⊂ R heißt ein abgeschlossenes Intervall. Das Adjektiv abgeschlossen“ wird ver” wendet, da die Randpunkte a und b zum Intervall geh¨ oren. L¨ asst man sie weg, so spricht man von einem offenen Intervall ]a, b[ := {x ∈ R : a < x < b} ⊂ R. H¨ aufig findet man auch eine Mischform wie [a, b[, bei der a aber nicht b zum Intervall geh¨ ort. Statt der nach außen gerichteten eckigen Klammern werden oft runde Klammern verwendet, sofern es keine Verwirrung mit Zahlenpaaren gibt: (a, b) := ]a, b[. Man spricht von einer Intervallschachtelung, wenn man zu jedem n ∈ N Zahlen an ∈ R und bn ∈ R mit an < bn hat, so dass die Intervalle [an , bn ] wie folgt ineinander enthalten sind (n ∈ N): [an , bn ] ⊂ [an−1 , bn−1 ] ⊂ · · · ⊂ [a2 , b2 ] ⊂ [a1 , b1 ]. Mit wachsendem n werden also die Zahlen an nicht kleiner und die Zahlen bn nicht gr¨ oßer. Beispielsweise bilden die Intervalle [1 − n1 , 1 + n1 ] eine Intervallschachtelung. Die reellen Zahlen werden nun so axiomatisch eingef¨ uhrt, dass es zu jeder Intervallschachtelung (mindestens) eine Zahl x0 ∈ R gibt, die in allen Intervallen liegt (Vollst¨ andigkeitsaxiom). Das ist insbesondere dann eine echte Bedingung, wenn die Intervalll¨ angen bn − an mit wachsendem n gegen null streben. 1 2
#include < stdio .h > void main ( void ) {
174
3 4 5 6 7 8 9 10 11 12 13 14 15 16
3 Zahlen und Strukturen
double epsilon ; printf ( " Epsilon ? " ); scanf ( " % lf " , & epsilon ); double a = 0; double b = 2; double mitte , fehler ; do { mitte = ( a + b ) / 2; fehler = 2 - ( mitte * mitte ); i f ( fehler < 0) b = mitte ; e l s e a = mitte ; } while ( fehler < - epsilon || fehler > epsilon ); printf ( " sqrt (2) = \% lf \ n " , mitte ); }
√ Listing 3.5 Intervallschachtelung zur Berechnung der positiven L¨ osung 2 von x2 = 2 bei einzugebender Genauigkeit epsilon: Als N¨ aherungswert wird die√ Mitte des kleinsten Intervalls gew¨ ahlt. Wir beginnen die Suche mit a = 0 und b = 0, da 2 zwischen diesen Zahlen liegt.
√ Mit den reellen Zahlen verf¨ ugen wir nun neben 2 (siehe Listing 3.5) noch urlichen Zahl u ¨ ber viele andere Wurzeln. Zur Basis a ∈ R, a ≥ 0, und einer nat¨ 1 osung x der n ∈ N ist a n definiert als die (eindeutige) nicht-negative reelle L¨ Gleichung xn = a. Die Schreibweise ist wegen der Potenzregel (3.1) von Seite 117 sinnvoll gew¨ ahlt, denn wir d¨ urfen so rechnen: !n 1 1 an = a n ·n = a1 = a. 1
Die Zahl a n ist die n-te Wurzel von a. Neben der Schreibweise mit dem √ 1 ur n = 2 kennen wir bereits Exponenten n1 ist n a := a n u ¨blich, insbesondere f¨ √ √ a := 2 a. 1
92 =
√
9 = 3, denn 32 = 9,
1
83 =
√ 3
8 = 2, denn 23 = 8.
√ osung x = − n −a, denn Falls a < 0 und n ungerade ist, hat xn = a die L¨
√ √ 1 n [(−1) n −a]n = (−1)n [ n −a]n = (−1)n (−a) n = (−1)(−a) = a. Wir k¨ onnen daher ungerade Wurzeln aus negativen Zahlen ziehen und benutzen √ √ √ √ dazu die gleiche Schreibweise n a := − n −a, z. B. ist 3 −27 = − 3 27 = −3, √ denn (−3)3 = −27. Beachten Sie aber bitte, dass 4 −16 (zumindest als reelle Zahl) nicht definiert ist. Wir k¨ onnen nun auch eine Basis a > 0 mit einem beliebigen Bruch pq potenzieren u ¨ ber
1 p p √ a q := a q = [ q a]p ,
3.6 Reelle Zahlen
175
wobei die Zahl tats¨ achlich unabh¨ angig von der konkreten Darstellung des Bruchs 2 ist, z. B. 27 3 = 32 = 9. Die bereits im Rahmen von Halbgruppen gefundenen Rechenregeln f¨ ur Potenzen gelten unver¨ andert auch, wenn die Exponenten Br¨ uche sind. Sie gelten sogar bei beliebigen reellen Zahlen als Exponenten. Daf¨ ur m¨ ussen wir aber die Potenzen noch erkl¨ aren. Wir k¨ onnen reelle Zahlen per Intervallschachtelung beliebig genau durch Br¨ uche ann¨ ahern. Zu a ≥ 0 und x ∈ R gibt es Zahlen x1 , x2 , x3 , · · · ∈ Q, die “gegen“ x streben. Damit ist die Konvergenz der Folge (xn )∞ n=1 gegen den Grenzwert x gemeint. Den Begriff der Konvergenz lernen wir, wie bereits erw¨ ahnt, erst in Kapitel 4.4 kennen. Die bereits defiangig von nierten Potenzen ax1 , ax2 , ax3 , . . . streben dann (konvergieren unabh¨ ) gegen eine eindeutige Zahl, die wir ax der Wahl der konkreten Folge (xn )∞ n=1 nennen. Um ax so mathematisch exakt einzuf¨ uhren, muss die Wohldefiniertheit bewiesen werden. Das w¨ urde hier aber zu weit f¨ uhren, wir k¨ onnen voraussetzen, x art ist. dass a sinnvoll erkl¨ Aufgabe 3.18 ur n ∈ N, denn das Produkt von n Zahlen gr¨ oßer Ist a > 1, so ist an > 1 f¨ 1
eins ist ebenfalls gr¨ oßer eins. Zeigen Sie indirekt, dass auch a n > 1 und damit n n ur jeden Bruch m > 0 ist. a m > 1 f¨ Von besonderer Bedeutung sind die Basen a = 2 und a = 10. Noch wichtiger ist aber a = e, wobei e die Euler’sche Zahl e = 2,718281828 . . . ist. Eine genaue Definition der Zahl e als Grenzwert holen wir auf Seite 241 nach. Die Bedeutung stammt daher, dass die Exponentialfunktion f (x) := ex eine ganz besondere Eigenschaft hat: Ihre Ableitung stimmt mit f u ¨berein. Dadurch wird f zu einem elementaren Baustein der L¨ osungen von Differenzialgleichungen, u ange in der Natur beschrieben sind. Damit werden ¨ ber die sehr viele Vorg¨ wir uns in diesem Buch zwar nicht besch¨ aftigen, aber wir ben¨ otigen f und ihre Umkehrfunktion, den (nat¨ urlichen) Logarithmus, unter Anderem f¨ ur Laufzeitabsch¨ atzungen von Algorithmen.
3.6.2
Einige reelle Funktionen
Nachdem wir bereits Wurzeln und die Exponentialfunktion kennen gelernt haben, wollen wir in den folgenden Abschnitten ganz kurz die wichtigsten reellen Funktionen (Funktionen mit Definitions- und Wertebereich in R) besprechen.
3.6.2.1
Polynome
Bei der Exponentialfunktion f (x) = ex befindet sich die Variable im Exponenten. Das stellt sich beim Rechnen oft als schwieriger heraus, als wenn die
176
3 Zahlen und Strukturen
Variable in der Basis einer Potenz steht. Daher beginnen wir mit diesem eher einfacheren Fall, der z. B. bei Polynomen vorliegt. Definition 3.30 (Polynome) ur einen festen Exponenten Ein Monom ist eine Funktion f (x) = xn f¨ ur x = 0, obwohl n ∈ N0 . Im Spezialfall n = 0 ist f (x) = 1 – und zwar auch f¨ streng genommen 00 nicht definiert ist. Polynome sind Linearkombinationen (vgl. Seite 282) von Monomen. Damit ist gemeint, dass jedes Polynom eine Darstellung pn (x) = a0 + a1 x + a2 x2 + · · · + an xn =
n
a k xk
k=0
mit Koeffizienten ak ∈ R mit an = 0 besitzt. Der h¨ ochste auftretende Exponent n heißt der Grad des Polynoms. Ist der Leitkoeffizient an = 1, so heißt das Polynom normiert. Die Menge aller Polynome bildet einen Ring. Die Addition zweier Polynome f¨ uhrt lediglich zur Addition ihrer Koeffizienten. Die Multiplikation zweier (von null verschiedener) Polynome vom Grad n und m f¨ uhrt zu einem Polynom vom Grad n + m. Die Menge der Polynome vom Grad h¨ ochstens n w¨ are also kein Ring, da die Multiplikation aus der Menge hinausf¨ uhrt. Ein wichtiger Spezialfall sind Polynome vom Grad 1: p(x) = mx + b. Der Funktionsgraph ist eine Gerade (siehe Abbildung 3.4). Sie schneidet die y-Achse im Punkt (0, b). Falls m = 0 ist, dann gibt es auch genau einen Schnittpunkt (−b/m,0) mit der x-Achse. Sonst ist p(x) = b, und bei b = 0 gibt es keinen Schnittpunkt mit der x-Achse (Parallele zur x-Achse). Bei b = 0 ist die Gerade die x-Achse. Der Faktor m heißt die Steigung der Geraden. Er dr¨ uckt den Quotienten aus H¨ ohenzuwachs und Horizontaldifferenz der Geraden aus. Wenn auf einem x-Achsenst¨ uck der L¨ ange 3 die Gerade vertikal um den Wert 4 nach oben geht, dann ist m = 4/3. Wenn Sie in einer Computergrafik zwei Punkte durch eine Strecke verbinden m¨ ochten, dann ben¨ otigen Sie die Geradengleichung der Geraden, die durch die Punkte geht und auf der die Strecke liegt. Zum Aufstellen der Gleichung gibt es viele M¨ oglichkeiten. Zwei g¨ angige sind: Sind zwei verschiedene Punkte (x1 , y1 ) und (x2 , y2 ) gegeben, so geht genau eine Gerade durch diese beiden Punkte. Ist x1 = x2 , dann handelt es sich um eine Parallele zur y-Achse. Allerdings kann die Gerade nicht als Funktion von x aufgefasst werden. Denn f¨ ur den Wert x = x1 gibt es unendlich viele y-Werte, die entsprechende Relation ist
3.6 Reelle Zahlen
177
also nicht rechtseindeutig. Ist x1 = x2 , so ist die Gerade u ¨ ber eine Funktion darstellbar: y2 − y1 y2 − y1 y= x + y1 − x1 . x2 − x1 x2 − x1 m
b
Das ist die Zwei-Punkte-Form der Geradengleichung. Setzen Sie x1 und x2 f¨ ur x ein, um zu verifizieren, dass tats¨ achlich beide Punkte getroffen werden. Ist ein Punkt (x1 , y1 ) und die Steigung m gegeben, so ist die eindeutige Gerade mit dieser Steigung durch den Punkt festgelegt u ¨ber y = mx + (y1 − x1 m). Dies ist die Punkt-Steigungsform der Geradengleichung.
y2
y2 − y1
y1
x2 − x1
b x1
x2
1 Abb. 3.4 Gerade mit Steigung m = xy22 −y −x1 y2 −y1 und y-Achsenabschnitt b = y1 − x1 · x2 −x1
Stellen, an denen eine reelle Funktion den Wert null annimmt, m¨ ussen h¨ aufig bestimmt werden. Das liegt daran, dass wir das L¨ osen von Gleichungen als Nullstellensuche auffassen k¨ onnen: x2 + 3x = −x + 7 ⇐⇒ x2 + 4x − 7 = 0. Der Fundamentalsatz der Algebra besch¨ aftigt sich damit, wie Polynome als Produkt einfacher Faktoren geschrieben werden k¨ onnen. Er besagt, dass jedes normierte Polynom p(x) = xn + an−1 xn−1 + · · · + a1 x + a0 mit n ∈ N und Koeffizienten ak ∈ R (bis auf die Reihenfolge eindeutig) darstellbar ist als Produkt von Linearfaktoren (x − bk ) und quadratischen Termen (x − ck )2 + d2k . Beispielsweise gilt: x4 − 5x3 + 7x2 − 5x + 6 = (x2 + 1)(x2 − 5x + 6) = (x2 + 1)(x − 2)(x − 3). Die maximal n Nullstellen k¨ onnen in dieser Darstellung direkt als bk abgelesen werden, im Beispiel sind es 2 und 3. Erweitert man die reellen Zahlen zu den komplexen Zahlen C, indem man eine neue Zahl i hinzuf¨ ugt, f¨ ur die i2 = −1 gilt, dann l¨ asst sich jedes Polynom n-ten Grades als Produkt von n (komplexen) Linearfaktoren schreiben. In diesem Sinne hat dann jedes Polynom vom Grad n auch genau n komplexe Nullstellen. Mit komplexen Zahlen k¨ onnten wir also 2 2 2 auch (x + 1) = (x − 0) + 1 weiter zerlegen – und zwar in (x − i)(x + i).
178
3 Zahlen und Strukturen
Bei Polynomen von Grad 1 findet man sehr leicht die Nullstellen, also die Schnittstellen der Gerade mit der x-Achse. Bei Polynomen p(x) = x2 + px + q vom Grad 2 hilft die p-q-Formel: Alle reellen L¨ osungen der quadratischen √ √ Gleichung x2 + px + q = 0 ergeben sich zu − p2 + D und − p2 − D mit der p 2 Diskriminante D := 2 − q. Das sehen wir sofort mittels quadratischer Erg¨ anzung: p p !2 p !2 +q 0 = x2 + px + q ⇐⇒ 0 = x2 + 2x + − 2 2 2 p ⇐⇒ 0 = x + 2
!2
p − 2
!2
quadratische Erg¨ anzung
+ q ⇐⇒
x+
p 2
!2
= D.
Es h¨ angt nun von D ab, ob es keine, eine oder zwei L¨ osungen gibt. Ist D > 0, so gibt es zwei, ist D = 0, so fallen beide Ergebnisse der p-q-Formel zu einer L¨ osung zusammen. Ist D < 0, dann existiert die Wurzel nicht als reelle Zahl, es gibt keine reelle L¨ osung. F¨ ur Polynome mit Grad n = 3 (siehe (Goebbels und Ritter, 2013, S. 149)) oder n = 4 gibt es komplizierte Formeln, ab n = 5 kann es selbst diese in allgemeiner Form nicht mehr geben. Kennt man aber eine Nullstelle x0 , so kann man ur das veru ¨ ber p(x)/(x − x0 ) den Grad des Polynoms um eins reduzieren und f¨ bleibende Polynom die restlichen Nullstellen suchen. Die Polynomdivision l¨ asst sich v¨ ollig analog zur schriftlichen Division von Zahlen durchf¨ uhren, alternativ erh¨ alt man sie aber auch als Ergebnis des Horner-Schemas. Mit dem HornerSchema werden wir effizient verschiedene Stellenwertdarstellungen von Zahlen ineinander umrechnen (siehe Seite 192). Als Nebeneffekt werden wir sehen, wie wir damit auch durch Linearfaktoren dividieren k¨ onnen. Aufgabe 3.19 Geben Sie ein Polynom vom Grad 4 an, dessen Funktionsgraph durch die Punkte (1, 2), (2, 1), (3, 2) und (4, 1) verl¨ auft. Ein Polynom, das eine solche Vorgabe erf¨ ullt, heißt Interpolationspolynom. Betrachten Sie dazu das Polynom (x−2)(x−3)(x−4) (1−2)(1−3)(1−4) an den Stellen x = 1, x = 2, x = 3 und x = 4.
3.6.2.2
Exponentialfunktion und Logarithmus
Jetzt betrachten wir den Fall, dass die Variable im Exponenten steht. Die Funktion exp(x) := ex mit Definitionsbereich R und Wertebereich ]0, ∞[ heißt die Exponentialfunktion und ist die Abbildung, die jedem x ∈ R die (nach den Bemerkungen des Abschnitts 3.6.1 wohldefinierte) Zahl ex zuordnet. Da e > 2 ist, ist ex noch großer als 2x . Was das bedeutet, haben wir schon auf ¨ Seite 5 beschrieben. Uber die Exponentialfunktion werden viele Wachstumsund Zerfallsprozesse in der Natur beschrieben. Ist beispielsweise y(t) die Masse eines zerfallenden radioaktiven Stoffs in Abh¨ angigkeit der Zeit t, dann gilt
3.6 Reelle Zahlen
179
y(t) = c · exp(k · t) mit der Stoffmenge c zum Zeitpunkt t = 0 und der materialabh¨ angigen negativen Zerfallskonstante k. Die Rechenregeln f¨ ur Exponenten f¨ uhren unmittelbar zu Rechenregeln f¨ ur die Exponentialfunktion: exp(x + y) = ex+y = ex ey = exp(x) exp(y), exp(xy) = exy = [ex ]y = [exp(x)]y , exp(0) = e0 = 1,
exp(1) = e1 = e,
(3.29)
exp(−x) = e−x =
1 1 = . x e exp(x)
ur x > 0 schließen (siehe Aufgabe 3.18 auf Seite Aus e > 1 k¨ onnen wir ex > 1 f¨ 175, deren Ergebnis sich auf positive reelle Exponenten u asst). Damit ¨ bertragen l¨ folgt aber f¨ ur x > y: exp(x) = exp(y + (x − y)) = exp(y) exp(x − y) > exp(y) · 1 = exp(y). Ist also x > y, so ist auch exp(x) > exp(y). Wir sagen, dass die Funktion streng monoton wachsend ist. Damit ist sie aber insbesondere injektiv (vgl. Seite 54), so dass wir nach einer Umkehrfunktion schauen k¨ onnen. Suchen wir also umgekehrt zum gegebenen Funktionswert y = f (x) das zugeh¨ orige x, so benutzen wir den nat¨ urlichen Logarithmus ln als Umkehrfunktion zu exp. Da exp den Wertebereich ]0, ∞[ hat, ist ln : ]0, ∞[→ R. ln(exp(x)) = x, x ∈ R;
exp(ln(x)) = x, x ∈]0, ∞[.
In Abbildung 3.5 erkennen wir, dass der Funktionsgraph von ln(x) durch Spiegelung des Graphen von ex an der Hauptdiagonalen (Punkte mit x = y) entsteht. Das ist generell bei Funktionsgraphen von Umkehrfunktionen so, da man quasi x- und y-Achse durch die Spiegelung vertauscht. Insbesondere sehen wir, dass auch der nat¨ urliche Logarithmus streng monoton w¨ achst: x < y ⇐⇒ ln(x) < ln(y)
(3.30)
Die wichtigen Rechenregeln ln(x) + ln(y) = ln(xy)
und
ln(x) − ln(y) = ln
x y
(3.31)
folgen sofort aus den Eigenschaften der Exponentialfunktion. Um das zu sehen, nutzen wir aus, dass wegen der strengen Monotonie bzw. Injektivit¨ at aus exp(a) = exp(b) insbesondere a = b folgt. Es gen¨ ugt also, die beiden Gleichungen in einer Form nachzurechnen, bei der auf beiden Seiten exp angewendet ist: exp(ln(x) + ln(y)) = exp(ln(x)) exp(ln(y)) = xy = exp(ln(xy)).
180
3 Zahlen und Strukturen
Da die Funktionswerte der Exponentialfunktion u ¨ bereinstimmen, folgt wegen der Injektivit¨ at ln(x) + ln(y) = ln(xy). Analog ergibt sich die zweite Regel aus x x exp(ln(x)) . exp(ln(x) − ln(y)) = = = exp ln exp(ln(y)) y y Wichtige Funktionswerte sind ln(1) = 0 und ln(e) = 1. Außerdem gelten die weiteren Rechenregeln (3.31) 1 1 , denn − ln(x) = ln(1) − ln(x) = ln , − ln(x) = ln x x =0 y
y
ln(x ) = y ln(x), denn exp(ln(x )) = xy = [exp(ln(x))]y
(3.29)
= exp(y ln(x)).
4
2 exp(x) 0 ln(x) -2
Abb. 3.5 exp(x) auf ] − ∞, ∞[ und ln(x) auf ]0, ∞[
-4 -4
-2
0
2
4
Aufgabe 3.20 Vereinfachen Sie die folgenden Ausdr¨ ucke: n k=1
exp (k) ,
n
ln
k=1
k k+1
.
In der Informatik haben wir es weniger mit Potenzen von e als mit Potenzen der Zwei zu tun. Wir ersetzen daher nun e durch eine beliebige Basis a > 0 und origen Umkehrfunktion betrachten f : R →]0, ∞[, f (x) := ax , mit der zugeh¨ ur a = 10 wird oft lg statt loga : ]0, ∞[→ R (Logarithmus zur Basis a). F¨ ur a = 2 ist auch ld (Logarithmus Dualis) statt log2 u log10 geschrieben, f¨ ¨ blich. Wenn Sie Potenzfunktionen und Logarithmen implementieren wollen (was nicht n¨ otig ist, da sie i. Allg. bereits zur Verf¨ ugung stehen), dann m¨ ussten Sie das nicht f¨ ur jede m¨ ogliche Basis a tun. Die Funktionen zu verschiedenen Basen lassen sich ineinander umrechnen (wobei wir auf dem Computer ggf. Rundungsfehler dadurch erhalten, dass e nicht exakt darstellbar ist): ax = [eln(a) ]x = ex ln(a) = exp(x ln(a)),
loga (x) =
ln(x) , ln(a)
(3.32)
3.6 Reelle Zahlen
181
denn um die ¨ aquivalente Gleichung loga (x) ln(a) = ln(x) zu zeigen, nutzen wir wieder die Injektivit¨ at der Exponentialfunktion aus und wenden diese auf beide Seiten an. Dabei erhalten wir den gleichen Funktionswert: exp(loga (x) ln(a)) = exp(ln(a))loga (a) = aloga (x) = x und exp(ln(x)) = x. Wegen der Umrechnungsregeln gelten die gleichen Rechengesetze wie f¨ ur exp(x) und ln(x), z. B.: (3.31) ln(xy) (3.32) 1 = loga (xy), [ln(x) + ln(y)] = ln(a) ln(a) x loga (x) − loga (y) = loga , loga (xy ) = y loga (x). y (3.32)
loga (x) + loga (y) =
3.6.2.3
Trigonometrische Funktionen
Die trigonometrischen Funktionen haben mit Winkeln zu tun. Wir werden sie beispielsweise zum Drehen in der Computergrafik einsetzen, siehe Kapitel 5.6. Historisch werden Vollwinkel in 360◦ eingeteilt (Gradmaß, Taste DEG“ auf ” einem Taschenrechner). Diese Einteilung ist f¨ ur die Anwendung in der Mathematik wenig geeignet, hier wird haupts¨ achlich das Bogenmaß (Taschenrechner: RAD“) verwendet: Der Einheitskreis (ein Kreis mit Radius 1) hat den Umfang ” α · 2π der gleiche Winkel 2π. Ist α ein Winkel im Gradmaß, dann ist x = 360 im Bogenmaß. Dies ist genau die L¨ ange des Bogens, den der Winkel aus dem Einheitskreis mit Umfang 2π schneidet (vgl. x und y in Abbildung 3.8). Damit urlich verwenden wir eine nat¨ urliche Gr¨ oße, w¨ ahrend die Einteilung in 360◦ willk¨ ist. x 360 2π α = bzw. α = x und x = α. 360 2π 2π 360 Folgende Eckdaten sollten Sie sich merken:
◦ π =45 ˆ ◦ , π2 =90 ˆ ◦ , π =180 ˆ . 4
AC
A
x
BC = AC sin(x)
C
B AB = AC cos(x)
Abb. 3.6 Dreieck zur Definition von Sinus und Kosinus: Die Strecke zwischen A nach B ist die Ankathete, sie liegt am Winkel x an. Die Gegenkathete zwischen B und C liegt dem Winkel x gegen¨ uber. Die Strecke zwischen A und C ist die Hypotenuse.
182
3 Zahlen und Strukturen
Definition 3.31 Wir betrachten ein rechtwinkliges Dreieck mit den Eckpunkten A, B und C, siehe Abbildung 3.6. Die L¨ ange der Seite, die A und B verbindet sei AB. angen. Der Winkel bei Entsprechend sind BC und AC die weiteren Seitenl¨ A sei 0 < x < π2 und der Winkel bei B sei der rechte Winkel π2 .
% Gegenkathete , Hypotenuse $ % BC Gegenkathete tan(x) := , Ankathete AB
sin(x) :=
BC AC
$
% Ankathete , Hypotenuse $ % AB Ankathete cot(x) := . BC Gegenkathete
cos(x) :=
AB AC
$
Die Funktion sin heißt der Sinus, cos heißt Kosinus, tan heißt Tangens und cot Kotangens. sin(x) und cot(x) = cos(x) ussten Insbesondere ist also tan(x) = cos(x) sin(x) . Eigentlich m¨ wir uns u berlegen, dass die Funktionswerte als Verh¨ a ltnis von Seitenl¨ angen ¨ tats¨ achlich nur vom Winkel abh¨ angen, dass also das Seitenverh¨ altnis unabh¨ angig von der tats¨ achlichen Seitenl¨ ange ist. Das kann man aber leicht mit Strahlens¨ atze nachpr¨ ufen (vgl. Abbildung 3.7 und (Goebbels und Ritter, 2013, S. 403)).
Abb. 3.7 Die bei der Definition der trigonometrischen Funktionen verwendeten Streckenverh¨ altnisse sind unabh¨ angig von den tats¨ achlichen Streckenl¨ angen.
¨ Uber den Einheitskreis lassen sich die trigonometrischen Funktionen außer& ' halb des Winkelbereichs 0, π2 fortsetzen, siehe Abbildung 3.8. Damit werden sin(x) und cos(x) 2π-periodisch, d. h., sin(x + 2π) = sin(x) und cos(x + 2π) = cos(x). Das bewirkt, dass Tangens und Kotangens π-periodisch sind. Perioden, Definitions- und Wertebereiche sind in Tabelle 3.5 aufgelistet.
A
x
B cos(x) A sin(y)
cos(x) B
y
tan(x)
sin(x)
C
C
Abb. 3.8 Fortsetzung der trigonometrischen Funktionen am Einheitskreis (mit Radius 1): Zeigen Kosinus- oder SinusPfeil nach links oder unten, dann sind die entsprechenden Funktionswerte negativ.
¨ Uber die Konstruktion am Einheitskreis k¨ onnen wir auch sofort die Funktionsgraphen des Sinus und Kosinus ablesen (siehe Abbildung 3.9). Damit erhalten
3.6 Reelle Zahlen
183
wir die Funktionsgraphen in Abbildung 3.10. H¨ aufig ben¨ otigte Funktionswerte sind in Tabelle 3.6 zusammengefasst.
x x
3π/2 π
π/2
Abb. 3.9 Konstruktion des Funktionsgraphen von sin(x)
2 1.5 cos x
1
sin x
0.5 0 -0.5 -1 tan x
-1.5 -2 −π
− 3π 4
− π2
cot x − π4
0
π 4
π 2
3π 4
π
Abb. 3.10 sin(x), cos(x) (Graph des Sinus um π2 nach links verschoben), tan(x) (mit ¨ von links unten nach rechts oben steigenden Asten), cot x (mit von links oben nach ¨ rechts unten fallenden Asten) auf [−π, π]
Am Einheitskreis in Abbildung 3.8 lassen sich eine Reihe von Eigenschaften der trigonometrischen Funktionen ablesen: | sin(x)| ≤ |x|, sin(x + π) = − sin(x) und cos(x + π) = − cos(x), sin x + π2 = cos(x), cos x − π2 = sin(x) (siehe auch Abbildung 3.11), sin(x) = − sin(−x), tan(x) = − tan(−x): Wir k¨ onnen die Funktionsgraphen um 180◦ bzw. π um den Nullpunkt drehen und erhalten wieder das gleiche Bild. Funktionen mit dieser Eigenschaft heißen ungerade Funktionen. Der Begriff hat aber nichts mit ungeraden Zahlen zu tun. cos(x) = cos(−x): Der Funktionsgraph ist an der y-Achse gespiegelt. Funktionen mit dieser Eigenschaft heißen gerade Funktionen. Die soeben beschriebenen Symmetrieeigenschaften vereinfachen bisweilen Rechnungen. Dabei hilft die Aussage der folgenden Aufgabe:
184
3 Zahlen und Strukturen
Tab. 3.5 Definitions-, Wertebereich und die jeweilige kleinste Periode: Die Nullstellen des Kosinus sind nicht im Definitionsbereich des Tangens, die Nullstellen des Sinus liegen nicht im Definitionsbereich des Kotangens.
Funktion
Definitionsbereich
Wertebereich
kleinste Periode
sin(x)
D=R
W = [−1, 1]
p = 2π
cos(x)
W = [−1, 1]
p = 2π
tan(x)
D=R π D = R \ 2 + kπ, k ∈ Z
W =R
p=π
cot(x)
D = R \ {kπ, k ∈ Z} ,
W =R
p=π
Aufgabe 3.21 Zeigen Sie, dass das Produkt von zwei ungeraden oder zwei geraden Funktionen gerade ist und dass das Produkt einer geraden und einer ungeraden Funktion (anders als bei Zahlen) ungerade ist. Tab. 3.6 Wichtige Funktionswerte von Sinus und Kosinus, die Wurzelschreibweise dient als Eselsbr¨ ucke
0◦ 0
Sinus
1=
sin(x+ π/2 )=cos(x)
Kosinus
0=
√
1 2 √0 1 2 4
x+π/2 x cos(x+ π/2 ) = −sin(x)
1 2
30◦
45◦
60◦
90◦
π 6
π 4
π 3
π 2
√ = 12 1 √ 1 2 3
1
cos(x)
√
1 2 √2 1 2 2
1 2
1 2
√
3 √ 1 = 2 1
1= 0=
√
1 2 √4 1 2 0
180◦ π 0 −1
sin(x)
Winkel
` ´ π Abb. ` 3.11 ´ sin x + 2 = cos(x) und π cos x + 2 = − sin(x)
Beispiel 3.32 (L¨ ange eines Steinerbaums) √ Wir m¨ ussen noch die L¨ ange 1 + 3 des rechten Spannbaums aus Abbildung 2.48 auf Seite 112 nachrechnen. Das k¨ onnen wir nun mit den trigonometrischen Funktionen tun, siehe Abbildung 3.12: Die L¨ ange l jeder der vier a ¨ußeren Kanten ergibt sich u ¨ ber (vgl. Tabelle 3.6) ! 1 π 1 1 1 = √ = √ . = 2 ⇐⇒ l = sin 3 l 2 sin π3 2 · 12 3 3
3.6 Reelle Zahlen
185
Die L¨ ange b der mittleren Kante ist ! π 1 · l = 1 − 2 · · l = 1 − l. d = 1 − 2 · cos 3 2 Damit erhalten wir insgesamt als L¨ ange des Spannbaums √ 3 4 · l + d = 1 + 3 · l = 1 + √ = 1 + 3. 3 1 d 1/2
1
π/3
l
Abb. 3.12 Zur Berechnung der L¨ ange eines Steinerbaums: Wir unterteilen einen 120◦ Winkel in zwei 60◦ Winkel ( π3 )
Eine oft verwendete Regel ergibt sich ebenfalls direkt aus der Darstellung von sin(x) und cos(x) im Einheitskreis: Sie bilden Gegen- und Ankathete in einem rechtwinkligen Dreieck mit Hypotenusenl¨ ange 1. Damit ist der Satz des Pythagoras anwendbar: (3.33) sin2 (x) + cos2 (x) = 1. Hier haben wir die u ¨ bliche Schreibweise sin2 (x) := sin(x)2 verwendet, bei der asst sich nicht mit sin(x2 ) man auch ganz auf Klammern verzichten kann: sin2 x l¨ verwechseln. Beim Satz des Pythagoras betrachtet man einen rechten Winkel γ = π2 . Mittels der Kosinusfunktion kann der Satz auf beliebige Dreiecke erweitert werden:
b1
γ b
b2
a h c
Abb. 3.13 Bezeichnungen f¨ ur den Kosinus-Satz
Satz 3.33 (Kosinus-Satz) In einem Dreieck mit Seitenl¨ angen a, b und c sei γ der Winkel, der der Seite mit L¨ ange c gegen¨ uber liegt, siehe Abbildung 3.13. Dann gilt: c2 = a2 + b2 − 2ab cos(γ).
186
3 Zahlen und Strukturen
Der Satz des Pythagoras ist der Spezialfall f¨ ur γ =
π , 2
d. h. cos(γ) = 0.
Beweis Wir setzen den Satz von Pythagoras voraus und erhalten damit im Dreieck aus Abbildung 3.13: h2 + b22 = c2 sowie b21 + h2 = a2 . Setzen wir h2 = a2 − b21 in die erste Gleichung ein, ergibt sich a2 − b21 + b22 = c2 .
(3.34)
Mit cos(γ) = ba1 ist b1 = a cos(γ) und b2 = b − b1 = b − a cos(γ). Wir erhalten die Aussage, indem wir das in (3.34) einsetzen: a2 − a2 cos2 (γ) + (b − a cos(γ))2 = c2 ⇐⇒ a2 − a2 cos2 (γ) + b2 − 2ab cos(γ) + a2 cos2 (γ) = c2 ⇐⇒ a2 + b2 − 2ab cos(γ) = c2 . H¨ aufig kennt man Winkel nicht, sondern m¨ ochte diese ausrechnen. Dazu werden Umkehrfunktionen der bislang behandelten trigonometrischen Funktionen ben¨ otigt: die Arcus-Funktionen. Wegen der 2π-Periode sind Sinus und Kosinus und damit auch Tangens und Kotangens nicht injektiv und damit nicht umkehrbar. Aber der Definitionsbereich l¨ asst sich so einschr¨ anken, dass es doch & ' Umkehrfunktionen gibt. Zum Beispiel hat der Tangens auf − π2 , π2 die Umkehrfunktion arctan(x) (Arcustangens), siehe Tabelle 3.7. Dort finden Sie auch die weiteren Arcus-Funktionen mit ihren Definitions- und Wertebereichen. Tab. 3.7 Arcus-Funktionen
D(f −1 )
W (f −1 )
arcsin(x)
[−1, 1]
' π π& −2, 2
arccos(x)
[−1, 1]
tan(x)
[0, π] & π π' −2, 2
arctan(x)
] − ∞, ∞[
[0, π] & π π' −2, 2
cot(x)
]0, π[
arccot(x)
] − ∞, ∞[
]0, π[
Funktion
eingeschr¨ ankter
Umkehrfunktion
f (x)
Definitionsbereich
f −1 (x)
sin(x) cos(x)
'
− π2 ,
π 2
&
Wenn wir Ausdr¨ ucke wie sin(x + y) oder sin(x) + sin(y) umformen m¨ ussen (z. B. um Drehungen einer Vektorgrafik zu berechnen, vgl. Kapitel 5.6), dann ben¨ otigen wir Additionstheoreme. Beispielsweise gilt cos(x + y) = cos(x) cos(y) − sin(x) sin(y)
(3.35)
sin(x + y) = sin(x) cos(y) + cos(x) sin(y).
(3.36)
3.6 Reelle Zahlen
187
Diese und weitere Additionstheoreme finden Sie in jeder Formelsammlung. Allerdings ist ihre Handhabung recht sperrig. Sollten Sie das Pech haben, mit vielen Sinus- und Kosinus-Termen arbeiten zu m¨ ussen, dann lohnt es sich, u ¨ ber den Einsatz von komplexen Zahlen nachzudenken, die sich u ¨ ber einen Betrag und einen Winkel schreiben lassen. Aus den Additionstheoremen werden dann die Regeln der Potenzrechnung und umgekehrt. Aufgabe 3.22 Wir betrachten ein rechtwinkliges Dreieck mit den Kanten a, b und der Hypothenuse c. Der Winkel gegen¨ uber von a heißt α, und der Winkel gegen¨ uber von b heißt β. Vervollst¨ andigen Sie die folgende Tabelle:
a
b
c
α
5
π 6 π 4 π 6
2 3
3
3.6.3
β
4
Darstellung reeller Zahlen in verschiedenen Stellenwertsystemen
Wir haben bereits die reellen Zahlen genau als die Zahlen kennen gelernt, die man als Dezimalzahlen mit endlich oder unendlich vielen Nachkommastellen schreiben kann. Wenn bei unendlich vielen Nachkommastellen eine Periode auftritt, dann handelt es sich um einen Bruch (eine rationale Zahl), sonst um eine irrationale Zahl. Wir wollen jetzt verstehen, dass die reellen Zahlen tats¨ achlich mit unendlich vielen Nachkommastellen geschrieben werden k¨ onnen. Allerdings l¨ osen wir uns sogar von der konkreten Basis b = 10 und w¨ ahlen eine beliebige, feste Basis ur unsere Darstellung, so dass wir insbesondere den f¨ ur die b ∈ N mit b > 1 f¨ Informatik wichtigen Fall b = 2 abdecken. Satz 3.34 (Stellenwertdarstellung) Sei b ∈ N und b > 1. Durch die Stellenwertdarstellung (n ∈ N) xn−1 xn−2 . . . x0 , x−1 x−2 x−3 . . . ur i ≤ n − 1 ist eindeutig eine reelle Zahl x mit mit xi ∈ {0, 1, . . . , b − 1} f¨ n ur alle k ∈ N die Bedingung 0 ≤ x < b gegeben, die f¨ (xn−1 xn−2 . . . x0 , x−1 . . . x−k )b ≤ x ≤ (xn−1 xn−2 . . . x0 , x−1 . . . x−k )b +b−k
188
3 Zahlen und Strukturen
erf¨ ullt, d. h. n−1 i=0
i
xi · b +
Vorkommateil
k i=1
−i
x−i · b
abgebrochener
≤x≤
n−1 i=0
i
xi · b +
k
−i
x−i · b
+ b−k .
i=1
Nachkommateil
Umgekehrt besitzt jede reelle Zahl eine solche Stellenwertdarstellung, die die Zahl wie zuvor beschreibt. Bei negativen reellen Zahlen k¨ onnen wir den Betrag so darstellen und das Ergebnis mit einem Minuszeichen versehen. Damit erhalten wir die uns bekannte Vorzeichen/Betrag-Darstellung. Wir sagen nicht, dass eine Zahl x eine eindeutige Stellenwertdarstellung hat, denn wir wissen ja bereits, dass dies f¨ ur b = 10 und x = 0, 9 = 1 nicht stimmt. In Computerprogrammen wird statt der deutschen Schreibweise mit einem Komma vor dem Nachkommateil ein Punkt verwendet. Leider ist in der deutschen Schreibweise der Punkt zur Gruppierung von jeweils drei Stellen u ¨ blich. Amerikaner benutzen hier umgekehrt das Komma: 1.234.567,89 (deutsch), 1,234,567.89 (amerikanisch). Damit gibt es leider eine Fehlerquelle, die ein Compiler hoffentlich bemerkt. Dass wir den ganzzahligen Anteil u ucken ¨ ber die Vorkommastellen ausdr¨ k¨ onnen und dass umgekehrt die Vorkommastellen eine nat¨ urliche Zahl ergeben, haben wir bereits mit Satz 3.5 auf Seite 123 gesehen. Beim Nachkommateil m¨ ussen wir uns mehr anstrengen, da hier unendlich viele Ziffern auftreten k¨ onnen und zun¨ achst nicht klar ist, ob x−1 · b−1 + x−2 · b−2 + x−3 · b−3 + . . . eine sinnvolle reelle Zahl ist. Denn die K¨ orperaxiome besagen nur, dass die Summe von zwei Zahlen wieder im K¨ orper ist. Mit vollst¨ andiger Induktion kann man das auf die Summe von endlich vielen Zahlen ausdehnen. Was aber eine Summe von unendlich vielen reellen Zahlen ist, ist zun¨ achst unklar. Bei den Br¨ uchen konnten wir auf Seite 166 noch verstehen, dass ein periodischer Nachkommateil durch einen Bruch ausgedr¨ uckt werden kann. In Kapitel 3.6.1 haben wir zwar erw¨ ahnt, dass die reellen Zahlen zus¨ atzlich die Dezimalzahlen mit unendlich vielen Nachkommastellen ohne Periode umfassen. Sie haben uns das u ¨ ber die Argumentation an der Zahlengeraden vermutlich geglaubt. Definiert haben wir die reellen Zahlen aber u achst wenig mit der Dezimaldar¨ ber Axiome, die zun¨ stellung zu tun haben. Beweis Wir zeigen, dass durch die Stellenwertdarstellung wie im Satz angegeben tats¨ achlich genau eine reelle Zahl beschrieben ist. Dazu benutzen wir das
3.6 Reelle Zahlen
189
Vollst¨ andigkeitsaxiom der reellen Zahlen (siehe Seite 173) f¨ ur eine Folge von Intervallen [uk , vk ] mit k k −i −i uk := x−i · b und vk := x−i · b + b−k . i=1
i=1
Wenn wir gezeigt haben, dass es sich tats¨ achlich um eine Intervallschachtelung · · · ⊂ [u3 , v3 ] ⊂ [u2 , v2 ] ⊂ [u1 , v1 ] handelt, dann besagt das Vollst¨ andigkeitsaxiom, dass es mindestens eine Zahl x ∈ R gibt, die in allen Intervallen liegt und damit die im Satz angegebene Bedingung erf¨ ullt. Es gibt aber auch keine weitere reelle Zahl y ∈ R, x = y mit ur gen¨ ugend großes k dieser Eigenschaft, da die Intervallbreiten vk − uk = b−k f¨ kleiner als der Abstand von x und y werden. Damit ist die reelle Zahl x eindeutig u ¨ ber die Stellenwertdarstellung bestimmt. Zeigen wir also, dass es sich um eine Intervallschachtelung handelt. Offensichtlich ist der linke Intervallrand uk stets kleiner als der rechte vk , und mit ussen noch zeigen, dass wachsendem k wird uk zumindest nicht kleiner. Wir m¨ oßer wird, dass also vk+1 ≤ vk mit wachsendem k der rechte Rand vk nicht gr¨ bzw. k+1 k −i x−i · b + b−(k+1) ≤ x−i · b−i + b−k i=1
gilt. Auf der linken Seite steht
i=1
k
−i
i=1 x−i · b
!
+ x−(k+1) · b−(k+1) + b−(k+1) .
Wir m¨ ussen jetzt also nur zeigen, dass x−(k+1) · b−(k+1) + b−(k+1) ≤ b−k gilt. Wegen 0 ≤ x−(k+1) < b erhalten wir aber 0 ≤ x−(k+1) · b−(k+1) + b−(k+1) ≤ (b − 1)b−(k+1) + b−(k+1) = b · b−(k+1) = b−k . Damit ist die Intervallschachtelung und der erste Teil des Satzes gezeigt. Umgekehrt hat jede reelle Zahl x ∈ [0, bn [ eine im Satz beschriebene Stellenwertdarstellung: Man erh¨ alt sie u ¨ber fortgesetzte Multiplikation von y := x/bn ∈ [0, 1[ mit b. Der Ganzzahlanteil von y·b ist die h¨ ochstwertige Vorkommastelle von x. Beachten Sie, dass es sich wegen 0 ≤ y < 1 auch tats¨ achlich um eine Ziffer zwischen 0 und b− 1 handelt. Der Ganzzahlanteil von (y · b− Ganzzahlanteil(y · b))· b ergibt so die zweite Stelle. Fortgesetzt erhalten wir zun¨ achst alle Vorkomma- und dann auch die Nochkommastellen. Beispielsweise ergibt sich f¨ ur x = 0,7624 (hier kennen wir also schon eine Stellenwertdarstellung zur Basis 10) und b = 10: x·b
Ganzzahl(x · b) x · b − Ganzzahl(x · b)
0,7624 · 10 = 7,624
7
0,624
0,624 · 10 = 6,24
6
0,24
0,24 · 10 = 2,4
2
0,4
0,4 · 10 = 4
4
0.
190
3 Zahlen und Strukturen
Die so konstruierte Darstellung entspricht auch tats¨ achlich der Zahl x, denn wenn wir mit ihr die obige Intervallschachtelung machen, dann liegt x in jedem der Intervalle und stimmt daher mit der durch die Intervallschachtelung festgelegten eindeutigen reellen Zahl u ¨berein. Wenn Sie die Intervallschachtelung aus dem Beweis f¨ ur x = 0, 9 und x = 1 durchf¨ uhren, dann erhalten Sie unterschiedliche Intervallschachtelungen, die aber die gleiche Zahl repr¨ asentieren. Die Schwierigkeit im Beweis bestand darin, dass wir unendlich viele Nachkommastellen erlauben. Wenn wir eine Stellenwertdarstellung im Computer benutzen, haben wir diese Schwierigkeit nat¨ urlich nicht, hier kann es nur endlich viele Stellen geben. Daf¨ ur muss man sich aber mit Rundungsungenauigkeiten herumschlagen, wie wir auch in diesem Kapitel noch sehen werden. Wir rechnen nun eine Stellenwertdarstellung zu einer Basis in eine Darstellung zu einer anderen Basis um. Betrachten wir dazu das Beispiel (935,421875)10 = (3A7,6C)16 . Zuerst zerlegen wir die Zahl in Vor- und Nachkommateil. Den Vorkommateil wandeln wir durch fortgesetzte Division um: 935 : 16 = 58 Rest 58 : 16 = 3 : 16 =
7 = ˆ 7
3 Rest 10 = ˆ A 0 Rest
3 = ˆ 3.
Die jeweiligen Divisionsreste ergeben von unten nach oben gelesen den Vorkommateil der gesuchten Zahl in der anderen Basis. Anschließend kann der Nachkommateil durch fortgesetzte Multiplikation umgewandelt werden. 0,421875 · 16 = 0,75
6 + 0,75 → 6
· 16 = 12 + 0
→ C.
Die jeweiligen ganzen Teile ergeben von oben nach unten gelesen den Nachkommateil der gesuchten Zahl in der anderen Basis. Wenn wir die Probe machen, also 3 · 162 + 10 · 161 + 7 · 160 + 6 · 16−1 + 12 · 16−2 = 935,421875 berechnen, dann stellen wir fest, dass dieses Verfahren funktioniert hat. Wir haben uns zuvor u ¨ berlegt, dass bei der Basis b = 10 ein Bruch endlich viele Nachkommastellen hat oder durch eine Dezimalzahl mit Periode darstellbar ist. Das gilt mit der gleichen Begr¨ undung auch f¨ ur jede andere Basis b > 1. Allerdings kann ein Bruch bei einer Basis endlich viele Nachkommastellen haben und bei einer anderen Basis eine periodische Darstellung besitzen. So ergeben sich bei der Umwandlung vom Dezimal- ins Dualsystem oft periodische Dualonnen periodische Dualbr¨ uche nur br¨ uche: (0,1)10 = (0,00011)2 . Im Rechner k¨ n¨ aherungsweise dargestellt werden, da die L¨ ange der Zahlen beschr¨ ankt ist. Welche Auswirkungen das haben kann, sieht man am einf¨ uhrenden Listing 3.1. Dort
3.6 Reelle Zahlen
191
wird zehnmal der Wert 0,1 auf den anf¨ anglichen Wert 1,0 addiert. Da der Wert 0,1 aber im Rechner nicht exakt dargestellt werden kann, wird der Wert 2,0 nicht exakt erreicht. Daher ist die Bedingung x = 2 (also x != 2.0 in C) der while-Schleife immer erf¨ ullt, und die Schleife bricht nicht ab. Korrekt wird das Programm mit der Schleifenbedingung while(x < 2.0). Verwenden wir in einem Programm Werte vom Typ float oder double, m¨ ussen wir uns Gedanken u ¨ ber Ungenauigkeiten machen. Um eine Zahl in Bin¨ ar- oder Hexadezimaldarstellung wieder zur¨ uck in die Dezimaldarstellung zu wandeln, kann man wie oben bei der Berechnung der Probe vorgehen. Allerdings werden dabei sehr viele Multiplikationen ben¨ otigt. Wir k¨ onnen eine solche Umwandlung beschleunigen, indem wir das HornerSchema anwenden. Betrachten wir dazu das Beispiel (B63D2)16 = (746450)10 . Mit unserer bisherigen Methode zur Umrechnung erhalten wir: =1
(B63D2)16
= 11 · 164 + 6 · 163 + 3 · 162 + 13 · 161 + 2 · 160
= 11 · 16 · 16 · 16 · 16 + 6 · 16 · 16 · 16 + 3 · 16 · 16 + 13 · 16 + 2
Bei dieser naiven Art und Weise, den Wert zu berechnen, ben¨ otigen wir f¨ ur die Stelle i mit der Stellenwertigkeit 16i genau i Multiplikationen: i − 1 Multiplikationen zur Berechnung der Potenz und eine f¨ ur die Multiplikation der Potenz mit der Ziffer. In unserem Beispiel ben¨ otigen wir also 4 + 3 + 2 + 1 = 10 Multiplikationen. Wenn wir etwas intelligenter vorgehen, dann berechnen wir die Potenzen iterativ und speichern bereits berechnete Ergebnisse zwischen, um darauf zur¨ uckgreifen zu k¨ onnen: 16 · 16 = 162 , 162 · 16 = 163 , 163 · 16 = 164 . Dadurch ben¨ otigen wir nur insgesamt n − 1 Multiplikationen, um alle Potenzen atzlich m¨ ussen wir aber noch n Multiplikationen mit bis 16n zu berechnen. Zus¨ der jeweiligen Ziffer durchf¨ uhren, also erhalten wir 2n−1 viele Multiplikationen, hier also 2 · 4 − 1 = 7. Jetzt gehen wir noch geschickter vor: (B63D2)16 = (11 · 16 + 6) · 163 + 3 · 162 + 13 · 161 + 2 = [([11 · 16 + 6] · 16 + 3) · 16 + 13] · 16 + 2. Durch das Ausklammern der einzelnen Terme erhalten wir in der letzten Zeile das Horner-Schema, und k¨ onnen dadurch die Anzahl der durchzuf¨ uhrenden Multiplikationen erheblich reduzieren, n¨ amlich von 2n − 1 auf n, also ungef¨ ahr auf die H¨ alfte. Wir ben¨ otigen nur noch eine Multiplikation pro Stelle. Die Anzahl der Additionen ¨ andert sich nicht. Betrachten wir ein weiteres Beispiel: (527436)8 = (175902)10 (527436)8 = 5 · 85 + 2 · 84 + 7 · 83 + 4 · 82 + 3 · 81 + 6 ' & = [((5 · 8 + 2) · 8 + 7) · 8 + 4] · 8 + 3 · 8 + 6.
192
3 Zahlen und Strukturen
Anstelle von bis zu f¨ unfzehn Multiplikationen ben¨ otigen wir nur noch f¨ unf Multiplikationen. Da solche Umwandlungen im Rechner st¨ andig durchgef¨ uhrt werden m¨ ussen, sollte die Umwandlung so schnell wie m¨ oglich, also mit so wenigen Multiplikationen wie m¨ oglich, durchgef¨ uhrt werden. Das Horner-Schema eignet sich auch zur Berechnung von Funktionswerten eines Polynoms. Wenn wir p(8) f¨ ur p(x) = 5 · x8 + 2 · x4 + 7 · x3 + 4 · x2 + 3 · x + 6 berechnen wollen, dann k¨ onnen wir das Ausklammern wie zuvor an einem Polynom vornehmen, und erhalten p(x) = an xn + an−1 xn−1 + an−2 xn−2 + · · · + a1 x + a0 = (an x + an−1 )xn−1 + an−2 xn−2 + · · · + a1 x + a0 = . . . = (. . . ((an x + an−1 )x + an−2 )x + · · · + a1 )x + a0 . Jetzt k¨ onnen wir einen Funktionswert p(x0 ) berechnen, indem wir x = x0 setzen und die Klammern von innen nach außen ausrechnen. Wenn wir die Zwischenergebnisse mit bk , 0 ≤ k ≤ n − 1, bezeichnen, b0
p(x0 ) = (. . . (( an x0 + an−1 ) x0 + an−2 ) x0 + · · · + a1 ) x0 + a0 , bn−1
bn−2
bn−3
dann erhalten wir das Rechenschema ⇐⇒
bn−1 = an
an = bn−1
bn−2 = an−1 + bn−1 · x0 ⇐⇒ an−1 = bn−2 − bn−1 · x0 bn−3 = an−2 + bn−2 · x0 ⇐⇒ an−2 = bn−3 − bn−2 · x0 .. . p(x0 ) = a0 + b0 · x0
⇐⇒
(3.37)
a0 = p(x0 ) − b0 · x0 ,
das f¨ ur die Anwendung so dargestellt wird: Koeffizienten an
an−1
an−2
+
0
bn−1 · x0 bn−2 · x0 . . . b2 · x0 b1 · x0 b0 · x0
=
bn−1 bn−2
bn−3
. . . a2
a1
. . . b1
b0
a0 p(x0 ).
In dieser Form berechnet sich (527436)8 als Funktionswert p(8) des Polynoms p mit den Stellenwerten als Koeffizienten so: Koeffizienten 5 2
7
4
3
6
+
0 40 336 2744 21984 175896
=
5 42 343 2748 21987 175902.
3.6 Reelle Zahlen
193
Was das Horner-Schema auch f¨ ur das Rechnen mit Nullstellen interessant macht ist, dass wir beim Berechnen des Funktionswerts p(x0 ) gleichzeitig eine Polynomdivision p(x)/(x − x0 ) durchgef¨ uhrt haben – ohne es zu bemerken. Kennen onnen wir mit dem Horner-Schema den Linewir also eine Nullstelle x0 , dann k¨ arfaktor (x − x0 ) abspalten, so dass wir es mit einem Polynom kleineren Grades zu tun haben, f¨ ur das sich u. U. Nullstellen einfacher finden lassen. Ist p ein Polynom vom Grad n, dann formen wir es bei einer Polynomdivision p(x0 ) . p(x)/(x − x0 ) um zu einem Polynom vom Grad n − 1 plus einem Rest x−x 0 Dabei k¨ onnen wir wie bei der schriftlichen Division von Zahlen vorgehen:
( 5x5 −[ 5x
4
+2x4 −40x 42x
−[
+3x
+6 ) : (x − 8)
4
] +7x3 −336x 343x
+4x2
+3x
3
+4x2 −2744x
+3x
+3x
2
−21948x
2748x
21987x −[
]
+ 42x3
]
+ 343x2
]
+ 2748x
+6
2
2748x2
= 5x4
+6
3
343x3 −[
+4x2
4
42x4 −[
+7x3
+6
+6
21987x −175896 ] 175902
+ 21 987x 902 . + 175 x−8
Im ersten Schritt gilt beispielsweise p(x) p(x) − 5x4 (x − 8) 42x2 + 7x3 + 4x2 + 3x + 6 = 5x4 + = 5x4 + . x−8 x−8 x−8 ahlt, dass p(x) − 5x4 (x − 8) einen kleineren Grad als p(x) Dabei ist 5x4 so gew¨ hat. F¨ ur dieses neue Polynom geschieht nun im zweiten Schritt das Gleiche wie f¨ ur p(x) im ersten usw. Wir erkennen, dass die Koeffizienten 5, 42, 343, 2748, 21 987 des Ergebnispolynoms sowie der Rest 175 902 genau die Zahlen aus der unteren Reihe des zuvor berechneten Horner-Schemas sind. Das ist kein Zufall. Mit den Bezeichnungen von zuvor gilt n¨ amlich p(x) = an xn + an−1 xn−1 + an−2 xn−2 + · · · + a1 x + a0 = (bn−1 xn−1 + bn−2 xn−2 + · · · + b1 x + b0 )(x − x0 ) + p(x0 ). =:q(x)
(3.38)
194
3 Zahlen und Strukturen
Das ergibt sich direkt aus der Regel zum Aufbau des Horner-Schemas. Wir multiplizieren dazu die rechte Seite aus, fassen die Faktoren der Potenzen zusammen und vereinfachen sie mittels (3.37): (bn−1 xn−1 + bn−2 xn−2 + · · · + b1 x + b0 )(x − x0 ) + p(x0 ) = bn−1 xn + (−x0 bn−1 + bn−2 )xn−1 + (−x0 bn−2 + bn−3 )xn−2 + . . . +(−x0 b0 + p(x0 )) = an xn + an−1 xn−1 + an−2 xn−2 + · · · + a0 . Nach (3.38) lautet das Ergebnis der Polynomdivision von p(x) durch x − x0 : p(x) p(x0 ) = bn−1 xn−1 + bn−2 xn−2 + · · · + b1 x + b0 + . x − x0 x − x0 Wenn wir x0 als Nullstelle des Polynoms w¨ ahlen, dann bleibt die Division ohne p(x0 ) . Rest, sonst ist der Rest x−x 0 Aufgabe 3.23 Berechnen Sie mit dem Horner-Schema f¨ ur p(x) = x4 + 2x3 + 3x + 4 den Funktionswert p(−2), und f¨ uhren Sie mittels Horner-Schema die Polynomdivision p(x)/(x + 2) mit Rest durch. Kommen wir zur¨ uck zur Umrechnung von Stellenwertdarstellungen. Bei zwei ur ein n ∈ N kann die Zahlenumwandlung Basen b, b ∈ N mit b = bn f¨ vereinfacht werden. Denn eine Stelle in der Stellenwertdarstellung von b entspricht genau n Stellen in der Darstellung bez¨ uglich b. Daher fassen wir Gruppen von n Ziffern bez¨ uglich b zusammen. Betrachten wir dazu ein Beispiel: (21121,012)3 = (247,16)9 , also b = 3 und b = 9. Die Ziffern der Zahl (21121,012)3 werden paarweise zusammengefasst, da 9 = 32 . Der Exponent gibt an, wie viele Ziffern zusammengefasst werden m¨ ussen. Dazu m¨ ussen dem Vorkommateil eventuell Nullen vorangestellt werden, und an den Nachkommateil gegebenenfalls Nullen angeh¨ angt werden. Die zus¨ atzlichen Nullen sind im Beispiel fett gedruckt. Vorkommateil
Nachkommateil
(02)3
=
(2)9
(01)3
=
(1)9
(11)3
=
(4)9
(20)3
=
(6)9
(21)3
=
(7)9
Die so berechneten Ziffern zur Basis 9 k¨ onnen nun hintereinander geschrieben werden. Beispiel 3.35 (Zusammenfassung von Stellen) F¨ ur die Umwandlung (32132)4 = (39E)16 werden die Ziffern von (32132)4 paarweise zusammengefasst, da 16 = 42 . (03)4 = (3)16 ,
(21)4 = (9)16 ,
(32)4 = (E)16
3.6 Reelle Zahlen
195
Bei der Zahl (2A7)16 = (0010 1010 0111)2 werden umgekehrt die Ziffern der Zahl (2A7)16 jeweils als 4-stellige Dualzahl geschrieben, da 16 = 24 : (2)16 = (0010)2 ,
3.6.4
(A)16 = (1010)2 ,
(7)16 = (0111)2 .
Darstellung reeller Zahlen im Computer
Leider sind nur endlich viele Nachkommastellen speicherbar. Bei (0,1)10 haben wir schon gesehen, dass durch die Umwandlung ins Dualsystem Fehler entstehen. Bei Festkomma-Zahlen ist die maximale Anzahl von Vor- und Nachkommastellen festgelegt. Wenn wir beispielsweise bei 4 Vor- und 4 Nachkommastellen die Zahl 0,000111101 darstellen wollen, dann erhalten wir abgerundet 0000,0001. Also gehen f¨ unf signifikante Stellen verloren. Damit eine solche Ungenauigkeit nicht auftritt, werden Zahlen im Rechner nicht mit der FestkommaDarstellung codiert. Bei der Gleitpunktdarstellung (eigentlich m¨ ussten wir von Gleitkommadarstellung sprechen, aber so h¨ ort sich der Begriff wie floating ” point number“ an, in C ist das der Datentyp float) wird eine reelle Zahl x dargestellt in der Form x = ±m · b±d , wobei m die Mantisse bezeichnet, d den Exponenten und b die Basis. Betrachten wir auch hier einige Beispiele, um uns diese Schreibweise klar zu machen: 3,14159 = 0,314159 · 101 ,
0,000021 = 0,21 · 10−4 ,
12340000 = 0,1234 · 108 .
Leider hat diese Darstellung eine kleine Schw¨ ache: Sie ist nicht eindeutig: 3,14159 = 0,0314159 · 102 = 0,314159 · 101 = 31,4159 · 10−1 . Um Mehrdeutigkeiten zu vermeiden, f¨ uhrt man eine normalisierte Darstellung ein. Eine Gleitpunktzahl der Form ±m · b±d heißt normalisiert genau dann, wenn gilt: 1 ≤ |m| < b. Die Betragsstriche um Zahlen dr¨ ucken die Betragsfunktion (oder den Absolutbetrag) aus, die so definiert ist: x, falls x ≥ 0, |x| := −x, falls x < 0. Mit Betragsstrichen eliminieren wir also eventuell auftretende negative Vorzeichen, beispielsweise ist |5−3| = |2| = |3−5| = |−2|, |a−b| = |−(b−a)| = |b−a|. Was bedeutet nun die Normalisierungsbedingung? Sie sorgt daf¨ ur, dass genau eine Vorkommastelle verwendet wird. Der ganzzahlige Anteil der Zahl liegt also zwischen 1 und b − 1. Schauen wir uns einige Beispiele an, dann wird es klarer:
196
3 Zahlen und Strukturen
(0,000011101)2 lautet normiert (1,1101)2 · 2−5 , da 1 ≤ |1| < 2, (1001,101)2 · 210 wird zu (1,001101)2 · 213 , da 1 ≤ |1| < 2, 47,11 · 102 ist normiert 4,711 · 103 , da 1 ≤ |4| < 10, 0,0815 · 10−3 wird zu 8,15 · 10−5 , da 1 ≤ |8| < 10. Wir beschreiben nun eine einfache M¨ oglichkeit, die Gleitpunktzahlen im Computer abzubilden. Tats¨ achlich ist die Darstellung noch ein klein wenig komplizierter, darauf gehen wir anschließend kurz ein. Zum Speichern einer Gleitpunktzahl zur Basis 2 mit einer Wortl¨ ange von 32 Bit teilen wir die 32 Bits wie folgt auf: Mantisse: 23 Bits f¨ ur die Vorkommastellen plus ein Bit f¨ ur das Vorzeichen, wobei wir die Mantisse in Vorzeichen-/Betragdarstellung ablegen. Exponent: 8 Bit, im Gegensatz zur Mantisse geben wir den Exponenten in der Zweier-Komplement-Darstellung an. Die genaue Codierung des Exponenten spielt aber bei den folgenden Rechnungen keine Rolle. F¨ ur eine Wortl¨ ange von 64 Bit kann die Zahl ¨ ahnlich aufgeteilt werden. Die Mantisse hat dann 52 Bits plus ein Vorzeichenbit, der Exponent wird mit 11 Bits dargestellt. F¨ ur die Zahl (5031,1875)10 = (1001110100111,0011)2 · 20 = (1,0011101001110011)2 · 212 = (1,0011101001110011)2 · 2(00001100)2 erhalten wir bei einer Wortl¨ ange von 32 Bit als einzelne Teile: Vorzeichen
:
0= ˆ +
Exponent
:
00001100.
Mantisse
:
10011101001110011000000
Entsprechend gewinnen wir aus (−0,078125)10 = (−0,000101)2 · 20 = (−1,01)2 · 2−4 = (−1,01)2 · 2(11111100)2 die Werte: Vorzeichen
:
1= ˆ −
Exponent
:
11111100.
Mantisse
:
10100000000000000000000
Wer genau aufgepasst hat, wird festgestellt haben, dass die Null nicht im darstellbaren Bereich enthalten ist, da 1 ≤ 0 < b nicht gelten kann. Daher m¨ ussen wir die Null abweichend darstellen, z. B., indem wir Vorzeichen 0, Mantisse 0 und Exponent 0 w¨ ahlen.
3.6 Reelle Zahlen
197
Bei b = 2 und einer von null verschiedenen Zahl ist die Vorkommastelle der Mantisse immer 1. Um keine unn¨ otige Information zu speichern, k¨ onnte diese weggelassen werden. Tats¨ achlich wird das bei der Zahlendarstellung im Com¨ puter auch gemacht (s. u.). Wir haben sie aber der Ubersichtlichkeit wegen erst einmal stehen gelassen. Jetzt verstehen wir auch das merkw¨ urdige Verhalten des einf¨ uhrenden Pro32 gramms aus Listing 3.3 (Seite 115): Mit 32 Bits sind maximal 2 verschiedene Zahlen darstellbar. Die gr¨ oßte Gleitpunktzahl bei 32 Bits ist aber ungef¨ ahr 2127 . Die Gleitpunktzahlen decken also ihren Zahlenbereich nur sehr unvollkommen ab. Jetzt rechnen wir mit Gleitpunktzahlen. Schauen wir uns zun¨ achst die Muldx dy tiplikation und Division f¨ ur Zahlen x = mx · 2 und y = my · 2 an. Aus den Rechenregeln f¨ ur Potenzen reeller Zahlen ergibt sich: Bei der Multiplikation werden die Mantissen multipliziert und die Exponenten addiert. x · y = (mx · my ) · 2dx +dy Bei der Division werden die Mantissen dividiert und die Exponenten subtrahiert. x : y = (mx : my ) · 2dx −dy Betrachten wir auch dazu wieder ein Beispiel, zun¨ achst f¨ ur die Multiplikation 121,8 · 0,37: (1,218 · 102 ) · (3,7 · 10−1 ) = 4,5066 · 101 = 45,066 und nun ein Beispiel f¨ ur die Division 450,66 : 37: (4,5066 · 102 ) : (3,7 · 101 ) = 1,218 · 101 = 12,18. Die Multiplikation und Division der Zahlen erfordert keine angepasste Darstellung. Das ist bei der Addition und Subtraktion der Zahlen x = mx · 2dx und y = my · 2dy anders. Wenn wir schriftlich addieren und subtrahieren, dann muss das Komma bzw. der Dezimalpunkt an der gleichen Stelle stehen. Bei Gleitpunktzahlen wird die Position des Kommas durch den Exponenten bestimmt, so dass wir diesen angleichen m¨ ussen. Rechnerisch sieht das dann so aus: (mx · 2dx −dy ± my ) · 2dy , falls dx ≤ dy x±y = (mx ± my · 2dy −dx ) · 2dx , falls dx > dy .
198
3 Zahlen und Strukturen
Wie man hier sieht, wird der kleine Exponent dem großen Exponenten angeglichen. Es macht keinen Sinn, den großen Exponent an den kleinen anzupassen, da dadurch eventuell die h¨ ochstwertigen Stellen nicht mehr dargestellt werden k¨ onnten. Man nimmt lieber in Kauf, niederwertigere Stellen zu verlieren, und akzeptiert damit Rundungsungenauigkeiten. Bei einer Mantisse von 4 Stellen (ohne Vorzeichen) zur Basis 10 seien x, y, z wie folgt gegeben: x := +1,235 · 102 ,
y := +5,512 · 104 ,
z := −5,511 · 104 .
Dann erhalten wir mit der Rundungsungenauigkeit 1,235 · 10−2 ≈ 0,012: x + y = +1,235 · 102 + 5,512 · 104 = (+1,235 · 10−2 + 5,512) · 104 = (+0,012 + 5,512) · 104 = +5,524 · 104 , (x + y) + z = +5,524 · 104 − 5,511 · 104 = +0,013 · 104 = +1,300 · 102 . Andererseits tritt bei der folgenden Rechnung kein Rundungsfehler auf: y + z = +5,512 · 104 − 5,511 · 104 = +0,001 · 104 = +1,000 · 101 , x + (y + z) = +1,235 · 102 + 1,000 · 101 = +1,235 · 102 + 0,100 · 102 = +1,335 · 102 = +1,300 · 102 = (x + y) + z. Das Assoziativgesetz gilt also nicht bei Gleitpunktzahlen mit endlicher Stellenzahl. Ein anderes Beispiel, bei dem die beschr¨ ankte Stellenzahl der Mantisse Auswirkungen hat, erhalten wir bei Berechnung der linken Seite von x2 + 2xy + y 2 − x2 − 2xy (x + y)2 − x2 − 2xy = =1 y2 y2 auf einem 32 Bit Computer mit einfacher Genauigkeit (float) f¨ ur die Zahlen 1 . Obwohl beide Zahlen exakt dargestellt werden x = 1000 und y = 0,03125 = 32 k¨ onnen, bekommen wir das Ergebnis 0. Das liegt daran, dass (x + y)2 eine große Zahl und y 2 eine im Vergleich so kleine Zahl ist, dass in der Zahlendarstellung aufgrund der Stellenzahl der Mantisse genau der y 2 -Anteil von (x + y)2 = x2 + ahler 2xy + y 2 nicht mehr gespeichert werden kann. Daher entsteht bereits im Z¨ die Null. Um solche groben Fehler zu vermeiden, sollten Zahlen bei Addition und Subtraktion ungef¨ ahr die gleiche Gr¨ oßenordnung haben. Wir k¨ onnen festhalten, dass Ungenauigkeiten im Umgang mit Gleitpunktzahlen sowohl bei der Umwandlung vom Dezimal- ins Dualsystem als auch bei den arithmetischen Operationen auftreten. In der Regel spielen kleine Abweichungen keine große Rolle. Im Rechner werden aber oft tausende von Rechenoperationen hintereinander ausgef¨ uhrt: Kleine Rundungsfehler k¨ onnen sich addieren und das Resultat v¨ ollig unbrauchbar machen! Wie man das verhindern kann, wird in B¨ uchern u ¨ber Numerik beschrieben.
3.6 Reelle Zahlen
199
Aufgabe 3.24 Zur Berechnung der so genannten Maschinengenauigkeit eps f¨ ur floatZahlen, die in der Numerik f¨ ur die Absch¨ atzung von Fehlern ben¨ otigt wird, dient das Programmfragment aus Listing 3.6. Was wird hier berechnet, welchen Zusammenhang zur Stellenzahl der Mantisse gibt es?
1 2
f l o a t eps =1.0; while (1.0+ eps >= 1.0) eps = eps /2; Listing 3.6 Berechnung der Maschinengenauigkeit
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#include < stdio .h > #include < math .h > void main ( void ) { f l o a t x , eHochX , term , zaehler , nenner ; printf ( " B e r e c h n e n der E x p o n e n t i a l f u n k t i o n \ n " ); printf ( " Exponent : " ); scanf ( " % f " , & x ); eHochX = 0.0; zaehler = 1.0; nenner = 1.0; term = zaehler / nenner ; f o r ( i n t i = 1; fabs ( term ) >= 0.00001; i ++) { eHochX += term ; zaehler *= x ; nenner *= ( f l o a t ) i; term = zaehler / nenner ; } printf ( " exp (% f ) = % f \ n " , x , eHochX ); } Listing 3.7 Ungeschickte Berechnung der Exponentialfunktion
Aufgabe 3.25 ur ein gegebenes x n¨ aherungsweise mittels Die Exponentialfunktion ex kann f¨ ex = 1 + x +
x2 x3 x4 + + + ... 2! 3! 4!
berechnet werden (siehe Seite 260). Wir u uhren dies in das Programm aus ¨berf¨ Listing 3.7. Leider kann bereits auf unserem Computer f¨ ur x = 14 der Wert der Exponentialfunktion so nicht mehr berechnet werden. Schreiben Sie das Pro¨ gramm ohne Anderung der Datentypen so um, dass Funktionswerte in einem gr¨ oßeren Bereich berechnet werden k¨ onnen. Wir k¨ onnten das Kapitel u ¨ber Gleitpunktzahlen hier beenden, wenn es da nicht einen kleinen Haken g¨ abe: Im Rechner werden die reellen Zahlen so nicht dargestellt. Die Darstellung im Rechner verwendet zur Codierung des Exponenten statt des Zweier-Komplements eine Exzess-Darstellung. Dabei wird
200
3 Zahlen und Strukturen
zum Wert einer Zahl x eine positive Zahl q addiert, so dass das Ergebnis nicht negativ ist. Der Exzess q ist also gr¨ oßer oder gleich dem Betrag der gr¨ oßten darstellbaren negativen Zahl. Die genaue Darstellung im Rechner ist f¨ ur uns eigentlich nicht interessant. Wir m¨ ussen nur wissen, warum Ungenauigkeiten im Umgang mit Gleitpunktzahlen auftreten. Aber der Vollst¨ andigkeit halber geben wir kurz an, wie die Zahlen laut IEEE-754 tats¨ achlich codiert werden: Der Exponent wird in Exzessdarstellung gespeichert. Dabei ist der Wert 0 f¨ ur die Codierung der Null (und nicht-normalisierte Zahlen) reserviert. Auch der Exponent, in dessen Darstellung alle Bits eins sind, ist reserviert. Mit ihm werden nicht-definierte Rechenergebnisse signalisiert (z. B. bei 0/0). Normalisiert werden Zahlen ungleich null wie zuvor auf die Mantisse 1.xxx. Die f¨ uhrende Eins wird nicht abgespeichert, sie heißt daher hidden bit“. ” Durch die separate Codierung der Null kann weiterhin die Zahl 1.0 von der Zahl 0 unterschieden werden. Zahlen mit einfacher Genauigkeit (32 Bit) werden wie folgt dargestellt: – 1 Bit Vorzeichen, 23 Bit Mantisse, – 8 Bit Exponent mit Exzess q = 27 − 1 = 127. Zahlen mit doppelter Genauigkeit (64 Bit) werden wie folgt dargestellt: – 1 Bit Vorzeichen, 52 Bit Mantisse, – 11 Bit Exponent mit Exzess q = 210 − 1 = 1023. Daneben sind in IEEE-754 noch weitere Genauigkeiten definiert. Welche interne Darstellung f¨ ur float und double in C-Programmen verwendet wird, ist vom Compiler und Computer abh¨ angig. Betrachten wir die Darstellung einer Zahl mit einfacher Genauigkeit: (−0,078125)10 = (−0,000101)2 · 20 = (−1,01)2 · 2−4 . Hier ist das Vorzeichen 1= ˆ −, der Exponent lautet 01111011= ˆ − 4 + 127, und die Mantisse ist 01000000000000000000000.
3.7
¨ Abz¨ ahlbarkeit und Uberabz¨ ahlbarkeit
In diesem Kapitel haben wir die Zahlenmengen N ⊂ N0 ⊂ Z ⊂ Q ⊂ R kennen gelernt. Es scheint so, dass von links nach rechts die Mengen immer gr¨ oßer ¨ werden. Uberraschender Weise lassen sich aber die Elemente von N0 , Z und
Qu ahlbar, d. h., wir k¨ onnen jedem Element der ¨ ber N codieren. Sie sind abz¨ Menge eindeutig ein Element aus N zuordnen und umgekehrt. Es gibt also eine bijektive Abbildung auf N (vgl. Seite 54). Diese bestimmt die Position einer Zahl in einer unendlich langen Aufz¨ ahlung aller Zahlen der Menge.
¨ 3.7 Abz¨ ahlbarkeit und Uberabz¨ ahlbarkeit
201
Eine bijektive Abbildung zwischen N0 und N ist gegeben u ¨ber 0 → 1, 1 → 2, 2 → 3 usw. Wenn wir die ganzen Zahlen in der Form 0, 1, −1, 2, −2, 3, −3, . . . aufz¨ ahlen, dann erhalten wir u ahlung die Abbildung ¨ ber die Position in der Aufz¨ asst auf N, also 0 → 1, 1 → 2, −1 → 3 usw. Was wir hier gemacht haben, l¨ sich u ¨ ber das Hilbert-Hotel veranschaulichen. Dabei handelt es sich um ein Hotel, bei dem jede nat¨ urliche Zahl eine Zimmernummer ist. Das Hotel hat also unendlich viele Zimmer. Selbst wenn alle Zimmer belegt sind, kann das Hotel noch einen neuen Gast aufnehmen: Jeder Gast muss dazu in das n¨ achste Zimmer umziehen – schon ist das erste Zimmer frei. Bei endlich vielen Zimmern h¨ atte dagegen der Gast mit der h¨ ochsten Zimmernummer ein Problem. ahlung zu gelangen. Bei Q ist es ein klein wenig schwieriger, zu einer Aufz¨ Wenn es uns gelingt, die positiven Br¨ uche abzuz¨ ahlen, dann k¨ onnen wir wie zuuche in eine Aufz¨ ahlreihenfolge bringen. Bei der Cantorvor bei Z auch alle Br¨ Diagonalisierung werden alle positiven Br¨ uche in das Schema aus Abbildung 3.14 mit unendlich vielen Zeilen und Spalten geschrieben. Durch K¨ urzen sehen wir, dass Zahlen mehrfach auftreten. Wir lesen die unendliche Tabelle diagonalenweise (von links unten nach rechts oben) und lassen Mehrfachnennungen der Zahlen weg. Da jede Diagonale eine endliche L¨ ange hat, erreichen wir so irgendwann jeden positiven Bruch und erhalten die Reihenfolge 1 = 11 , 12 , 2, 13 , 3, 14 , 23 , 32 , 4, . . . und damit die Abbildung 1 → 1, 12 → 2, 2 → 3, . . . Obwohl Q als Erweiterung aus N entstanden ist, kann jeder Bruch als nat¨ urliche Zahl codiert werden und umgekehrt. Mit dieser Codierung der Br¨ uche l¨ asst sich aber nur schwierig rechnen.
Abb. 3.14 Das erstes Diagonalargument von Cantor
Wir k¨ onnten nun vermuten, dass auch R abz¨ ahlbar ist. Das stimmt aber nicht. Von Cantor stammt ein zweites Diagonalargument, mit dem wir mittels Widerspruch zeigen, dass bereits die Zahlen des Intervalls [0, 1] nicht abz¨ ahlbar sind. Dazu nehmen wir an, dass es eine Aufz¨ ahlung x1 = 0, x1,1 x1,2 x1,3 . . . x2 = 0, x2,1 x2,2 x2,3 . . .
202
3 Zahlen und Strukturen x3 = 0, x3,1 x3,2 x3,3 . . . .. . xk = 0, xk,1 xk,2 xk,3 . . . xk,k . . . , .. .
der Zahlen aus [0, 1] gibt, wobei xk,i die i-te Nachkommastelle einer Dezimalbruchdarstellung der k-ten reellen Zahl der Aufz¨ ahlung ist, also xk,i ∈ {0, 1, . . . ,9}. Damit konstruieren wir eine neue Zahl, die Diagonalzahl y = 0, y1 y2 y3 . . . , deren i-te Nachkommastelle definiert ist u ¨ ber die Hauptdiagonale der obigen Auflistung der Nachkommastellen als 1 falls xi,i = 1, yi := 2 falls xi,i = 1. Wir wissen nach Satz 3.34, dass die Diagonalzahl tats¨ achlich eine reelle Zahl ist. Nach Konstruktion liegt sie in [0, 1], ist aber von allen Zahlen xk verschieden, da sie sich an mindestens einer Nachkommastelle unterscheidet und die Dezimaldarstellung eindeutig bis auf Neunerperioden ist (vgl. Bemerkung auf Seite 166, die Eindeutigkeit zeigen wir hier nicht). Damit haben wir einen Widerspruch dazu, dass {x1 , x2 , . . . } bereits alle reellen Zahlen zwischen 0 und 1 umfasst. R ist daher nicht abz¨ ahlbar, wir bezeichnen R als u ahlbar. Dass in R viel ¨ berabz¨ otigen wir im n¨ achsten Kapitel f¨ ur die Existenz mehr Zahlen als in Q liegen, ben¨ von Grenzwerten. F¨ ur die Zahlendarstellung im Computer ist das aber nicht so schlimm, da wir durch Abschneiden von Nachkommastellen jede reelle Zahl beliebig genau durch Br¨ uche ann¨ ahern k¨ onnen. Man sagt, dass die Br¨ uche dicht in R liegen. Aufgabe 3.26 Mit dem zweiten Diagonalargument von Cantor k¨ onnte man vielleicht auch zeigen, dass die nat¨ urlichen Zahlen nicht abz¨ ahlbar sind. Man schreibe die nat¨ urlichen Zahlen in einer unendlich langen Liste untereinander und konstruiere eine weitere Zahl, die sich an der Einerstelle von der ersten Zahl, an der Zehnerstelle von der zweiten Zahl, usw. unterscheidet. Warum funktioniert das nicht?
4 Ausgew¨ ahlte Kapitel der Analysis
¨ Ubersicht 4.1 4.2 4.3 4.4 4.5 4.6 4.7
Folgen und Landau-Symbole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Reihen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Laufzeit rekursiver Algorithmen: Master-Theorem . . . . . . . . . . . . . . . . Konvergenz von Folgen und Reihen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Analyse des randomisierten Quicksort . . . . . . . . . . . . . . . . . . . . . . . . . . . Stetigkeit und Differenzierbarkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Integral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
205 211 217 225 241 244 263
Wir haben bereits im Kapitel 1.2.5 (vollst¨ andige Induktion) die Laufzeit eines sehr einfachen Sortieralgorithmus betrachtet. In Abh¨ angigkeit der Anzahl ur n der zu sortierenden Daten haben wir dabei die Anzahl 12 (n2 − n) der f¨ eine Sortierung notwendigen Vergleiche bestimmt. Wir haben damit eine Zuurlichen Zahl ordnung von n zu 12 (n2 − n), also eine Abbildung, die jeder nat¨ n ∈ N einen Wert zuweist. Eine Abbildung mit Definitionsbereich N nennt man eine (unendliche) Folge. In der Informatik treten Folgen h¨ aufig als Ergebnis von Laufzeitabsch¨ atzungen auf. Entsprechend motivieren wir in diesem Kapitel einige Aussagen, indem wir Algorithmen untersuchen. Mit Folgen k¨ onnen wir auch beschreiben, wie nah ein Algorithmus nach n Schritten einem zu berechnenden Ergebnis kommt. Dabei w¨ are es vorteilhaft, wenn der Fehler mit wachsender Schrittzahl n immer kleiner wird und letztlich gegen null strebt. Aber was bedeutet dieses Streben gegen einen Wert? Wir werden hier den Begriff des Grenzwerts kennen lernen: Wenn der Fehler gegen null strebt, dann wird jede vorgegebene (nicht exakte) Genauigkeit nach endlicher Zeit erreicht. F¨ ur eine vorgegebene genaue Anzahl von Nachkommastellen terminiert der Algorithmus. Wir k¨ onnen π z. B. auf 10 oder 50 Stellen genau berechnen. Dabei werden wir f¨ ur 50 Stellen i. A. mehr Schritte n als f¨ ur 10 Stellen ben¨ otigen. Grenzwertbetrachtungen sind Gegenstand der Analysis. Im Gegensatz zur Algebra, bei der man mittels Rechenregeln Gleichheiten herstellt, wird in der S. Goebbels, J. Rethmann, Mathematik für Informatiker, DOI 10.1007/978-3-642-55340-0_4, © Springer-Verlag Berlin Heidelberg 2014
204
4 Ausgew¨ ahlte Kapitel der Analysis
Analysis oft abgesch¨ atzt, also mit Ungleichungen gearbeitet. Ein Fehler soll beispielsweise kleiner als eine vorgegebene Genauigkeit werden. Das Rechnen mit Ungleichungen wird auf der Schule nicht ge¨ ubt, ist aber eigentlich leichter als der Umgang mit Gleichungen. Denn man darf viel mehr machen. Beim Vergr¨ oßern d¨ urfen wir z. B. zu einem Term irgendeine Zahl > 0 addieren. Wenn wir dagegen ein Gleichheitszeichen verwenden, d¨ urfen wir nur die Null addieren. Ganz wichtig in der Analysis ist die Dreiecksungleichung (vgl. Seite 80): |x + y| ≤ |x| + |y| f¨ ur alle x, y ∈ R. Zum Beweis k¨ onnen Sie die F¨ alle x ≥ 0 oder x < 0 in Kombination mit y ≥ 0 oder y < 0 diskutieren. Bei gemischten Vorzeichen kommt es auf der linken Seite zu Ausl¨ oschungen, die es rechts nicht gibt. Durch mehrfache Anwendung u agt sich die Ungleichung von zwei auf endlich viele Zahlen. ¨ bertr¨ Es ist nicht u ¨bertrieben zu sagen, dass die Analysis eine Anwendung dieser Ungleichung ist. M¨ ochten wir beispielsweise den Fehler absch¨ atzen, den wir bei der Berechnung von sin(x) mit einem N¨ aherungsalgorithmus sinus machen, so k¨ onnen wir den Fehler in einfacher zu handhabende Teile zerlegen. Zun¨ achst rechnen wir nicht mit der reellen Zahl x, da wir nicht unendlich viel Speicher haben. Ersetzen wir z. B. x = π4 durch 0,78125 = (0,11001)2 , dann berechnen wir anschließend nur einen N¨ aherungswert von sin(0,78125) mittels sinus: ( ( ! π ( ( − sinus(0,78125)( (sin 4 ( ( ! π ( ( = (sin − sin(0,78125) + sin (0,78125) − sinus(0,78125)( 4 ( ( ! π ( ( ≤ (sin − sin(0,78125)( + |sin (0,78125) − sinus(0,78125)| . (4.1) 4 Wir haben damit den zu untersuchenden Fehler gegen die Summe zweier anderer Fehler abgesch¨ atzt. Der erste dr¨ uckt den Einfluss der Vereinfachung von π4 zu 0,78125 aus. Der zweite Fehleranteil beschreibt den Einfluss des Algorithmus. Solch eine Absch¨ atzung macht dann Sinn, wenn wir nicht nur f¨ ur eine konkrete onnten wir durch ausprobieren Zahl π4 den Fehler bestimmen wollen – den k¨ ussen. ermitteln – sondern f¨ ur jedes x ∈ R einen maximalen Fehler vorhersagen m¨ Oft werden dann unterschiedliche Fehlerarten mit unterschiedlichen Techniken weiter abgesch¨ atzt. Im Folgenden sehen wir uns mit Folgen und Reihen den f¨ ur die Kerndisziplinen der Informatik wichtigsten Teil der Analysis an.
4.1 Folgen und Landau-Symbole
4.1
205
Folgen und Landau-Symbole
Definition 4.1 (Folge) Eine Folge (an )∞ n=1 von Zahlen an ∈ R ist eine Abbildung von N nach R, die jedem n ∈ N eindeutig ein Folgenglied an zuordnet. Wenn es ein leicht nachvollziehbares Bildungsgesetz der Folge gibt, dann schreiben wir die Folge auch in Listenform als unendliches Tupel (an )∞ n=1 = onnen eine Folge mit einem unendlich großen Array verglei(a1 , a2 , a3 , . . . ). Sie k¨ chen. Der Wert a[k] der k-ten Position des Arrays entspricht dem Folgenglied onnen Sie nat¨ urlich in Wirklichkeit nicht speichern. ak . Unendlich große Arrays k¨ Hier schafft die Mathematik eine Art Paralleluniversum, das aber f¨ ur die reale Welt hilfreich ist. In der Informatik gibt es zudem abstrakte Maschinenmodelle wie die Turing-Maschine, mit der Sie aber auch dort zumindest in der Theorie mit unendlich großen Arrays arbeiten k¨ onnen. Wenn Sie eine Abbildungsvorschrift kennen, mit der Sie aus n den Wert an der Folge berechnen k¨ onnen, dann m¨ ussen Sie die Werte auch gar nicht abspeichern. Pseudo-Zufallszahlen werden in der Regel mit einer solchen Vorschrift aus einem initialen Wert a1 berechnet, der als Saat (seed) bezeichnet wird, z. B. wie folgt f¨ ur Werte von 0 bis 216 − 1: a1 := 0,
an+1 := (3421 · an + 1) mod 216 f¨ u r n ∈ N.
Pseudo-Zufallszahlen sind nicht wirklich zuf¨ allig, haben aber den Vorteil, dass durch ihren Einsatz ein Experiment wiederholbar ist. Das ist vor allem beim Debuggen von Software sehr hilfreich. Eine Folge (an )∞ n=1 hat die Wertemenge {a1 , a2 , a3 , . . . }. Es gibt einen wichtigen Unterschied zwischen den Datentypen“ Menge und Folge: Bei einer Folge ” spielt die Reihenfolge (die ja schon im Namen steckt) eine Rolle. Die Position wird auf den Wert abgebildet. Bei einer Menge ist die Reihenfolge ihrer Elemente unwichtig. Das haben wir bei der Schreibweise von Kanten in einem ungerichteten Graphen ausgenutzt. Außerdem kann man nicht wie bei einer Folge sagen, dass eine Zahl mehrfach in einer Menge enthalten ist. Sie ist enthalten, oder sie ist nicht enthalten. Daher konnten wir mit einer Kantenmenge keine Mehrfachkanten darstellen. Um den Unterschied zur Menge sichtbar zu machen, schreibt man eine Folge auch nicht als Menge und verwendet runde Klammern. H¨ aufig sieht man auch Folgen, deren erstes Glied nicht den Index 1, sondern uhrt zu den Index 0 (oder eine andere ganze Zahl) hat, also a0 , (an )∞ n=0 . Das f¨ keinen Problemen, denn man kann die Folgenglieder einfach mittels bn := an−1 ∞ umnummerieren: Aus (an )∞ n=0 wird (bn )n=1 .
206
4 Ausgew¨ ahlte Kapitel der Analysis
Definition 4.2 (beschr¨ ankte Folgen) Eine reelle Folge (an )∞ ankt, wenn n=1 heißt genau dann nach oben beschr¨ ein M ∈ R (obere Schranke) existiert mit ur alle n ∈ N. an ≤ M f¨ Die Folge heißt genau dann nach unten beschr¨ ankt, wenn ein m ∈ R (untere Schranke) existiert mit ur alle n ∈ N. m ≤ an f¨ Die Folge heißt beschr¨ ankt genau dann, wenn sie nach oben und unten ankt ist. beschr¨ ankt ist, d. h., wenn (|an |)∞ n=1 nach oben beschr¨
∞ Unsere Anzahl-der-Vergleiche-Folge 12 (n2 − n) n=1 ist offensichtlich nicht nach oben beschr¨ ankt, hat aber z. B. eine untere Schranke 0. Dagegen ist die 1 ∞ ankt und damit Folge n n=1 nach oben mit 1 und nach unten mit 0 beschr¨ insgesamt beschr¨ ankt. Aufgabe 4.1 Ein Server kann 50 Anfragen pro Sekunde beantworten. In der ersten Sekunde treffen f¨ unf Anfragen ein, in jeder weiteren Sekunde f¨ unf mehr als in der vorangehenden Sekunde. Bestimmen Sie die Folge, deren n-tes Glied angibt, wie viele Auftr¨ age nach n Sekunden unbearbeitet sind. Beispiel 4.3 In den 1980er Jahren war es beliebt, mit Heimcomputern Apfelm¨ annchen zu berechnen. Ein Apfelm¨ annchen ist die Visualisierung einer ziemlich komplizierten Teilmenge der Zahlenebene, die nach dem Mathematiker Benoˆıt Mandelbrot beort genau dann zu nannte Mandelbrot-Menge. Ein Punkt (x, y) ∈ R × R geh¨ 2 ∞ )n=1 beschr¨ ankt dieser Menge, wenn eine zu dieser Zahl gebildete Folge (x2n + yn ist. Die Folge wird dabei rekursiv definiert u ¨ber 2 + x, yn+1 := 2xn yn + y. x1 := x, y1 := y und xn+1 := x2n − yn
Beispielsweise geh¨ ort der Punkt (0, 0) zur Menge, da daf¨ ur xn = yn = 0 gilt. Ebenso bleibt die Folge zum Punkt (0, 1) beschr¨ ankt, da sich die Glieder zyklisch wiederholen: (x1 , y1 ) = (0, 1), (x2 , y2 ) = (−1, 1), (x3 , y3 ) = (0, −1), ur (1, 0) (x4 , y4 ) = (−1, 1), (x5 , y5 ) = (0, −1) = (x3 , y3 ). Dagegen ist die Folge f¨ unbeschr¨ ankt: Offensichtlich sind alle yn = 0, also ist xn+1 = x2n + 1 ≥ 1. Somit sind alle xn ≥ 1 und xn+1 = x2n + 1 ≥ xn + 1. Das wenden wir iterativ an und erhalten xn+1 ≥ xn + 1 ≥ xn−1 + 1 + 1 ≥ xn−2 + 3 ≥ · · · ≥ x1 + n = 1 + n,
4.1 Folgen und Landau-Symbole
207
woraus sich die Unbeschr¨ anktheit ergibt. Der Punkt (1, 0) geh¨ ort also nicht zur Mandelbrot-Menge. Wir zeichnen die Mandelbrot-Menge n¨ aherungsweise mit dem Computer. Zu jedem Punkt (x, y) der Ebene pr¨ ufen wir die Beschr¨ anktheit der Folge, indem wir die ersten Glieder ausrechnen. Wenn wir nach 30 Gliedern noch nicht den Wert 4 u onnte die Folge beschr¨ ankt sein. Obwohl wir nicht wissen, ¨ berschritten haben, k¨ wie sich die folgenden Glieder verhalten, ordnen wir (x, y) (n¨ aherungsweise) der Mandelbrot-Menge zu, siehe Algorithmus 4.1. Wenn wir bereits nach weniger als 30 Gliedern die Schranke 4 u ankt ¨ berschreiten, dann ist die Folge unbeschr¨ ¨ und wir ordnen die Anzahl der bis zum Uberschreiten der Schranke ben¨ otigten Glieder einer Farbe zu. Es l¨ asst sich beweisen, dass die Folge unbeschr¨ ankt ist, 2 2 oßer als vier wenn ein Folgenglied xn + yn echt gr¨ und damit der Abstand des 2 > 2 ist. Insbesondere Punktes (xn , yn ) zum Nullpunkt |(xn , yn )| = x2n + yn folgt daraus, dass die Mandelbrot-Menge vollst¨ andig in einem Kreis mit Radius 2 um den Nullpunkt liegt. Das entstehende Bild der Menge (in der Mitte) mit den eingef¨ arbten Randbereichen sehen Sie in Abbildung 4.1. Die Mandelbrot-Menge ist ein Fraktal. So bezeichnet man selbst¨ ahnliche Strukturen: Vergr¨ oßert man einen Randbereich der schwarzen Fl¨ ache, dann findet man dort wieder die Form des Apfelm¨ annchens. Das setzt sich so unendlich fort.
Abb. 4.1 Die Mandelbrotmenge als schwarze Fl¨ ache, x ∈ [−2, 1] und y ∈ [−1, 1]
∞ Kommen wir noch einmal auf die Anzahl-der-Vergleiche-Folge 12 (n2 −n) n=1 = (0, 1, 3, 6, 10, . . . ) zur¨ uck. Wir sehen, dass mit wachsendem n die Folgenglieder immer gr¨ oßer werden. Solche Folgen nennen wir monoton wachsend. Da jedes Glied sogar echt gr¨ oßer als sein Vorg¨ anger ist, spricht man auch von strenger Monotonie: Definition 4.4 (Monotonie) Eine Folge (an )∞ n=1 heißt genau dann monoton wachsend, wenn an+1 ≥ an f¨ ur alle n ∈ N ist.
208
4 Ausgew¨ ahlte Kapitel der Analysis
Algorithmus 4.1 Farbe des Punktes (x, y) beim Apfelm¨ annchen function Mandelbrot(x, y) x1 := x, y1 := y, n := 1 2 ≤ 4) do while (n < 30) ∧ (x2n + yn 2 2 xn+1 := xn − yn + x, yn+1 := 2xn yn + y, n := n + 1 if n=30 then return schwarz else return Farbe(n)
Der Punkt hat die Farbe des Apfelm¨ annchens
streng monoton wachsend, wenn an+1 > an f¨ ur alle n ∈ N gilt. monoton fallend, wenn an+1 ≤ an f¨ ur alle n ∈ N ist. streng monoton fallend, wenn an+1 < an f¨ ur alle n ∈ N gilt. monoton, wenn die Folge monoton w¨ achst oder f¨ allt. Bei Absch¨ atzungen von Laufzeiten verwendet man in der Informatik die Landau-Symbole. Um die Laufzeit von Programmen zu ermitteln, die mathematische Rechnungen durchf¨ uhren, z¨ ahlt man h¨ aufig die Anzahl an der Multiplikationen in Abh¨ angigkeit der Eingabegr¨ oße n. Bei Sortieralgorithmen werden (wie zuvor bereits gemacht) h¨ aufig Vergleiche oder Vertauschungen gez¨ ahlt. Die Menge der beschr¨ ankten Folgen wird mit O(1) bezeichnet. (an )∞ n=1 ∈ beschr¨ a nkt ist. Folgen, die LaufzeiO(1) heißt also, dass die Folge (an )∞ n=1 ten beschreiben, sind in der Regel aber nicht beschr¨ ankt: Die Glieder werden u oße n auch immer gr¨ oßer, die Folgen ¨ blicher Weise mit wachsender Eingabegr¨ sind monoton wachsend. Um anzugeben, wie schnell die Laufzeit w¨ achst, vergleicht man die konkreten Laufzeiten mit Referenzfolgen. In Abbildung 4.2 sind 2 die Folgen zu an = n3 − 2n + 5 und bn = 30n + 50 gegeneinander aufgetraoßer gen. Man sieht hier, dass ab der Stelle n0 = 98 die Folgenglieder an gr¨ ur alle n > n0 := 98. Wenn es bei als die Folgenglieder bn sind: bn ≤ 1 · an f¨ nicht-negativen Folgen (die bei Aufwandsabsch¨ atzungen auftreten) eine Stelle ur eine Konstante C > 0 gilt, dann schreiben wir n0 gibt, ab der bn ≤ Can f¨ ∞ ur die (bn )∞ n=1 ∈ O(an ) und nennen die Folge (an )n=1 eine obere Schranke f¨ ∞ Folge (bn )n=1 . Diese Sprechweise ist leider doppeldeutig, denn wir haben bereits den Begriff obere Schranke“ f¨ ur eine Zahl verwendet, mit der eine nach oben ” ankt beschr¨ ankte Folge beschr¨ ankt ist. Die Folge (bn )∞ n=1 muss aber nicht beschr¨ sein. Wir werden auch Folgen mit negativen Gliedern bei der Untersuchung von Reihen vergleichen, so dass wir die O-Notation und ihre Verwandten noch etwas allgemeiner unter Verwendung von Betragsstrichen einf¨ uhren. Bei Aufwandsabsch¨ atungen in der Informatik treten keine negative Laufzeiten und tritt kein
4.1 Folgen und Landau-Symbole
209
negativer Speicherbedarf auf, daher k¨ onnen Sie in diesen F¨ allen ohne Betragsstriche arbeiten. Definition 4.5 (Landau-Symbole) Sei (cn )∞ n=1 eine Folge reeller Zahlen. a) Die Menge O(cn ) ist definiert als die Menge aller reellen Folgen, die nicht schneller wachsen als die gegebene Folge (cn )∞ n=1 , genauer ist (an )∞ n=1 ∈ O(cn ) genau dann, wenn eine von n unabh¨ angige Konstante C > 0 existiert, so dass f¨ ur alle bis auf endlich viele n ∈ N gilt: |an | ≤ C · |cn |. Endlich viele Folgenglieder im vorderen Bereich der Folge m¨ ussen also nicht ber¨ ucksichtigt werden, der Vergleich muss erst ab einer Stelle n0 ∈ N, also f¨ ur n > n0 , gelten. b) Die Menge Ω(cn ) ist definiert als die Menge aller reellen Folgen, die nicht langsamer wachsen als die gegebene Folge (cn )∞ n=1 , genauer ist (an )∞ n=1 ∈ Ω(cn ) genau dann, wenn eine von n unabh¨ angige Konstante c > 0 existiert, so dass f¨ ur alle bis auf endlich viele n ∈ N gilt: |an | ≥ c · |cn |. c) W¨ achst die Folge (an )∞ n=1 nicht schneller aber auch nicht langsamer als ∞ (cn )n=1 , so verwenden wir die Θ-Notation: ∞ ∞ (an )∞ n=1 ∈ Θ(cn ) ⇐⇒ [(an )n=1 ∈ Ω(cn )] ∧ [(an )n=1 ∈ O(cn )] ,
ur alle n > n0 d. h., es gibt ein n0 ∈ N und Konstanten c, C > 0, so dass f¨ gilt: c · |cn | ≤ |an | ≤ C · |cn |. Die Ω-Schreibweise l¨ asst sich durch die O-Notation ersetzen: ∞ (an )∞ n=1 ∈ Ω(cn ) ⇐⇒ (cn )n=1 ∈ O(an ).
Die Θ-Notation ist kommutativ in dem Sinne, dass ∞ (an )∞ n=1 ∈ Θ(cn ) ⇐⇒ (cn )n=1 ∈ Θ(an ).
210
4 Ausgew¨ ahlte Kapitel der Analysis
5000 4000 3000 2000
bn
an
1000 0 0
20
40
60
80
100
120
Abb. 4.2 Die Folge zu an = n2 achst st¨ arker als 3 − 2n + 5 w¨ die Folge zu bn = 30n+50. Daher gilt (bn )∞ n=1 ∈ O(an ).
Wir haben es hier mit Mengen von Folgen zu tun. Trotzdem findet man h¨ aufig die Schreibweise an ∈ O(cn ) statt (an )∞ n=1 ∈ O(cn ). Auch wird bisweilen ∈ durch = ersetzt, wir tun das aber nicht. Mit an = O(cn ) meint man also (an )∞ n=1 ∈ O(cn ). Wenn wir von einer Laufzeit O(cn ) sprechen, dann wollen wir damit sagen, dass die tats¨ achliche Laufzeit in der Menge O(cn ) liegt. Wenn wir eine Folge u ¨ ber an +O(cn ) angeben, dann meinen wir eine Folge, deren Glieder eine Darstellung ur eine Folge (bn )∞ an + bn f¨ n=1 ∈ O(cn ) haben. ∞ Die Anzahl-der-Vergleiche-Folge 21 (n2 − n) n=1 ist in der Menge O(n2 ), denn f¨ ur alle n ∈ N ist n2 − n = n(n − 1) ≥ 0, und es gilt: ( ( (1 2 ( ( (n − n)( = 1 (n2 − n) ≤ C · n2 (2 ( 2 mit einer Konstante C ≥ 12 . Wie Sie sehen, k¨ onnen wir bei dieser Laufzeitabsch¨ atzung auf die Betragsstriche verzichten. Bei den Laufzeit-Analysen sind wir nat¨ urlich nicht an irgendwelchen oberen Schranken interessiert, sondern an den kleinsten oberen Schranken. Die Anzahl-der-Vergleiche-Folge ist auch asst, sehen wir darin O(n3 ). Dass sich O(n2 ) aber nicht mehr verbessern l¨ 1 2 ∞ 2 ussen wir noch zeigen, dass an, dass 2 (n − n) n=1 ∈ Θ(n ) ist. Dazu m¨ 1 2 ∞ 2 (n − n) ∈ Ω(n ) ist, dass also z. B. f¨ u r n ≥ 2 gilt: 12 (n2 − n) ≥ 14 n2 . 2 n=1 2 Dazu beginnen wir die Absch¨ atzung mit n : 1 n2 = n(n − 1) + n ≤ n(n − 1) + n(n − 1) = 2(n2 − n) ≤ 4 · (n2 − n). 2 Division durch 4 liefert die zu zeigende Ungleichung. Wird eine Laufzeit durch ein Polynom mit der Eingangsgr¨ oße n als Variable beschrieben, so dominiert die h¨ ochste auftretende Potenz das Laufzeitverhalten. Das werden wir uns genauer im Rahmen von Grenzwertuntersuchungen ansehen. Aufgabe 4.2 ∞ Beweisen Sie, dass f¨ ur zwei Folgen (an )∞ n=1 , (bn )n=1 und c ∈ R, c > 0, gilt:
4.2 Reihen
211
ur die Absch¨ atzung einer Laufzeit ben¨ otigt, a) (c · an )∞ n=1 ∈ O(an ). Dies wird f¨ wenn wir den gleichen Algorithmus z. B. in einer Schleife c-mal hintereinander ausf¨ uhren. Dabei muss c aber konstant sein und darf nicht von der Eingabegr¨ oße n abh¨ angen. ∈ O(max{|a oßte Element (Maxib) (an + bn )∞ n |, |bn |}), wobei max das gr¨ n=1 mum) der Menge bezeichnet, siehe Seite 4. Diese Absch¨ atzung wird ben¨ otigt, wenn die Gesamtlaufzeit nacheinander ablaufender (verschiedener) Algorithmen gesucht ist. atzungen ist die konkrete Basis c) (logc (n))∞ n=1 ∈ O(log 2 (n)), d. h., bei Absch¨ eines Logarithmus nicht wichtig. Aufgabe 4.3 Um zu bestimmen, ob ein ungerichteter Graph G = (V, E) eine Euler-Tour besitzt, m¨ ussen wir unter Anderem untersuchen, ob alle Knotengrade gerade sind. Der Algorithmus 4.2 berechnet die Knotengrade. Welche Laufzeit (Anzahl der Durchl¨ aufe des innersten Schleifenrumpfes) hat der Algorithmus, wenn der Graph einmal als Adjazenz-Matrix und ein anderes Mal als Adjazenz-Liste gespeichert ist? Dr¨ ucken Sie Ihr Ergebnis mit der Landau-Symbolik aus. Algorithmus 4.2 Berechnung der Knotengrade eines Graphen for all u ∈ V do deg[u] := 0 for all v ∈ V adjazent zu u do deg[u] := deg[u] + 1
Aufgabe 4.4 Schreiben Sie einen effizienten Algorithmus, um in einem sortierten/unsortierten Array von n Zahlen das Maximum und das Minimum zu finden. Beschreiben Sie die Anzahl der durchzuf¨ uhrenden Vergleiche mit den Landau-Symbolen. Wir ben¨ otigen noch etwas Wissen u ¨ ber Reihen, bevor wir dann in Abschnitt 4.3 die Landau-Symbole zur Analyse von weiteren Algorithmen einsetzen.
4.2
Reihen
Wir haben bei der Stellenwertdarstellung reeller Zahlen bereits eine unendliche Summe der Nachkommastellen kennengelernt und diese u ¨ ber eine Intervallschachtelung erkl¨ art (Kapitel 3.6.3). Solch eine unendliche Summe heißt Reihe. Eine Reihe entsteht beispielsweise bei der Analyse des Sortierverfahrens Heap-Sort aus einer zun¨ achst endlichen Summe. Beim Heap-Sort wird aus
212
4 Ausgew¨ ahlte Kapitel der Analysis
dem zu sortierenden Zahlentupel (Array) ein Heap erzeugt. Ein Tupel F = ussel nen(k0 , . . . , kn ) von Werten, die wir im Kontext von Sortierverfahren Schl¨ nen, heißt ein Heap, wenn ur alle Indizes i mit 2i + 1 ≤ n und ki ≥ k2i+1 f¨ ur alle Indizes i mit 2i + 2 ≤ n ki ≥ k2i+2 f¨ gilt. Man kann sich einen Heap als Bin¨ arbaum vorstellen, bei dem alle Ebenen bis auf die letzte vollst¨ andig besetzt sind, siehe Abbildung 4.3. Im dargestellten Beispiel ist die Heap-Eigenschaft erf¨ ullt. Die Knoten zu den Indizes 4, 5, 6 und 7 haben keine Nachfolger, daher muss die Heap-Eigenschaft f¨ ur diese Knoten nicht u uft werden. F¨ ur die anderen Knoten gilt: ¨ berpr¨ k0 k1 k2 k3
= 8 ≥ k1 = 6 ≥ k3 = 7 ≥ k5 = 3 ≥ k7
= 6 und k0 ≥ k2 = 7, = 3 und k1 ≥ k4 = 4, = 5 und k2 ≥ k6 = 2, = 1.
8 0 6 1 3 3 1 7
4 4
7 2 5 5
2 6
Abb. 4.3 Heap als Bin¨ arbaum: Indizes der Schl¨ ussel sind neben den Knoten, die Schl¨ ussel in den Knoten notiert. Das Tupel (8, 6, 7, 3, 4, 5, 2, 1) kann als Baum dargestellt werden. Heap-Sort sortiert die Werte in einem Array. Die Darstellung als Baum w¨ ahlen wir nur, um das Verfahren grafisch darzustellen. Die Heap-Eigenschaft bedeutet, dass der Schl¨ ussel jedes Knotens gr¨ oßer oder gleich den Schl¨ usseln der bis zu zwei Nachfolgeknoten (Kinder) ist.
Nachdem wir nun wissen, was ein Heap ist, u ¨ berlegen wir uns noch, wie man mit Hilfe eines Heaps sehr schnell sortieren kann. Der gr¨ oßte Schl¨ ussel ist auf jeden Fall an Position 0 des Heaps, also in der Wurzel des Baumes, gespeichert. Also gehen wir wie folgt vor: Wir tauschen die Werte von k0 und kn und damit den ersten und den letzten Schl¨ ussel des Heaps (siehe Abbildung 4.4). Dadurch ist das gr¨ oßte Element am richtigen Platz. Diesen Platz betrachten wir im weiteren Verlauf nicht mehr. Leider ist durch diesen Tausch in der Regel die Heap-Eigenschaft an der Wurzel des Baumes verletzt. Um die Heap-Eigenschaft wieder herzustellen, lassen wir den Schl¨ ussel der Wurzel des Baumes im Heap versickern, indem er immer mit dem gr¨ oßeren seiner Nachfolger getauscht wird, bis entweder beide Nachfolger kleiner sind oder der Schl¨ ussel unten am Baumende, also in einem Blatt, angekommen ist (siehe Abbildung 4.5). In dem n¨ achsten Schritt tauschen wir den Schl¨ ussel an der Wurzel mit dem Schl¨ ussel an Position n − 1, hier 6, und lassen den neuen Wert der Wurzel versickern (siehe Abbildung 4.6).
4.2 Reihen
213
1 0
8 0 6 1 3 3
7 2
4 4
5 5
6 1
2 6
3 3
1 7
7 2
4 4
5 5
2 6
Abb. 4.4 Sortieren mit Heap: Tausch der Wurzel mit dem letzten Platz
8 7
Einen Schritt wollen wir noch visualisieren, dann ist vermutlich das Vorgehen klar. Wir tauschen den Schl¨ ussel an der Wurzel mit dem Schl¨ ussel an Position n − 2, im Beispiel 5, anschließend wird wieder versickert (siehe Abbildung 4.7). Auf diese Art setzen wir das Verfahren fort, bis das gesamte Tupel sortiert ist. Bisher sind wir davon ausgegangen, dass bereits zu Beginn ein Heap vorliegt. Das ist nat¨ urlich in der Regel nicht so. Wir m¨ ussen also zu Beginn des Sortierens die Werte im Tupel so umordnen, dass ein Heap entsteht. Dazu lassen wir die Schl¨ ussel zu allen Knoten, die kein Blatt sind, versickern. Dabei beginnen wir mit dem gr¨ oßten Index und gehen absteigend vor. Dadurch werden schrittweise immer gr¨ oßere Heaps aufgebaut, bis letztlich nur noch ein einziger Heap u allig schon sor¨ brig bleibt. Wollen wir beispielsweise das (zuf¨ tierte) Tupel (1, 2, 3, 4, 5, 6, 7, 8) sortieren, dann sind die Bl¨ atter des Baums f¨ ur sich betrachtet bereits Heaps, denn Knoten ohne Nachfolger erf¨ ullen nat¨ urlich die Heap-Eigenschaft, siehe Abbildung 4.8. Der erste Knoten, der die HeapEigenschaft verletzen k¨ onnte, ist der Knoten an Position 3, denn dieser Knoten hat einen Nachfolger. F¨ ur diesen Knoten rufen wir die Versickern-Funktion auf. Nun m¨ ussen wir noch die Schl¨ ussel der Knoten an den Positionen und 2, 1 und 0 versickern, um den initialen Heap zu erstellen. Die zu versickernden Schl¨ ussel sind in Abbildung 4.8 jeweils ohne Schraffur unterlegt. Uns interessiert nun, wie lange das initiale Erstellen des Heaps dauert. Die Laufzeit messen wir als Anzahl der Vertauschungen von Schl¨ usselwerten. Wir k¨ onnten ganz grob absch¨ atzen und sagen: Die minimal m¨ ogliche H¨ ohe eines Bin¨ arbaums mit n Knoten ist nach (1.10) auf Seite 35 die Zahl h ∈ N0 mit ohe, die der Bin¨ arbaum 2h ≤ n < 2h+1 , also h ≤ log2 (n). Das ist auch die H¨ des Heaps hat, da alle bis auf die letzte Ebene vollst¨ andig mit Knoten besetzt 1 0 6 1 3 3 8 7
4 4
7 0
versickern 7 2 5 5
2 6
6 1 3 3 8 7
4 4
7 0 1 2 5 5
2 6
6 1 3 3
4 4
5 2 1 5
2 6
8 7
Abb. 4.5 Sortieren mit Heap: Versickern der Wurzel, die Heap-Eigenschaft im nicht schraffierten Teil des Baums ist wieder hergestellt.
214
4 Ausgew¨ ahlte Kapitel der Analysis 7 0 6 1
3 3
5 2
4 4
2 0
vertauschen
1 5
6 1
2 6
8 7
3 3
5 2
4 4
6 0
versickern
1 5
4 1
7 6
3 3
5 2
2 4
1 5
7 6
8 7
8 7
Abb. 4.6 Tausch der Wurzel mit dem vorletzten Platz, Versickern der neuen Wurzel
sind. Es muss weniger als n-mal die Versickern-Funktion aufgerufen werden, n¨ amlich f¨ ur alle Knoten ohne die Bl¨ atter. Jeweils wird maximal u ohe ¨ber die H¨ h versickert, also mit h¨ ochstens log2 (n) Vertauschungen. Also erhalten wir n · atzung der Laufzeit nach oben, die Laufzeit liegt in O(n · log2 (n) als Absch¨ atzung. log2 (n)). Wir schauen aber genauer hin und erhalten eine bessere Absch¨ Die Versickern-Funktion wird f¨ ur alle Knoten aufgerufen, die keine Bl¨ atter sind. Wir beginnen dabei zwar mit dem entsprechenden Knoten zum gr¨ oßten Index, aber f¨ ur das Z¨ ahlen der Vertauschungen ist diese Reihenfolge unwichtig, und wir beginnen das Z¨ ahlen bei der Wurzel. Wir ben¨ otigen daher maximal 1 = 20 -mal h Vertauschungen zum Versickern der Wurzel, 2 = 21 -mal h − 1 Vertauschungen zum Versickern der maximal zwei Knoten, die direkt von der Wurzel aus erreichbar sind, 4 = 22 -mal h − 2 Vertauschungen zum Versickern der maximal vier Knoten der n¨ achsten Ebene, 2h−1 -mal eine Vertauschung f¨ ur die maximal 2h−1 Knoten der vorletzten Ebene, wobei nur solche Knoten ber¨ ucksichtigt werden m¨ ussen, auf die noch Bl¨ atter folgen. Wir k¨ onnen daher den gesamten Aufwand absch¨ atzen durch ≤
Theap (n)
=
20 · h + 21 · (h − 1) + 22 · (h − 2) + · · · + 2h−1 · 1 h−1
2i · (h − i)
k=h−i
=
i=0 2 ≤n h
≤
4 1 3 3 8 7
2 4
k=1
5 2 7 6
h 2h ·k 2k
k=1
k=1
1 0
vertauschen
1 5
2h−k · k =
h h n k · k = n . 2k 2k
k=1
6 0
h
4 1 3 3 8 7
2 4
5 0
versickern 5 2 6 5
7 6
4 1 3 3
2 4
1 2 6 5
7 6
8 7
Abb. 4.7 Tausch der Wurzel mit dem drittletzten Platz, Versickern der neuen Wurzel
4.2 Reihen
215
1 0 2 1 4 3
1 0 3 2
5 4
6 5
2 1
7 6
8 7
8 3
1 0 3 2
5 4
6 5
2 1
7 6
4 7
8 3
5 4
5 4
1 0 7 2 6 5
8 1
3 6
4 7
6 5
3 6
4 7
1 0 2 1
8 3
7 2
4 3
5 4
8 0 7 2 6 5
5 1
3 6
2 7
4 3
1 4
7 2 6 5
3 6
2 7
Abb. 4.8 Aufbau des Heaps durch sukzessives Versickern
Dabei interessiert uns der Wert von h zun¨ achst nicht. Sp¨ ater allerdings auch nicht, wie wir gleich sehen werden. Zun¨ achst wollen wir u ¨ berlegen, wie wir den Wert durch eine geschlossene Formel berechnen k¨ onnen. Dazu betrachten wir Werte der Summe m−1 m k k m m = + m = sm−1 + m sm := k 2 2k 2 2 k=1
k=1
in Tabelle 4.1. Vielleicht erinnern Sie sich jetzt an den Induktionsschritt bei der vollst¨ andigen Induktion zum Beweis einer gegebenen Formel. Nun benutzen wir die gleiche Technik, um rekursiv eine Formel aufzustellen. Aus der Tabelle 4.1 oßer wird als 2. k¨ onnen wir ablesen, dass der Wert f¨ ur sm vermutlich niemals gr¨ Außerdem erkennen wir in der letzten Spalte eine Gesetzm¨ aßigkeit: Der Z¨ ahler wird in jedem Schritt um eins gr¨ oßer, der Nenner wird mit zwei multipliziert, d. h. m+2 . (4.2) sm = 2 − 2m Tab. 4.1 Wertetabelle f¨ ur sm
m 1 2 3 4 5 6
sm 1 · 12 1 1 2 2 2 +2· 4 = 4 + 4 4 1 8 3 4 +3· 8 = 8 + 8 11 1 22 4 + 4 · 16 = 16 + 16 8 26 1 52 5 16 + 5 · 32 = 32 + 32 57 1 114 6 32 + 6 · 64 = 64 + 64
= = = = = =
1 2 4 4 11 8 26 16 57 32 120 64
= = = = = =
2− 2− 2− 2− 2− 2−
3 2 4 4 5 8 6 16 7 32 8 64
216
4 Ausgew¨ ahlte Kapitel der Analysis
Abb. 4.9 Beide Quadrate haben Kantenl¨ P ange1 eins. Links: Die geometrische Summe n k=1 2k = (0,111 . . . 1)2 strebt f¨ ur wachsendes n gegen den Wert 1. Rechts: Die Summe der Fl¨ achen der n + 1 P 1 ineinander liegenden Quadrate ist n k=0 2k = 2.
1/2 1/4
1/8
Zun¨ achst einmal mag es verwundern, dass eine Summe, die immer mehr Zahlen addiert, nicht gr¨ oßer als 2 wird. Tats¨ achlich ist das auch nicht immer so. Ein anderes Beispiel, bei dem die Summe aber endlich bleibt, ist in Abbildung 4.9 visualisiert. Aus der linken Skizze wird deutlich, dass der Wert der ersten Summe auch f¨ ur beliebig viele Summanden nicht gr¨ oßer als 1 wird. Aber auch bei einer anderen Summe kann man das sehr einfach sehen: n 9 = 0,9 + 0,09 + 0,009 + . . . + 9 · 10−n ≤ 0, 9 = 1. 10k
k=1
Die von uns hergeleitete geschlossene Formel f¨ ur sm ist wieder mittels ¨ vollst¨ andiger Induktion zu zeigen. Das u ¨berlassen wir Ihnen als Ubungsaufgabe (siehe Aufgabe 1.10). Wir k¨ onnen also festhalten, dass sm < 2 gilt, und somit ist der Aufwand zur initialen Heap-Erstellung (4.2)
Theap (n) ≤ n · sh ≤ 2n, d. h., der Aufwand liegt in O(n) unabh¨ angig von h. Bisher haben wir nur die Anzahl der Vertauschungen gez¨ ahlt. Die Anzahl der Vergleiche ist immer h¨ ochstens doppelt so groß wie die Anzahl der Vertauschungen, da immer der linke und rechte Nachfolger (falls er existiert) f¨ ur die Maximumbestimmung ausgewertet werden m¨ ussen. Da konstante Faktoren in der Landau-Notation wegfallen (siehe Aufgabe 4.2 a)), ist der Aufwand zum Erstellen des initialen Heaps – selbst wenn wir Vergleiche und Vertauschungen z¨ ahlen – in O(n). Der Vollst¨ andigkeit halber wollen wir erw¨ ahnen, dass die gesamte Laufzeit von Heap-Sort sogar im ur ein Sortierverfahren, das auf schlechtesten Fall in O(n · log2 (n)) liegt, was f¨ paarweisem Vergleich der zu sortierenden Schl¨ ussel beruht, bestm¨ oglich ist. Aufgabe 4.5 Zeigen Sie, dass im ung¨ unstigsten Fall (Worst-Case) die bei vorliegendem Heap zum Sortieren von n Schl¨ usseln erforderliche Anzahl von Vertauschungen in O(n · log2 (n)) liegt. achst, wird der Bruch m+2 Da 2m mit wachsendem m sehr schnell w¨ 2m aus (4.2) ur großes m dem Wert sehr schnell sehr klein. Daher n¨ ahert sich der Wert sm f¨ 2 an. Das dr¨ ucken wir u ¨ ber einen Grenzwert aus: lim sm = lim 2 −
m→∞
m→∞
m+2 = 2. 2m
4.3 Laufzeit rekursiver Algorithmen: Master-Theorem
217
Wir haben damit in diesem Kapitel zwei neue Konzepte verwendet, die wir noch mathematisch sauber“ erkl¨ aren m¨ ussen. Einerseits ist dies der Begriff der ” Reihe und andererseits der Begriff des Grenzwertes. Reihen definieren wir jetzt, den Grenzwerten spendieren wir einen eigenen Abschnitt. Definition 4.6 (Reihe) Hat man eine Folge (ak )∞ alt man daraus eine neue Folge (sn )∞ n=1 , k=1 , so erh¨ indem man jeweils die ersten n Glieder a1 , a2 , . . . , an aufsummiert: sn = a1 + a2 + · · · + an =
n
ak .
k=1
eine Reihe. Eine andere Schreibweise f¨ ur die Folge Man nennt (sn )∞ n n=1 ∞ ∞ ∞ (sn )n=1 = k=1 ak n=1 ist k=1 ak . Jedes Folgenglied sn heißt eine Partialsumme, da sie ein Teil der unendlichen Summe ist. Eigentlich ist der Begriff der Reihe u ussig, da jede Reihe eine Folge ¨ berfl¨ ist, aber umgekehrt auch jede Folge (s )∞ (sn )∞ n n=1 n=1 als Reihe zur Ausgangsfolge ur k > 1, aufgefasst werden kann. Die Partialsummen a1 := s1 , ak := sk − sk−1 f¨ dieser Ausgangsfolge sind n¨ amlich gleich sn : n
ak = s1 +
k=1
n
(−sk−1 + sk ) = s1 − s1 + s2 − s2 + · · · + sn−1 − sn−1 + sn = sn .
k=2
Hier haben wir ein Folgenglied sn durch Addition vieler Nullen als Summe geschrieben. Dieses Aufbl¨ ahen“ nennt man Teleskop-Summe, da die Darstellung ” durch Nullen auseinander gezogen wird. Da viele praktisch wichtige Folgen u ¨ ber eine Summation aufgebaut sind, ist es aber dennoch sinnvoll, zus¨ atzlich zum Begriff der Folge auch den Begriff der Reihe zu verwenden. Aufgabe 4.6 Zeigen Sie: n k=1
4.3
1 k·(k+1)
1 = 1 − n+1 . Benutzen Sie, dass
1 k·(k+1)
=
1 k
1 − k+1 ist.
Laufzeit rekursiver Algorithmen: Master-Theorem
Bereits auf Seite 31 haben wir einen rekursiven Algorithmus betrachtet. Hier m¨ ochten wir uns am Beispiel des Sortierverfahren Quicksort ansehen, wie man die Laufzeit solcher Algorithmen absch¨ atzen kann. Quicksort wurde 1962 von C.A.R. Hoare ver¨ offentlicht und ist eines der schnellsten allgemeinen Sortierverfahren. Es ist ein Divide-and-Conquer-Algorithmus (Teile und herrsche!).
218
4 Ausgew¨ ahlte Kapitel der Analysis
Zum Sortieren einer Liste (genauer: eines Arrays) von Schl¨ usseln geschieht Folgendes: a) Divide: Wir w¨ ahlen das erste Listenelement p aus. Mit dem Pivot-Element p wird nun die restliche Liste in zwei Teillisten K und G aufgeteilt, wobei K nur Werte enth¨ alt, die kleiner oder gleich p sind, und G nur Werte enth¨ alt, die gr¨ oßer oder gleich p sind. Pivot steht f¨ ur Dreh- oder Angelpunkt. Ein Pivot-Element hat immer eine wichtige Aufgabe, wir werden dem Begriff noch einmal beim L¨ osen linearer Gleichungssysteme begegnen. b) Conquer: Wir sortieren K und G rekursiv. Da K und G aus der Restliste ohne Pivot-Element gebildet werden, sind sie um mindestens ein Element kleiner als die urspr¨ ungliche Liste. Daher terminiert das Verfahren, d. h., es kommt irgendwann zum Ende. c) Combine: In diesem Schritt werden bei Divide-and-Conquer-Algorithmen die berechneten Teill¨ osungen zusammengefasst. Bei Quicksort ist dies einfach: Die sortierte Liste besteht aus dem Ergebnis der Sortierung von K gefolgt vom Pivot-Element p gefolgt vom Ergebnis der Sortierung von G. Algorithmus 4.3 Aufteilen einer Liste in zwei Teillisten 1: function Partition(l, r) 2: p := A[l], i := l + 1, j := r 3: repeat 4: while (i < r) ∧ (A[i] ≤ p) do 5: i := i + 1 7:
while (j > l) ∧ (A[j] ≥ p) do j := j − 1
8:
if i < j then Swap(i, j)
6:
9: 10: 11:
until j ≤ i Swap(l, j) return j
Tausche Pivot-Element an die richtige Stelle
Das Aufteilen der Liste in zwei Teillisten ist auch nicht schwer, wenn man es erst einmal verstanden hat. In Algorithmus 4.3 arbeiten wir mit zwei Indizes i und j, wobei i von links nach rechts durch das Array l¨ auft (Zeilen 4 und 5) und j von rechts nach links (Zeilen 6 und 7). Mit Hilfe der beiden Indizes suchen wir Werte, die dort nicht hingeh¨ oren, wo sie gerade stehen. Wenn wir solche Werte gefunden haben, dann tauschen wir die Werte an den Positionen i und j mit der Funktion Swap in Zeile 8. Das Weitersetzen des Index i muss dann gestoppt werden, wenn ein Wert gr¨ oßer als p gefunden wird (rechte Bedingung in Zeile 4), denn der geh¨ ort in den rechten Teil der Liste. Dahingegen muss das Weitersetzen des Index j dann gestoppt werden, wenn ein Wert kleiner als p gefunden wird (rechte Bedingung in Zeile 6), denn der geh¨ ort in den linken
4.3 Laufzeit rekursiver Algorithmen: Master-Theorem
219
Teil der Liste. Nat¨ urlich m¨ ussen wir auch noch sicherstellen, dass die Indizes nicht auf Werte außerhalb des Arrays zugreifen, daf¨ ur ist jeweils der erste Teil der while-Bedingungen zust¨ andig. Die Prozedur Swap(i, j) tauscht die Werte an den Positionen i und j. Nachdem alle betroffenen Werte getauscht wurden, muss nur noch das Pivot-Element an die richtige Stelle gebracht werden. Dazu werden die Werte an den Positionen l und j getauscht, was in Zeile 10 erfolgt. Algorithmus 4.4 Quicksort procedure QuickSort(l, r) if l < r then m := Partition(l, r) QuickSort(l, m − 1) QuickSort(m + 1, r) Damit haben wir bereits die eigentliche Arbeit getan, denn Quicksort (siehe Algorithmus 4.4) besteht jetzt nur noch aus dem Aufrufen der Prozedur Partition und dem anschließenden rekursiven Aufruf von Quicksort f¨ ur den linken und rechten Teil des Arrays. Wenn die zu sortierende Schl¨ usselliste aus n Elementen besteht, dann erfolgt der initiale Aufruf durch Quicksort(0, n − 1), da alle Schl¨ ussel von Position 0 bis Position n − 1 sortiert werden sollen. Der erste Schl¨ ussel steht hier also an Position 0. So verhalten sich Arrays in C, Java und vielen anderen Programmiersprachen, w¨ ahrend man in der Mathematik h¨ aufig mit dem Index 1 beginnt (was dann zu Fehlern f¨ uhren kann). Wir sind an der Laufzeit des Algorithmus interessiert und z¨ ahlen die Anzahl der Vergleiche und Vertauschungen. Beginnen wir mit der Untersuchung des Falles, in dem der Algorithmus die meiste Zeit ben¨ otigt, also der Worst-CaseAnalyse: Dazu betrachten wir eine umgekehrt sortierte Liste n, n − 1,. . . , 1. Bei jedem rekursiven Aufruf ist die Teilliste G leer und die Teilliste K wird nur um ein Element, das Pivot-Element, k¨ urzer. Das liegt an unserer Wahl des Pivot-Elements: Da wir immer das erste Element der Teilliste w¨ ahlen und die Liste umgekehrt sortiert ist, w¨ ahlen wir immer das gr¨ oßte Element der Teilliste als Pivot-Element. Dass dieser Fall tats¨ achlich der schlechteste ist, liegt daran, dass wir auf diese Weise die gr¨ oßte Rekursionstiefe erreichen. Von Ebene zu Ebene muss dabei jeweils nur ein Element weniger ber¨ ucksichtigt werden. Dabei bleiben pro Ebene in Summe mindestens so viele Elemente zu sortieren, wie bei jeder anderen denkbaren Aufteilung. In dieser Situation wollen wir die Anzahl der Vergleiche ganz genau bestimmen und nennen sie Tmax (n), wobei n die Anzahl der zu sortierenden Schl¨ ussel ist. Die Anzahl der Vertauschungen h¨ angt vom Ergebnis der Vergleiche ab und ist damit kleiner oder gleich der Anzahl der Vergleiche. F¨ ur den gerade betrachteten Fall erfolgt nur ein rekursiver Aufruf auf einer um ein Element verkleinerten Schl¨ usselliste, bei dem etwas getan werden muss. Außerdem muss die Prozedur Partition einmal ausgef¨ uhrt werden, was
220
4 Ausgew¨ ahlte Kapitel der Analysis
n − 1 viele Vergleiche (bei nur einer Vertauschung) mit dem Pivot-Element nach sich zieht: (4.3) Tmax (n) = Tmax (n − 1) + (n − 1). Leider sind wir nun nur ein bisschen schlauer als vorher. Denn wir wissen ja nicht, welchen Wert wir f¨ ur Tmax (n − 1) in die obige Formel einsetzen sollen. Aber wir k¨ onnen die Gleichung rekursiv verwenden. Mit (4.3) gilt f¨ ur n > 2 z. B. auch Tmax (n − 1) = Tmax (n − 2) + (n − 2): Tmax (n) = Tmax (n − 1) + n − 1 = Tmax (n − 2) + n − 2 + n − 1 = Tmax (n − 3) + n − 3 + n − 2 + n − 1 .. . = Tmax (1) + 1 + 2 + 3 + . . . + (n − 1) = 0 + 1 + 2 + 3 + ... + n − 1 =
n−1 k=1
(1.8)
k =
n(n − 1) ∈ Θ(n2 ). 2
In der letzten Zeile haben wir Tmax (1) = 0 benutzt. Denn besteht die Schl¨ usselliste nur aus einem einzigen Element, dann ist kein Vergleich mehr erforderlich. Betrachten wir nun den Fall, dass die Liste bei jeder Aufteilung in zwei etwa gleich große Teile aufgeteilt wird. Wir sind bei der Best-Case-Analyse angekommen. Der Best-Case liegt vor, da die Rekursionstiefe so niedrig wie m¨ oglich wird. Genauer gilt: ) * + , n−1 n−1 + Tbest + c · n. (4.4) Tbest (n) ≤ Tbest 2 2 Die zu sortierende Liste wird um das Pivot-Element k¨ urzer. Entsteht so eine Liste ungerader L¨ ange, dann ist nach der Aufteilung in Teillisten die eine Teilliste um ein Element l¨ anger als die andere Teilliste. Wir benutzen dabei die obere Gauß-Klammer x, die f¨ ur die kleinste ganze Zahl k steht, f¨ ur die x ≤ k ist. Die Zahl x wird also zur n¨ achst gr¨ oßeren oder gleichen ganzen Zahl k. Entsprechend wird die untere Gauß-Klammer x verwendet, um zur n¨ achst kleineren oder gleichen ganzen Zahl zu gelangen. Beispielsweise ist 3,001 = 3 und 3,001 = 4
sowie
7,999 = 7 und 7,999 = 8.
Wie Sie durch Einsetzen von geraden und ungeraden Zahlen sehen, gilt f¨ ur jede nat¨ urliche Zahl k: + , ) * k k k+1 ≤ ≤ . (4.5) 2 2 2
4.3 Laufzeit rekursiver Algorithmen: Master-Theorem
221
Die Gauß-Klammern d¨ urfen nicht mit dem aus der Schule bekannten Runden ¨ verwechselt werden. Uberlegen Sie sich, dass das Runden durch x + 0,5 dargestellt werden kann. Das Rechnen mit Rekursionsformeln wie (4.4), in denen Gauß-Klammern auftreten, ist etwas unhandlich, daher vereinfachen wir zun¨ achst die Absch¨ atzung l f¨ ur den Fall, dass n eine Zweierpotenz n = 2 ist, zu Tbest (n) ≤ 2 · Tbest (n/2) + c · n.
(4.6)
F¨ ur diese Absch¨ atzung wird Quicksort zweimal rekursiv aufgerufen, jeweils f¨ ur die halb so große Liste. Um die Formel einfach zu halten, ignorieren wir, dass die rekursiv zu sortierenden Listen das Pivot-Element nicht enthalten. Der Aufwand zum Partitionieren wird durch c · n abgesch¨ atzt. Wenn wir wie zuvor nur die Vergleiche z¨ ahlen, k¨ onnen wir c = 1 w¨ ahlen, z¨ ahlen wir zus¨ atzlich auch Vertauschungen, setzen wir c = 2. Wenden wir die Formel (4.6) rekursiv an, so erhalten wir
' & Tbest (n) ≤ 2 · Tbest (n/2) + cn ≤ 2 · 2 · Tbest (n/4) + cn/2 + cn = 4 · Tbest (n/4) + cn + cn = 4 · Tbest (n/4) + 2 · cn ' & ≤ 4 · 2 · Tbest (n/8) + cn/4 + 2 · cn = 8 · Tbest (n/8) + cn + 2 · cn = 8 · Tbest (n/8) + 3 · cn. Bereits nach zweimaligem Einsetzen k¨ onnen wir eine Gesetzm¨ aßigkeit ablesen. Wir stellen fest, dass sich pro Einsetzen die Anzahl der Schl¨ ussel halbiert und sich die Anzahl der rekursiven Aufrufe verdoppelt. Nach l Schritten erhalten wir also die Formel: n=2l , log2 (n)=l n! = n · T (1) + log2 (n) · cn. Tbest (n) ≤ 2l · Tbest l + l · cn 2 Da Tbest (1) = 0 ist, ergibt sich die Best-Case-Laufzeit von Quicksort nun zu (Tbest (n))∞ n=1 ∈ O(n · log2 (n)). Wenn Sie mit Logarithmen noch nicht vertraut sind, dann sollten Sie sich Kapitel 3.6.2.2 ab Seite 178 ansehen, bevor Sie hier weiterlesen. Nun wollen wir ohne Einschr¨ ankungen an n korrekt mit Gaußklammern rechnen. Der zuvor gew¨ ahlte einfachere Ansatz f¨ ur n = 2l eignet sich hervorragend, um zun¨ achst einen Kandidaten f¨ ur die allgemeine Laufzeitabsch¨ atzung zu erhalten. Wir vermuten, dass f¨ ur alle n ∈ N Tbest (n) ≤ d · n · log2 (n)
(4.7)
mit einer von n unabh¨ angigen Konstante d > 0 gilt. Diese Absch¨ atzung k¨ onnen wir unter Verwendung der gegebenen korrekten Rekursionsgleichung (4.4) mittels vollst¨ andiger Induktion beweisen. W¨ ahrend des Beweises werden wir sehen,
222
4 Ausgew¨ ahlte Kapitel der Analysis
dass wir d = c w¨ ahlen k¨ onnen, wobei c die Konstante aus (4.4) ist. Dieses Verfahren nennt man in der Informatik die Substitutionsmethode. Der Induktionsanfang ist f¨ ur n = 1 erf¨ ullt, da beide Seiten von (4.7) gleich null sind. Nun nehmen wir an, dass (4.7) f¨ ur 1 ≤ n ≤ m gilt (Induktionsvoraussetzung (I. V.)) und zeigen im Induktionsschritt, dass die Absch¨ atzung auch f¨ ur 1 ≤ n ≤ m + 1 gilt, zu zeigen ist sie also nur f¨ ur n = m + 1. Mit (4.4) und der Induktionsannahme erhalten wir unter Verwendung der Rechenregeln f¨ ur loga , a = 2, auf Seite 181: (4.4)
Tbest (m + 1) ≤ Tbest (I. V.)
≤
(4.5)
≤
= =
- m .!
/ m 0!
+ c · (m + 1) / m 0! d · log2 +d · log2 + c · (m + 1) 2 2 2 2 m+1 m+1 m+1 m+1 d· +d· + c · (m + 1) log2 log2 2 2 2 2 m+1 + c · (m + 1) d · (m + 1) log2 2 d · (m + 1)[log2 (m + 1) − log2 (2)] + c · (m + 1)
-m.
2 - m .!
+ Tbest
/m0
2
=1
=
d · (m + 1) log2 (m + 1) + (m + 1) [c − d]
≤
d · (m + 1) log2 (m + 1),
sofern die Konstante d ≥ c ist. Damit ist unsere Ungenauigkeit behoben, die Laufzeitabsch¨ atzung (4.7) gilt f¨ ur d = c. Die durchschnittliche Laufzeit des Quicksort (Avarage-Case) liegt ebenfalls in ur die zu erwartende Laufzeit des bereits in Kapitel O(n·log2 (n)). Das gilt auch f¨ 3.3.2 erw¨ ahnten randomisierten Quicksort, bei dem das Pivot-Element jeweils zuf¨ allig ausgew¨ ahlt wird, wobei jeder in Frage kommende Schl¨ ussel mit gleicher Wahrscheinlichkeit gew¨ ahlt wird. Das werden wir mit etwas mehr Wissen u ¨ ber Summen und Reihen in Abschnitt 4.5 mittels Wahrscheinlichkeitsrechnung zeigen. Quicksort zeigt die gleiche Ordnung wie Heapsort im mittleren und besten Fall. Im schlechtesten Fall ist der Heapsort f¨ ur große Werte n aber besser. ¨ Wir wollen nun die Uberlegungen, die wir f¨ ur die Laufzeitabsch¨ atzung des Quicksort-Algorithmus angestellt haben, in einem allgemeinen Satz zusammenfassen. Dieses Master-Theorem kann auf beliebige rekursive Divide-andConquer-Algorithmen angewendet werden, die ein Problem in a gleichartige Teilprobleme zerlegen (a ist dann ganzzahlig, wir beweisen die Absch¨ atzung osende Teilproblem um den aber direkt f¨ ur a ∈ R mit a > 1), wobei das zu l¨ Faktor 1/b kleiner wird.
4.3 Laufzeit rekursiver Algorithmen: Master-Theorem
223
Satz 4.7 (Master-Theorem) F¨ ur die monoton wachsende Funktion T : N → R (die z. B. die Laufzeit T (n) eines Algorithmus in Abh¨ angigkeit von der Eingabegr¨ oße n ∈ N beschreibt) m¨ oge f¨ ur feste Konstanten a ∈ R mit a ≥ 1, b ∈ N mit b > 1, C ∈ R mit C > 0 und k ∈ N0 gelten: ur alle n ∈ N. 0 ≤ T (n) ≤ a · T (n/b) + C · nk f¨
(4.8)
Dabei sind die Konstanten von n unabh¨ angig. Unter dieser Voraussetzung k¨ onnen wir T (n) in Abh¨ angigkeit von den Parametern absch¨ atzen: k F¨ ur a < bk ist (T (n))∞ n=1 ∈ O(n ), k f¨ ur a = bk gilt (T (n))∞ n=1 ∈ O(n · logb (n)), und k ∞ log b (a) f¨ ur a > b ist (T (n))n=1 ∈ O(n ).
Hat man nicht nur eine Aufwandsabsch¨ atzung (4.8) nach oben, sondern gilt mit der zus¨ atzlichen Konstante c > 0 f¨ ur alle n ∈ N mit n ≥ b ! ! a · T (n/b) + c · nk ≤ T (n) ≤ a · T (n/b) + C · nk , dann gelten die Aussagen auch f¨ ur O ersetzt durch Θ, wobei der Beweis v¨ ollig analog verl¨ auft. Bisweilen findet man in Algorithmen-B¨ uchern zus¨ atzlich die Voraussetzung T (1) = O(1). Damit ist nur gemeint, dass T (1) eine Konstante ist. Da in unserer Formulierung T (1) ein Funktionswert ist, ist dies offensichtlich. Jetzt k¨ onnen wir das Argument, das wir bereits f¨ ur die Best-Case-Laufzeit des Quicksort verwendet haben, hier allgemein durchf¨ uhren. Das ist leider mit etwas Rechnerei verbunden. Der folgende Beweis wirkt vielleicht kompliziert, die Rechnungen sind aber geradlinig, und es werden keine Beweistricks verwendet. Beweis des Master-Theorems: Um die Notation etwas einfacher zu gestalten, lassen wir im Beweis die Gauß-Klammern in (4.8) weg und erlauben Br¨ uche als Argumente von T . Es ist gar nicht schwer, die Gauß-Klammern in die Rechnung ¨ einzuf¨ ugen, das betrachten wir anschließend in einer Ubungsaufgabe. Wir w¨ ahlen l ∈ N mit bl−1 ≤ n < bl . Damit ist l − 1 ≤ logb (n) < l ⇐⇒ logb (n) < l ≤ logb (n) + 1. Jetzt setzen wir die Absch¨ atzung l-mal in sich selbst ein: $ n ! ! % n n k k b T (n) ≤ a · T +C ·n ≤ a· a·T +C + C · nk b b b n! n !k = a2 · T +C ·a· + C · nk 2 b b
224
4 Ausgew¨ ahlte Kapitel der Analysis
n! n !k n !k + C · a2 · 2 +C ·a· + C · nk 3 b b b l−1 l−1 ! ! ! n k n k n m l m ≤ . . . ≤ al · T + C a ≤ a · T (1) + C a , bl bm bm
= a3 · T
m=0
m=0
da 0 < n/bl < 1 ist. Damit erhalten wir T (n) ≤ T (1) · al + nk C
a !m . bk
l−1 m=0
(4.9)
alle: Wir diskutieren mit logb (n) < l ≤ logb (n) + 1 die im Satz angegebenen F¨ Fall a = bk : T (n)
l≤logb (n)+1, bk =a
≤
(logb (n)+1)−1
T (1) · alogb (n)+1 + nk C
m=0
! a m a =1
a=bk
k[logb (n)+1]
T (1) · b
=
(b
[logb (n)+1] k
=
)
k k
=n b
k
+ n C[logb (n) + 1]
T (1) · nk bk + nk C[logb (n) + 1] [T (1) · bk + C]nk + Cnk logb (n).
=
F¨ ur n ≥ b ist logb (n) ≥ 1 und daher T (n) ≤ [T (1) · bk + C]nk logb (n) + Cnk logb (n) = [T (1) · bk + 2C] nk logb (n), konstant
also T (n) ∈ O(nk · logb (n)). Fall a < bk : Hier ist 0 < bak < 1. Wir benutzen die Formel f¨ ur die geometrische Summe (1.9) auf Seite 34 und erhalten l
l−1
k
T (n) ≤ T (1) · a + n C
m=0 a bk k¨ onnen wir ¨ ahnlich zum Fall a < bk rechnen. Daran k¨ onnen Sie sich in der anschließenden Aufgabe versuchen. Aufgabe 4.7 F¨ ugen Sie obere Gauß-Klammern gem¨ aß der Voraussetzung des MasterTheorems in die Berechnung der Absch¨ atzung (4.9) ein. Dazu k¨ onnen Sie verwenden, dass f¨ ur zwei Zahlen x ∈ R mit x > 0 und b ∈ N gilt: ) * - . x x = . b b Zeigen Sie analog zum Fall a < bk die Aussage des Master-Theorems f¨ ur den k ur die geometrische Summe. Dabei k¨ onnen Sie Fall a > b mit der Formel f¨ verwenden, dass !logb (n) !logb (a) = blogb (a)·logb (n) = blogb (n) = nlogb (a) . alogb (n) = blogb (a) Wir wenden das Master-Theorem auf die Best-Case-Absch¨ atzung (4.4) ) * + , n−1 n−1 + Tbest +C ·n Tbest (n) = Tbest 2 2 des Quicksort-Algorithmus an. Der Aufwand Tbest (n) ist monoton steigend, da mit einem gr¨ oßeren n mehr Schl¨ ussel verglichen werden m¨ ussen. Daher gilt ) * - n .! n−1 + C · n ≤ 2Tbest + C · n1 . Tbest (n) ≤ 2Tbest 2 2 F¨ ur a = b = 2 und k = 1 (also a = bk ) liefert das Master-Theorem: (Tbest (n))∞ n=1 ∈ O(n log2 (n)). Aufgabe 4.8 Algorithmus 4.5 zeigt eine bin¨ are Suche nach einem Wert s in einem sortierten Array a[ ]. Leiten Sie eine Rekursionsgleichung f¨ ur die Anzahl der Vergleiche im Worst-Case her (dabei sei n die Anzahl der Elemente des Arrays) und wenden Sie darauf das Master-Theorem an.
4.4
Konvergenz von Folgen und Reihen
Wir haben auf Seite 216 bereits limm→∞ 2 − m+2 2 hingeschrieben um aus2m = ∞ f¨ ur wachsendes m der zudr¨ ucken, dass sich die Glieder der Folge 2 − m+2 ( ( 2m m=1 m+2 ( ( Zahl 2 ann¨ ahern. Der Abstand 2 − 2m − 2 muss also beliebig klein werden. Er muss kleiner als jede vorgegebene kleine Zahl ε > 0 werden. Pr¨ aziser definiert man:
226
4 Ausgew¨ ahlte Kapitel der Analysis
Algorithmus 4.5 Bin¨ are Suche function Suche(l, r, s) if l > r then return nicht gefunden“ ” m := (r + l)/2 if a[m] = s then return gefunden“ ” if a[m] > s then return Suche(l, m − 1, s) return Suche(m + 1, r, s)
Definition 4.8 (Konvergenz, Grenzwert) Eine Folge (an )∞ n=1 heißt konvergent genau dann, wenn eine Zahl a existiert, so dass die folgende Bedingung erf¨ ullt ist: Zu jedem (noch so kleinen) ε > 0 existiert ein n0 ∈ N, so dass ab diesem n0 alle Folgenglieder in einem Streifen mit Radius ε um a liegen, d. h., wenn gilt: ur alle n > n0 , |an − a| < ε f¨ angig von ε sein! F¨ ur verschiesiehe Abbildung 4.10. Der Index n0 darf abh¨ dene ε erhalten wir (m¨ oglicherweise) verschiedene Werte n0 . Wir schreiben angt. daher auch n0 (ε) um anzudeuten, dass n0 von ε abh¨ Die Zahl a heißt dann Grenzwert oder Limes der Folge (an )∞ n=1 , ur Limes n gegen unSchreibweise: limn→∞ an = a (hier steht limn→∞ f¨ ” ur n → ∞ ( n endlich“) oder auch an → a ( an strebt/geht gegen a“) f¨ ” ” gegen unendlich“). Eine Folge (an )∞ n=1 heißt divergent genau dann, wenn sie nicht konvergent ist. gegen ein S ∈ R genau dann, wenn Die Reihe ∞ k=1 ak heißt konvergent n ∞ a konvergiert: die Folge der Partialsummen k k=1 n=1 lim
n
n→∞
ak = S.
k=1
S heißt die Summe (oder der Grenzwert) der Reihe. In diesem Fall wird ∞ nicht nur die Reihe, sondern auch ihr Grenzwert S mit k=1 ak bezeichnet (wobei sich die Bedeutung aus dem Zusammenhang ergibt). Mit der uckt, dass die Reihe konvergiert. Schreibweise ∞ k=1 ak < ∞ wird ausgedr¨ Divergiert die Folge der Partialsummen, so heißt die Reihe divergent. Also: limn→∞ an = a gilt genau dann, wenn in jedem noch so schmalen Streifen ]a − ε, a + ε[, ε > 0, alle bis auf endlich viele Folgenglieder liegen. Wir haben also die Vorstellung, dass ε beliebig klein wird.
4.4 Konvergenz von Folgen und Reihen
227
an
a
ε
n 1
2
3
4
5
n0
6
7
8
9
10
Abb. 4.10 ε-n0 -Bedingung der Folgenkonvergenz
Beispiel 4.9 (Folgenkonvergenz) Bei einer konstanten Folge mit Gliedern an := a ist der Grenzwert a. Denn angig von ε) w¨ ahlen, so dass zu jedem ε > 0 k¨ onnen wir n0 := 1 (sogar unabh¨ f¨ ur alle n > n0 gilt: |an − a| = |a − a| = 0 < ε. Wir zeigen limn→∞ n1 = 0, indem wir zu einem beliebig gew¨ ahlten ε > 0 eine ahlen. Ist n > n0 , dann gilt: Stelle n0 mit n0 > 1ε w¨ ( ( n0 > 1 (1 ( n>n ( − 0( = 1 < 0 1 < ε 1 = ε. 1 (n ( n n0 ε Entsprechend l¨ asst sich durch Wahl von n0 >
1 √ k
ε
zeigen, dass f¨ ur k ∈ N gilt:
limn→∞ n1k
= 0. Wir zeigen mit der Definition, dass limn→∞ 2 − 21n = 2 ist. Dazu sei ε > 0 beliebig vorgegeben. Wir m¨ ussen zu diesem ε eine Stelle n0 ∈ N finden, so dass f¨ ur alle n > n0 gilt: ( ( ( ( (2 − 1 − 2( < ε. (4.10) ( ( 2n
onnen: Wir formen diese Ungleichung nach n um, so dass wir n0 ablesen k¨ ( ( ( ( (2 − 1 − 2( < ε ⇐⇒ 1 < ε ⇐⇒ 2n > 1 ⇐⇒ n > log2 1 ( ( n 2 2n ε ε ⇐⇒ n > − log2 (ε) . oßer als − log2 (ε) w¨ ahlen, dann gilt f¨ ur alle Wenn wir also ein n0 ∈ N gr¨ n > n0 die Ungleichung (4.10), und die Konvergenz gegen den Grenzwert 2 ist bewiesen. Auf ¨ ahnliche Weise l¨ asst sich auch zeigen, dass limm→∞ 2 −
m+2 2m
= 2 ist:
Aufgabe 4.9 ur Zeigen Sie zun¨ achst mittels vollst¨ andiger Induktion, dass m + 2 ≤ 2m/2 f¨ m ≥ 6 gilt. Schließen Sie dann mittels der Definition des Grenzwertes, dass limm→∞ 2 − m+2 2m = 2 ist.
228
4 Ausgew¨ ahlte Kapitel der Analysis
Aufgabe 4.10 Gegeben sei die rekursiv definierte Folge (an )∞ n=1 mit a1 = q und an = q · an−1 f¨ ur n ≥ 2. Dabei ist q eine reelle Zahl. Schreiben Sie die Folgenglieder explizit, also ohne Rekursion. F¨ ur welche Werte von q konvergiert die Folge? k Der Prototyp einer konvergenten Reihe ist die geometrische Reihe ∞ k=0 q f¨ ur q ∈ R mit |q| < 1. Mit der bereits mehrfach benutzten Formel (1.9) auf Seite 34 f¨ ur die geometrische Summe ist ∞
q k = lim
n
n→∞
k=0
k=0
1 − q n+1 . n→∞ 1−q
q k = lim
n+1
1 = 1−q ist. Wir zeigen jetzt mit der Grenzwertdefinition, dass limn→∞ 1−q 1−q ur Sei dazu ε > 0 beliebig vorgegeben. Wir m¨ ussen ein n0 ∈ N finden, so dass f¨ alle n > n0 gilt: ( ( ( 1 − q n+1 |q|n+1 1 (( ( < ε ⇐⇒ − < ε. ( 1−q 1 − q( 1−q
Falls q = 0 ist, gilt bereits soll, dann muss
|q|n+1 (1−q)
= 0 < ε. Sei also q = 0. Wenn
|q|n+1 1−q
< ε gelten
(3.32)
|q|n+1 < ε(1 − q) ⇐⇒ exp((n + 1) ln |q|) < ε(1 − q) ⇐⇒ ln(exp((n + 1) ln |q|)) < ln(ε(1 − q)) (siehe (3.30), Seite 179) ⇐⇒ (n + 1) ln |q| < ln(ε(1 − q)) ln(ε(1 − q)) ln(ε(1 − q)) ⇐⇒ n > −1 ⇐⇒ n + 1 > ln |q| ln |q| sein. Beachten Sie, dass wegen |q| < 1 gilt: ln |q| < 0. Daher wird bei der Division durch ln |q| das Kleiner- zu einem Gr¨ oßerzeichen. W¨ ahlen wir also ein oßer als ε(1−q) − 1 ist, so ist f¨ u r alle n > n n0 ∈ N, das gr¨ 0 der Abstand der ln |q| Folgenglieder zum Grenzwert kleiner als ε. Damit haben wir mit der Definition 1 tats¨ achlich der Grenzwert ist. der Konvergenz bewiesen, dass hier 1−q Beim Umgang mit dem Unendlichen versagt die Anschauung, da das Unendliche im t¨ aglichen Leben nicht vorkommt. Deshalb wurden bis ins 19-te Jahrhundert bei Grenzwertberechnungen auch von f¨ uhrenden Mathematikern Fehler gemacht. Die hier wiedergegebene Definition stellt einen Meilenstein in der Mathematik dar, da mit vergleichsweise einfachen Mitteln das Unendliche beschrieben wird. Wie schwierig das Unendliche in der Anschauung ist, zeigt auch Kapitel 3.7.
4.4 Konvergenz von Folgen und Reihen
229
Aufgabe 4.11 Ein Beispiel f¨ ur Probleme mit dem Unendlichen ist die ber¨ uhmte Geschichte uber den Wettlauf zwischen dem Helden Achilles und einer Schildkr¨ ote, die der ¨ Fairness halber einen Vorsprung von 100 m bekommt. Wenn Achilles den Startpunkt der Schildkr¨ ote erreicht, hat die Schildkr¨ ote bereits ebenfalls eine Strecke zur¨ uckgelegt. Sobald Achilles diese Strecke hinter sich gebracht hat, ist die Schildkr¨ ote wieder weiter gelaufen, und das setzt sich so fort. Achilles kann die ¨ Schildkr¨ ote also niemals einholen? Was ist an dieser Uberlegung falsch? Nehmen Sie an, dass der L¨ aufer zehnmal schneller als die Schildkr¨ ote ist. Nach welcher Strecke hat der L¨ aufer die Schildkr¨ ote eingeholt? Eine konvergente Folge (an )∞ n=1 mit dem Grenzwert a = 0 heißt Nullfolge. Zieht man von allen Gliedern einer konvergenten Folge ihren Grenzwert ab, so erh¨ alt man eine Nullfolge. Damit w¨ urde es prinzipiell ausreichen, nur die Eigenschaften von Nullfolgen zu untersuchen. Ein Konvergenznachweis mittels der Definition ist in der Regel schwierig. Wesentlich einfacher rechnet es sich mit den folgenden Regeln. Satz 4.10 (Konvergenzs¨ atze) ∞ und (b ) Seien (an )∞ n n=1 n=1 Folgen sowie c ∈ R. a) Jede Folge besitzt h¨ ochstens einen Grenzwert. b) Jede konvergente Folge ist notwendigerweise beschr¨ ankt. c) Falls limn→∞ an = a und limn→∞ bn = b ist, dann gilt: i) limn→∞ (an + bn ) = a + b, ii) limn→∞ (c · an ) = c · a, iii)limn→∞ (an · bn ) = a · b. ur gen¨ ugend große n und iv)Falls zus¨ atzlich b = 0 gilt, so ist bn = 0 f¨ lim
n→∞
an a = . bn b
d) Ist (an )∞ ur alle n ∈ N, so ist auch n=1 konvergent gegen a und an ≥ c f¨ a ≥ c. (Entsprechend ist f¨ ur an ≤ c auch a ≤ c.) Falls Sie jetzt sagen, dass die Aussage d) klar ist, dann sollten Sie sich einmal u ¨ berlegen, ob die Aussage auch noch gilt, wenn wir u ¨ berall ≥“ durch >“ oder ” ” ≤“ durch 0, aber limn→∞ n1 = 0. ” ” Beweis Die einzelnen Teilaussagen lassen sich alle mit der Definition des Grenzwertes beweisen. Wir zeigen a), b) und c) i). Damit sollte das Prinzip verst¨ andlich sein. Den Rest finden Sie in der auf diesen Beweis folgenden Aufgabe. a) Wir nehmen das Gegenteil an. Damit gibt es eine Folge (an )∞ n=1 mit mindestens zwei Grenzwerten a und b. Diese haben den halben Abstand ε := |a−b| 2 .
230
4 Ausgew¨ ahlte Kapitel der Analysis
Nach Definition des Grenzwertes gibt es Stellen n0 , n1 ∈ N, so dass |an −a| < ur alle n > n1 gilt. F¨ ur n > max{n0 , n1 } ε f¨ ur alle n > n0 und |an − b| < ε f¨ m¨ ussen die Folgenglieder an daher in beiden ε-Steifen liegen. Nach Definition von ε u ¨ berlappen diese sich aber nicht – Widerspruch. Mit der Dreiecksungleichung k¨ onnen wir diesen Widerspruch auch so formulieren: |a − b| = |a − an + an − b| ≤ |a − an | + |an − b| < 2ε = |a − b|. b) Zu ε = 1 existiert wegen der Konvergenz gegen einen Grenzwert a eine Stelle ur n > n0 gilt: |an − a| < 1. Der Abstand von |an | zu |a| ist n0 , so dass f¨ damit ebenfalls kleiner 1, so dass |an | < 1 + |a| folgt. Ab der Stelle n0 ist die Folge daher beschr¨ ankt. Jetzt gibt es aber auch unter den ersten n0 Gliedern der Folge ein betragsm¨ aßig gr¨ oßtes, dieses sei ai . Damit ist die gesamte Folge beschr¨ ankt mit einer Schranke, die gr¨ oßer als |ai | und als die Zahl 1 + |a| ist. c) i) Wir wissen, dass wegen der Konvergenz der Folgen zu jedem ε > 0 f¨ ur ur n > n1 und ε/2 Stellen n1 , n2 ∈ N existieren, so dass |an − a| < 2ε f¨ ur n > n2 ist. Es wirkt an dieser Stelle verwunderlich, warum |bn − b| < 2ε f¨ wir ε/2 verwenden. Das tun wir aus einem ¨ asthetischen Grund, damit wir am Ende eine Absch¨ atzung gegen ε ohne weitere Faktoren bekommen. Mit der Dreiecksungleichung erhalten wir aus den beiden Absch¨ atzungen f¨ ur n0 := max{n1 , n2 } und n > n0 : |(an + bn ) − (a + b)| ≤ |an − a| + |bn − b| < 2
ε = ε. 2
Da ε > 0 beliebig vorgegeben war, ist die Konvergenz der Summenfolge gegen den Grenzwert a + b gezeigt.
Aufgabe 4.12 Beweisen Sie die Teile c) ii), iii), iv) und d) von Satz 4.10. Zu c) ii) k¨ onnen ε betrachten. F¨ ur c) iii) f¨ uhrt die Wahl eines Sie einen Streifen mit Radius |c| ε zusammen mit |an bn − ab| = |an bn − an b + an b − ab| Streifens mit Radius M +|b| zum Ziel, wobei M > 0 eine Schranke der Folge (an )∞ n=1 ist. Aus c) iii) folgt c) iv), indem limn→∞ b1n = 1b bewiesen wird. Dies gelingt mit einem |b|2 ε/2Streifen. Schließlich l¨ asst sich d) indirekt zeigen. Beispiel 4.11 Die Regeln des Satzes k¨ onnen genutzt werden, um Grenzwerte auszurechnen. 2
−2 Wir m¨ ochten mit der Regel c) iv) den Grenzwert limn→∞ n22n +2n+2 bestimmen. Dabei k¨ onnen z. B. Z¨ ahler und Nenner Laufzeiten von Programmen beschreiben. Der Grenzwert sagt dann aus, in welchem Verh¨ altnis die Laufzeiten f¨ ur extrem“ große Werte von n zueinander stehen. Das ist dann interessant, wenn ” man untersuchen will, welcher der Algorithmen der bessere ist.
4.4 Konvergenz von Folgen und Reihen
231
Man beachte, dass die Grenzwertregeln die Konvergenz der einzelnen Folgen voraussetzen. Dabei haben wir hier das Problem, dass die Grenzwerte des Z¨ ahlers und des Nenners einzeln nicht existieren. Wie es typisch f¨ ur Laufzeiten ist, werden deren Werte mit n immer gr¨ oßer, ohne sich einer Zahl anzun¨ ahern. Daher darf die Regel c) iv) keinesfalls in der folgenden Form angewendet wer2 limn→∞ (2n2 −2) −2 oglich, ∞ den: limn→∞ n22n +2n+2 = limn→∞ (n2 +2n+2) . Es ist nicht m¨ ∞ sinnvoll zu definieren. Das Verhalten von Z¨ ahler und Nenner ¨ andert sich aber, wenn ahler als auch Nenner man den Bruch mit n12 erweitert. Nun bilden sowohl Z¨ konvergente Folgen, und c) iv) ist anwendbar: limn→∞ 2 − n22 2 − n22 c) iv) 2n2 − 2 = lim = lim n→∞ n2 + 2n + 2 n→∞ 1 + 2 + 22 limn→∞ 1 + n2 + n22 n n c) i), ii)
=
2 − 2 · limn→∞ n12 1 + 2 · limn→∞ n1 + 2 · limn→∞
1 n2
=
2−0 = 2. 1+0+0
F¨ ur sehr große Werte von n ben¨ otigt das Programm, dessen Laufzeit wir in den Z¨ ahler geschrieben haben, doppelt so lange wie das Programm zum Nenner. Relevant f¨ ur diese Absch¨ atzung sind also lediglich der Summand des Z¨ ahlers und der Summand des Nenners zur jeweils h¨ ochsten Potenz von n. Tats¨ achlich sind 2n2 − 2 ∈ Θ(n2 ) und n2 + 2n + 2 ∈ Θ(n2 ). Bei den Landau-Symbolen sind ebenfalls nur die h¨ ochsten Potenzen von Bedeutung. Die Landau-Symbole ber¨ ucksichtigen aber keine Faktoren. Mit ihnen kann man das soeben ermittelte Verh¨ altnis nicht ausdr¨ ucken. Allerdings sind konstante Faktoren in der Realit¨ at auch oft unn¨ otig, da durch Einschalten von Compiler-Optionen die Laufzeit eines Programm oft um den Faktor 10 verbessert werden kann, oder ein neuerer Rechner oft eine doppelt so hohe Geschwindigkeit hat.
Lemma 4.12 (O-Notation und Grenzwert) ∞ ur alle n ∈ N gilt: F¨ ur zwei Folgen (an )∞ n=1 und (bn )n=1 mit bn = 0 f¨
( ( ( an ( lim (( (( existiert n→∞ bn
=⇒
(an )∞ n=1 ∈ O(bn ).
( (!∞ ( ( ( ( ( ( Beweis Wenn der Grenzwert limn→∞ ( abnn ( existiert, dann ist ( abnn ( Satz 4.10 b) mit einer Schranke C > 0 beschr¨ ankt, also |an | ≤ ∞ n ∈ N. Das bedeutet aber (an )n=1 ∈ O(bn ).
nach
n=1 C|bn | f¨ ur
alle
Zur Vereinfachung( wird h¨ aufig die O-Notation u ¨ ber die Existenz des ( ( ( Grenzwerts limn→∞ ( abnn ( definiert. Aber diese vereinfachte Variante ist nicht aquivalent zur u ¨ ¨ blichen Definition 4.5 auf Seite 209. Denn wenn wir (an )∞ n=1 = = (1, 1, 1, . . . ) betrachten, dann existiert der (1, 0, 1, 0, 1, . . . ) und (bn )∞ n=1
232
4 Ausgew¨ ahlte Kapitel der Analysis
Grenzwert nicht, jedoch ist (an )∞ n=1 ∈ O(bn ). Solche seltsamen Folgen treten in der Regel aber nicht als Laufzeiten ( ( von Programmen auf. ( ( F¨ ur den Fall, dass limn→∞ ( abnn ( nicht nur existiert, sondern zus¨ atzlich null ist, benutzt man eine weitere Schreibweise: Definition 4.13 (Klein-oh-Notation) ∞ Man schreibt (an )∞ n=1 ∈ o(bn ) genau dann, wenn es eine Nullfolge (cn )n=1 und eine Stelle n0 ∈ N gibt, so dass ur alle n > n0 |an | ≤ |cn · bn | f¨ gilt, also f¨ ur alle bis auf endlich viele Indizes. Entsprechend bedeutet ∈ o(b (an )∞ n ), dass es keine solche Nullfolge gibt. n=1 aufig an = o(bn ) und statt (an )∞ Statt (an )∞ n=1 ∈ o(bn ) liest man h¨ n=1 ∈ o(bn ) ist an = o(bn ) u ¨ blich. Wir haben in der Definition nicht limn→∞ abnn = 0 gefordert, damit null als Wert f¨ ur Glieder bn erlaubt ist. Ist aber bn = 0 onnen wir durch |bn | teilen, und (an )∞ ∈ o(bn ) ist f¨ ur alle n ∈ N, dann k¨ 1 n=1 an 1 aquivalent zu limn→∞ bn = 0. Beispielsweise gilt n2 ∈ o n , da als Nullfol¨ ∞ ahlt werden kann. Andererseits ist n21+n n=1 ∈ o n12 , da ge cn = n1 gew¨ limn→∞
1 n2 +n 1 n2
= limn→∞
n2 n2 +n
= 1 = 0 ist.
Die o-Notation wird im Rahmen von Fehlerabsch¨ atzungen benutzt. Die Fol∞ oge einen Fehler nach n Rechenschritten wiedergeben. Die Folge (an )n=1 m¨ sei eine Nullfolge, mit der wir den Fehler nach oben absch¨ atzen: ge (bn )∞ n=1 ∈ O(b ). Jetzt stellt sich die Frage, ob die Absch¨ a tzung bestm¨ oglich (an )∞ n n=1 ist, oder ob der Fehler vielleicht schneller gegen null konvergiert als die Folurde bedeuten, dass es eine Nullfolge (cn )∞ ge (bn )∞ abe mit n=1 . Schneller w¨ n=1 g¨ ∞ oglich w¨ are die Absch¨ atzung also, |an | ≤ |cn · bn |, also (an )n=1 ∈ o(bn ). Bestm¨ ∞ wenn (an )∞ n=1 ∈ O(bn ) und gleichzeitig (an )n=1 ∈ o(bn ) gilt. H¨ aufig finden Sie in der Literatur eine Klein-oh-Definition, die auf den ersten Blick v¨ ollig anders aussieht als Definition 4.13. Das liegt daran, dass dann die Definition der Nullfolge aufgel¨ ost ist: Lemma 4.14 (Umformulierung der Klein-oh-Notation) ¨ Aquivalent sind a) (an )∞ n=1 ∈ o(bn ) ur alle n > n0 . b) F¨ ur jedes C > 0 gibt es ein n0 ∈ N, so dass |an | ≤ C · |bn | f¨
Beweis Wir zeigen, dass aus a) die Aussage b) folgt. Wir haben also eine Nullur alle n > n0 . Sei nun C > 0 vorgegeben. folge (cn )∞ n=1 mit |an | ≤ |cn · bn | f¨
4.4 Konvergenz von Folgen und Reihen
233
Tab. 4.2 Konstruktion einer Nullfolge f¨ ur Lemma 4.14 a), indem wir f¨ ur das beliebig 1 w¨ ahlen w¨ ahlbare C > 0 die konkreten Werte C = m
m
C=
1 2 3 4
1 1 2 1 3 1 4
1 m
n0 (m)
|an | ≤
3 6 8 12
4, 5, 6, (7, 8, . . . ) 7, 8, (9, 10, . . . ) 9, 10, 11, 12, (13, 14, . . . ) 13, 14, (15, 16, . . . )
1 m |bn |
gilt f¨ ur n =
ur alle n > n1 . Dann gibt es wegen limn→∞ cn = 0 ein n1 ∈ N mit |cn − 0| ≤ C f¨ F¨ ur n > max{n0 , n1 } ist |an | ≤ C · |bn |, und die Aussage b) ist gezeigt. Umgekehrt gelte b). Wir m¨ ussen die in der Definition geforderte Nullfolge ∞ ur jedes C > 0. Wir (cn )n=1 konstruieren. Die Ungleichung unter b) gilt f¨ 1 ∞ k¨ onnen also f¨ ur C insbesondere jedes einzelne Glied einer Nullfolge m m=1 w¨ ahlen. Statt dieser (einfachen) Nullfolge k¨ onnten wir auch irgend eine andere 1 1 gibt es nach b) eine Stelle n0 (m), so dass |an | ≤ m · |bn | nehmen. Zu (C =) m aren Daten wie in Tabelle 4.4. Beachten Sie, f¨ ur alle n > n0 (m) gilt. Denkbar w¨ 1 und damit von m abh¨ angt. Wir w¨ aren fertig, wenn dass die Stelle n0 von m 1 wir m = n und cn = n w¨ ahlen k¨ onnten. Das gelingt aber nicht, da die Beullt ist (beachte: m steht auf beiden dingung m > n0 (m) in der Regel nicht erf¨ Seiten). Wir m¨ ussen uns also mehr M¨ uhe geben. Die Stellen n0 (m) lassen sich zun¨ achst aufsteigend mit m w¨ ahlen: n0 (1) < n0 (2) < n0 (3) < . . . In Tabelle 4.4 k¨ onnen wir so eine unter a) geforderte Nullfolge ablesen. Die ersten drei Glieder lassen sich beliebig w¨ ahlen, dann benutzen wir die Daten der Tabelle: 1, 1, 1, 1, 1, 1, 12 , 12 , 13 , 13 , 13 , 13 , 41 , 14 , . . . . Formal sind wir so vorgegangen: Jedes n ∈ N liegt in genau einem Intervall ]0, n0 (1)], ]n0 (1), n0 (2)], ]n0 (2), n0 (3)], . . . , 1 ·|bn | und f¨ ur n ∈ ]n0 (m), n0 (m+1)] ist insbesondere n > n0 (m), so dass |an | ≤ m gilt. Damit konstruieren wir die Nullfolge 1, falls n ∈ ]0, n0 (1)] cn := 1 ur ein m ∈ N m , falls n ∈ ]n0 (m), n0 (m + 1)] f¨ und erhalten |an | ≤ |cn · bn | f¨ ur n > n0 (1), und a) ist gezeigt. Aufgabe 4.13 Zeigen oder widerlegen Sie: ∞ ∞ ∞ (an )∞ n=1 ∈ o(bn ) =⇒ (an )n=1 ∈ O(bn ), (an )n=1 ∈ o(bn ) ⇐= (an )n=1 ∈ O(bn ), ∞ ∞ ∞ ∞ (an )n=1 ∈ o(bn ) =⇒ (an )n=1 ∈ Ω(bn ), (an )n=1 ∈ o(bn ) ⇐= (an )n=1 ∈ Ω(bn ).
Aufgabe 4.14 Wir definieren eine Folge (an )∞ uber n=0 ¨ a0 := 0,
a1 := 1,
an := an−1 + an−2 f¨ ur n ≥ 2.
234
4 Ausgew¨ ahlte Kapitel der Analysis
Dies ist die Folge der Fibonacci-Zahlen (0, 1, 1, 2, 3, 5, 8, 13, 21, . . . ). Es l¨ asst a existiert (siehe z. B. (Gosich beweisen, dass der Grenzwert Φ := limn→∞ an+1 n ebbels und Ritter, 2013, S. 516)). Dieser Grenzwert heißt der goldene Schnitt. Die Zahl findet sich in Natur und Kunst oft als Verh¨ altnis von Strecken. Berechnen Sie mit den Grenzwerts¨ atzen den Zahlenwert Φ = lim
n→∞
an+1 an + an−1 = lim , n→∞ an an
wobei Sie benutzen k¨ onnen, dass limn→∞
an+1 an
= limn→∞
an an−1
existiert.
Lemma 4.15 (Linearkombination von Reihen) ∞ ∞ ∞ a und mit Seien k=1 bk zwei konvergente Reihen k=1 ak = A ∞k=1 k ∞ (c b = B sowie c , c ∈ R . Dann konvergiert und 1 2 k k=1 1 ak + c2 bk ) k=1 gegen c1 A + c2 B, d. h. ∞
(c1 ak + c2 bk ) = c1
k=1
∞
ak + c2
k=1
∞
bk .
k=1
Konvergente Reihen d¨ urfen daher gliedweise addiert werden. Dieses Ergebnis folgt direkt aus den Konvergenzregeln f¨ ur Folgen, da eine Reihe die Folge ihrer Partialsummen ist: Beweis Bei endlichen Summen d¨ urfen wir mit dem Kommutativgesetz die Summationsreihenfolge ¨ andern und mit dem Distributivgesetz Faktoren ausklammern:
∞ n n n (c1 ak + c2 bk ) = lim (c1 ak + c2 bk ) = lim c1 ak + c2 bk n→∞
k=1 Satz 4.10 c) i), ii)
=
c1 lim
n→∞
k=1 n
n→∞
ak + c2 lim
n
n→∞
k=1
k=1
bk = c1
k=1
k=1
∞
∞
k=1
ak + c2
bk .
k=1
∞ In diesem Beweis haben wir lediglich die Definition des Symbols k=1 als Grenzwert der Partialsummen aufgel¨ ost sowie die Rechenregeln f¨ ur Folgen auf Partialsummen angewendet. Entsprechend kann man aus jedem Satz f¨ ur Folgen einen entsprechenden Satz f¨ ur Reihen ableiten. Eine divergente Folge strebt“ nicht automatisch gegen ±∞. Das sehen wir ” an der Folge mit den abwechselnden Gliedern +1 und −1. Daher ist es sinnvoll, auch die Grenzwerte ±∞ einzuf¨ uhren. Folgen, die gegen diese Werte streben, nennt man bestimmt divergent. Wie aber definiert man das Streben gegen ∞? Man kann schließlich keinen ε-Streifen um ∞ legen, ∞ − ε kann nur wieder ∞ sein. Stattdessen kann man aber einen Streifen ]M, ∞[ betrachten, wobei das M beliebig groß werden darf:
4.4 Konvergenz von Folgen und Reihen
235
Definition 4.16 (bestimmte Divergenz) Eine Folge (an )∞ n=1 heißt bestimmt divergent gegen ∞ genau dann, falls f¨ ur jedes noch so große (positive) M ∈ R eine Stelle n0 ∈ N (die von M ur alle Folabh¨ angig sein darf) existiert, so dass f¨ ur alle n > n0 , also f¨ genglieder nach dieser Stelle, gilt: an > M . Wir benutzen die Schreibweise limn→∞ an = ∞. Entsprechend heißt die Folge bestimmt divergent gegen −∞, falls f¨ ur jedes noch so kleine (negative) m ∈ R eine Stelle n0 = n0 (m) ∈ N existiert, so dass f¨ ur alle n > n0 gilt: an < m. Wir benutzen die Schreibweise limn→∞ an = −∞. Die unbeschr¨ ankte Folge ((−1)n n)∞ n=1 ist nicht bestimmt divergent. Bestimmte Divergenz ist also mehr als nur Unbeschr¨ anktheit. Beispiel 4.17 Bildet man die Folgenglieder u ahler und im ¨ ber Funktionen, bei denen im Z¨ Nenner ein Polynom steht (gebrochen-rationale Funktionen), so haben wir bereits gesehen, dass sich der Grenzwert im Falle der Konvergenz an den Faktoren zu den gr¨ oßten Exponenten im Z¨ ahler und Nenner ablesen l¨ asst. Dies gilt auch im Fall der bestimmten Divergenz. Wir erweitern wieder mit 1/nm , wobei m der gr¨ oßte Exponent des Nenners ist, z. B. m = 2: →2
4n + 2n + 1 4n + 2 + n−2 lim = −∞. = lim n→∞ n→∞ −2 + 5n−2 −2n2 + 5 3
2
→−2
Allgemein gilt f¨ ur bm = 0:
⎧a k ⎪ ⎪ bm ⎪ ⎪ ⎨0 ak nk + ak−1 nk−1 + · · · + a1 n + a0 = lim m m−1 n→∞ bm n ⎪ + bm−1 n + · · · + b1 n + b0 +∞ ⎪ ⎪ ⎪ ⎩ −∞
falls k = m, falls k < m, falls k > m, falls k > m,
ak bm ak bm
> 0, < 0.
Aufgabe 4.15 Berechnen Sie die Folgengrenzwerte, auch wenn sie ±∞ sind: a) limn→∞
24n4 +3n2 +1 −8n3 +2n3 +n ,
b) limn→∞
24n4 +3n2 +1 −8n4 +2n3 +n ,
c) limn→∞
24n3 +3n2 +1 −8n4 +2n3 +n .
∞ oder 1∞ (wobei 1 Solange wir keine undefinierten Operationen wie ∞−∞, ∞ ein Grenzwert ist) durchf¨ uhren, gelten viele Aussagen f¨ ur reelle Grenzwerte auch f¨ ur die Grenzwerte ±∞. Haben wir beispielsweise zwei Folgen mit limn→∞ an = ahrend sich der a ∈ R und limn→∞ bn = ∞, so gilt limn→∞ abnn = 0. Denn w¨ Z¨ ahler immer mehr der Zahl a ann¨ ahert, wird der Nenner immer gr¨ oßer, der
236
4 Ausgew¨ ahlte Kapitel der Analysis
Betrag des Quotienten wird damit immer kleiner. Unproblematisch sind auch ∞ + ∞ = ∞, ∞∞ = ∞, a · ∞ = ∞ falls a > 0 und a · ∞ = −∞ falls a < 0. Wir kehren zur Konvergenz gegen einen reellen Grenzwert zur¨ uck und betrachten eine ¨ aquivalente Formulierung des Konvergenzbegriffs: Satz 4.18 (Cauchy-Kriterium f¨ ur Folgen) Eine Folge (an )∞ n=1 konvergiert genau dann, wenn sie eine Cauchy-Folge ist, d. h., wenn zu jedem (noch so kleinen) ε > 0 ein n0 = n0 (ε) ∈ N existiert, so dass f¨ ur alle n, m > n0 gilt: |an − am | < ε. Eine Folge ist also genau dann konvergent, wenn es zu jeder vorgegebenen Genauigkeit eine Stelle gibt, ab der der Abstand zweier beliebiger Folgenglieder kleiner als die Genauigkeit ist. Mit dem Cauchy-Kriterium kann im Gegensatz zur Definition auf Konvergenz untersucht werden, ohne dass ein Kandidat f¨ ur den Grenzwert bekannt sein muss. Wir werden diesen Satz vor Allem f¨ ur Reihen einsetzen. Dazu formulieren wir das Kriterium im Anschluss an den Beweis f¨ ur 1 = ∞. Reihen und folgern z. B. ∞ k=1 k ¨ Im Satz ist eine Aquivalenz formuliert. Wir beweisen hier aber nur die einfachere Richtung konvergente Folge =⇒ Cauchy-Folge“. Bei der anderen Rich” tung muss man zun¨ achst einen Grenzwert konstruieren. Das gelingt u ¨ ber eine Intervallschachtelung und die Vollst¨ andigkeit der reellen Zahlen (vgl. Seite 173). In der Tat kann man die Vollst¨ andigkeit der reellen Zahlen statt u ¨ ber Intervallschachtelungen auch dar¨ uber erkl¨ aren, dass jede Cauchy-Folge konvergiert. Sie sehen, dass die hier ausgelassene Richtung eng mit dem Aufbau der reellen Zahlen verwoben ist. Beweis Wir zeigen nur, dass aus der Konvergenz die Cauchy-Bedingung folgt. Das geschieht wieder mit einem f¨ ur die Analysis ganz typischen Argument auf Basis der Dreiecksungleichung. Sei also die Folge (an )∞ n=1 konvergent gegen den Grenzwert a. Außerdem sei ε > 0 beliebig vorgegeben. Aufgrund der Konvergenz ur alle n > n0 gilt: |an − a| < existiert insbesondere zu ε/2 ein n0 ∈ N, so dass f¨ ε/2. Damit gilt f¨ ur n, m > n0 unter Verwendung der Dreiecksungleichung die Cauchy-Bedingung: |an − am | = |an − a + a − am | ≤ |an − a| + |a − am |
0 existiert eine Stelle ur alle n, m ∈ N mit m ≥ n > n0 gilt: n0 = n0 (ε) ∈ N, so dass f¨
(m (
k=n
( ak ( < ε.
Das entspricht der Anschauung: Die Konvergenz einer Reihe ist damit ¨ aquivalent, dass die Restsummen hinreichend klein werden, genauer: Beliebige Abschnitte der Summe m¨ ussen kleiner als jeder vorgegebene Wert ε > 0 sein, wenn sie nur weit genug hinten in der Summe liegen. Beweis Nach dem soeben gezeigten Cauchy-Kriterium f¨ ur Folgen ist die Konvergenz der Reihe ¨ aquivalent mit der Cauchy-Bedingung f¨ ur die Partialsummen, ur alle m ≥ n > n0 d. h., zu jedem ε > 0 existiert ein n0 = n0 (ε) ∈ N, so dass f¨ |sm − sn−1 | < ε gilt. Da sm − sn−1 =
m k=n
ak ist, ist damit der Beweis erbracht.
Tab. 4.3 Wichtige Reihen
Name Geometrische Reihe Harmonische Reihe Reihenentwicklung f¨ ur e
Bildungsgesetz ∞ k k=0 q
∞ k=1 ∞ k=1 ∞
1 k 1 kα 1 k=0 k!
Grenzwert 1 1−q ,
falls −1 < q < 1
existiert nicht, falls |q| ≥ 1 existiert nicht existiert genau f¨ ur α > 1 e
Beispiel 4.20 1 Die harmonische Reihe ∞ k=1 k ist divergent, da die Cauchy-Bedingung nicht erf¨ ullt ist: W¨ ahlen wir m = 2n, dann ist m 2n 1 1 = > k k
k=n
k=n
(n + 1) Anzahl der Summanden
·
1 2n
>
1 2
kleinstes Glied
ur alle unabh¨ angig von n. Das heißt, zu ε := 1/4 existiert kein n0 ∈ N, so dass f¨ (m 1 ( ( ( n, m > n0 gilt: k=n k < ε.
238
4 Ausgew¨ ahlte Kapitel der Analysis
Die harmonische Reihe ist deshalb so wichtig, weil sie der Prototyp einer bestimmt divergenten Reihe ist. Mittels Integralrechnung werden wir auf Seite 270 zeigen, dass n 1 ≥ ln(n + 1) > ln(n) (4.11) 1 + ln(n) ≥ k k=1
ist. Da 1 + ln(n) ≤ ln(n) + ln(n) = 2 ln(n) f¨ ur n ≥ 3 gilt, haben wir damit n ∞ 1 ∈ Θ(ln(n)). k k=1
n=1
Da der Logarithmus mit wachsendem n gegen unendlich strebt, folgt auch damit die Divergenz der Reihe. 1 ur Betrachten wir allgemeiner die Reihen ∞ k=1 kα zum Parameter α ∈ R. F¨ α = 1 erhalten wir die harmonische Reihe. Aber bereits f¨ ur α > 1 sind die Reihen konvergent. Das kann man ebenfalls mittels Integralrechnung zeigen. In diesem Sinne ist die harmonische Reihe so gerade eben nicht konvergent. Wir folgern jetzt zwei wichtige Aussagen aus dem Cauchy-Kriterium. Satz 4.21 (absolute Konvergenz bedeutet Konvergenz) Ist die Reihe der Betr¨ age ∞ k=1 |ak | konvergent (wir nennen dann die Reihe ∞ a absolut konvergent), dann konvergiert auch die entsprechende k k=1 a ohne Betr¨ a ge. Reihe ∞ k=1 k
Beweis Wegen der Konvergenz von ∞ k=1 |ak | existiert nach Cauchy-Kriterium ur alle m ≥ n > n0 gilt: zu jedem ε > 0 ein n0 ∈ N, so dass f¨ ( m ( m ( ( ( ( |ak | = ( |ak |( < ε. ( ( k=n
k=n
( ( ak ( ≤ m Damit folgt aus der Dreiecksungleichung ( m k=n k=n |ak | < ε, so dass ∞ ullt ist und sie konvergiert. die Cauchy-Bedingung f¨ ur die Reihe k=1 ak erf¨ W¨ ahrend bei endlichen Summen die Summationsreihenfolge beliebig ge¨ andert werden darf, f¨ uhrt das bei (unendlichen) Reihen zu u berraschenden Effekten. So ¨ k¨ onnen sich v¨ ollig andere Grenzwerte ergeben. Ist eine Reihe konvergent aber nicht absolut konvergent, dann gibt es zu jeder Zahl eine Umordnung, so dass die Reihe gegen die vorgegebene Zahl konvergiert (Riemann’scher Umordnungs (−1)k+1 = ln(2) satz). Wir betrachten ein Beispiel: Man kann zeigen, dass ∞ k=1 k ist. Mittels Umsortierung erhalten wir aber einen anderen Wert. Dazu betrachten wir Summanden zu ungeraden Indizes 2k − 1 (das sind die Terme (−1)(2k−1)+1 2k−1
=
1 2k−1 )
und zu geraden Indizes 2k, wobei wir diese noch einmal
4.4 Konvergenz von Folgen und Reihen
239
aufspalten in Terme, deren Indizes genau einen Primfaktor 2 haben (Indizes 2(2k − 1), da 2k − 1 ungerade ist und so keinen Primfaktor 2 besitzt, also Terme (−1)2(2k−1)+1 2(2k−1)
=
−1 2(2k−1) ),
und Terme, deren Indizes mindestens zwei Primfak4k+1
= −1 toren 2 haben (Indizes 4k, Summanden (−1) 4k 4k ). Wir summieren nun ∞ (−1)k+1 , indem wir die drei Typen von Summanden ababweichend von k=1 k wechselnd verwenden. Im Vergleich zur Startreihe addieren wir so den ersten, zweiten, vierten, dritten, sechsten, achten, f¨ unften usw. Summanden: ∞ $
% ∞ ∞ 1 4k − 2k − (2k − 1) 1 1 1 = − − = 2k − 1 2(2k − 1) 4k (2k − 1)4k (2k − 1)4k k=1 k=1 k=1 % ∞ ∞ $ ∞ 1 (−1)k+1 1 2k − (2k − 1) 1 1 1 ln(2) = = = − = . 2 (2k − 1)2k 2 2k − 1 2k 2 k 2 k=1
k=1
k=1
Dabei haben wir beim vorletzten Gleichheitszeichen wieder Summanden zu ge¨ raden und ungeraden Indizes zusammengefasst. Die Anderung der Reihenfolge ln(2) hat das zu ln(2) verschiedene Ergebnis 2 erbracht. Ist eine Reihe jedoch absolut konvergent, dann d¨ urfen wir dagegen die Reihenfolge beliebig w¨ ahlen, ohne dass sich der Grenzwert ¨ andert. Eine unendliche Summe kann nur dann einen endlichen Wert ergeben, wenn betragsm¨ aßig immer weniger addiert wird. Bei nicht-negativen Summanden ist das v¨ ollig klar. Aber das gilt auch unabh¨ angig vom Vorzeichen der Summanden: Satz 4.22 (notwendige Bedingung f¨ ur Konvergenz einer Reihe) a konvergent, dann ist limk→∞ ak = 0. Ist eine Reihe ∞ k k=1 Eine Reihe kann also nur konvergieren, wenn die Zahlen, die man aufsummiert, gegen null konvergieren. Beweis Die Aussage folgt direkt aus dem Cauchy-Kriterium, indem man dort m = n w¨ ahlt: Ist die Reihe konvergent, so existiert zu jedem ε > 0 eine Stelle ( ( ( ur alle n > n0 gilt: ( n n0 ∈ N, so dass f¨ k=n ak = |an − 0| < ε. Das ist aber genau die Definition einer Nullfolge.
∞ k Die geometrische Reihe ∞ ur |q| ≥ 1, da q k k=1 dann keine k=0 q divergiert f¨ Nullfolge ist. Die harmonische Reihe zeigt, dass eine Summe u ¨ ber eine Nullfolge auch divergieren kann. Es handelt sich hier also wirklich um eine notwendige, aber nicht um eine hinreichende Bedingung. Man sieht also einer Reihe nicht unbedingt direkt an, ob sie konvergiert. Daher ben¨ otigt man einfach zu benutzende Kriterien f¨ ur Konvergenzuntersuchungen. Wir beschr¨ anken uns hier auf das Vergleichskriterium, das intuitiv sofort klar ist: Wenn eine unendliche Summe nicht negativer Zahlen konvergiert, dann auch eine Summe kleinerer nicht-negativer Zahlen:
240
4 Ausgew¨ ahlte Kapitel der Analysis
Satz 4.23 (Vergleichs- oder Majoranten/Minoranten-Kriterium) Gegeben sei eine Reihe ∞ k=1 ak . a) Falls es eine konvergente Reihe (Majorante) ∞ k=1 |ck | gibt, so dass (ak )∞ k=1 ∈ O(ck )
∞ gilt, dann ist auch die Reihe ∞ k=1 |ak | und insbesondere k=1 ak konvergent. b) Falls es eine divergente Reihe (Minorante) ∞ k=1 |dk | gibt, so dass (dk )∞ k=1 ∈ O(ak ) bzw. ak ∈ Ω(dk ) gilt, dann ist die Reihe
∞ k=1
|ak | ebenfalls divergent.
Beweis a) Der Beweis basiert auf der Cauchy-Bedingung und dem Vergleich mit der ur alle Majorante: Wir l¨ osen ak ∈ O(ck ) auf: Sei n0 ∈ N und C > 0, so dass f¨ k ≥ n0 gilt: |ak | ≤ C|ck |. ∞ Da die Reihe ullt sie die k=1 |ck | nach Voraussetzung konvergent ist, erf¨ Cauchy-Bedingung, d. h., zu jedem Cε > 0 existiert ein n1 = n1 Cε ∈ N, ( ( m ε ( ur so dass f¨ ur alle m ≥ n > n1 gilt: ( m k=n |ck | = k=n |ck | < C . F¨ m ≥ n > max{n0 , n1 } gilt damit: m k=n
|ak | ≤ C
m k=n
|ck | < C
ε = ε. C
ullt, Damit ist aber die Cauchy-Bedingung auch f¨ ur die Reihe ∞ k=1 |ak | erf¨ die damit konvergent ist. Alternativ h¨ atten wir die Konvergenz auch dar¨ uber |a | eine monoton wachsende, zeigen k¨ onnen, dass die Partialsummen n k k=1 und aufgrund der Majorante nach oben beschr¨ ankte Folge bilden. ur alle k > n0 f¨ ur eine Stelle n0 ∈ N. b) Nach Voraussetzung ist |dk | ≤ C|ak | f¨ ∞ |a | konvergent, so w¨ a re nach a) auch W¨ are nun ∞ k k=1 k=1 |dk | konvergent ∞ – im Widerspruch zur Voraussetzung der Divergenz. Also muss k=1 |ak | divergent sein. Um mit diesem Satz die Konvergenz oder Divergenz einer Reihe zu zeigen, ben¨ otigt man geeignete Reihen zum Vergleich (vgl. Tabelle 4.3). Mit der harmonischen Reihe kann man gut Divergenz zeigen. Zum Nachweis von Konvergenz ist eine der prominentesten Reihen die geometrische Reihe. Hier nicht behandelte Konvergenzkriterien wie das Quotienten- oder Wurzelkriterium verpacken
4.5 Analyse des randomisierten Quicksort
241
einen solchen Vergleich mit der geometrischen Reihe in eine einfach zu benutzende Bedingung. Beispiel 4.24 (Euler’sche Zahl) Wir ben¨ otigen sp¨ ater in Aufgabe 5.11 auf Seite 314 bei der Absch¨ atzung, wie 1 aufw¨ andig die Berechnung einer Determinante ist, dass die Reihe ∞ k=0 k! konvergiert. Dazu wenden wir das Vergleichskriterium f¨ ur k ≥ 1 an: ( ( (1( ( ( = 1 = 1 · 1 · ... · 1 · 1 · 1 ≤ 1 · 1 · ... · 1 · 1 ≤ 1 = 2 1 . ( k! ( k! k k−1 6 2 1 2 2 2 2k−1 2k
∞ 1 Da die geometrische Reihe = 2 konvergiert, konvergiert laut Ver∞ 1 k=0 2k gleichskriterium auch k=0 k! . Der Grenzwert dieser Reihe bekommt den Namen e und ist die Euler’sche Zahl. Wir kommen noch einmal auf die Stellenwertdarstellung reeller Zahlen aus Satz 3.34 von Seite 187 zur¨ uck. Eine Zahl 0, x−1 x−2 x−3 . . . haben wir dort mit einer reellen Zahl x identifiziert. Jetzt k¨ onnen wir x als Grenzwert schreiben: x=
∞
x−k 10−k .
k=0
Diese Reihe ist konvergent, denn sie l¨ asst sich mit einer konvergenten geometri( ( −k = 1−1 1 = 10 schen Reihe vergleichen: (x−k 10−k ( ≤ 9 · 10−k und ∞ k=0 10 9 . 10
Außerdem l¨ asst sich leicht nachrechnen, dass x die gleiche Zahl wie die aus Satz 3.34 ist, da sie in allen Intervallen der dortigen Intervallschachtelung liegt. Aufgabe 4.16 a) Pr¨ ufen Sie mit dem Vergleichskriterium die Reihen auf Konvergenz: ∞ 1 √ k k=1
∞
und
b) Nutzen Sie f¨ ur k ≥ 1 die Absch¨ atzung
k=2 1 k!
≤
1 . k2 ln(k)
1 , 2k−1
um e ≤ 3 zu zeigen.
Nachdem wir uns in diesem Kapitel st¨ andig mit sehr kleinen ε besch¨ aftigt haben, wollen wir Ihnen den k¨ urzesten Mathematiker-Witz nicht vorenthalten: Sei ε < 0.“. Falls Sie den Witz nicht lustig finden, ist das in Ordnung. Falls Sie ” den Witz nicht verstehen, sollten Sie das Kapitel noch einmal durcharbeiten.
4.5
Analyse des randomisierten Quicksort
Wir kombinieren die Wahrscheinlichkeitsrechnung mit der Analysis und untersuchen den randomisierten Quicksort. Er entsteht aus dem Quicksort-Algorithmus,
242
4 Ausgew¨ ahlte Kapitel der Analysis
indem wir die Prozedur Partition aus Algorithmus 4.3 ersetzen durch die Variante in Algorithmus 4.6. Dabei wird zu Beginn einer der Werte A[l], . . . , A[r] zuf¨ allig gew¨ ahlt und mit dem linken Element A[l] getauscht, der Rest ist unver¨ andert. Algorithmus 4.6 Randomisiertes Aufteilen einer Liste in zwei Teillisten function Partition(l, r) k sei ein zuf¨ alliger Wert aus {l, l + 1, l + 2, . . . , r}, Jedes Element wird mit der gleichen Wahrscheinlichkeit gew¨ ahlt. Swap(l, k), p := A[l], i := l + 1, j := r repeat while (i < r) ∧ (A[i] ≤ p) do i := i + 1 while (j > l) ∧ (A[j] ≥ p) do j := j − 1 if i < j then Swap(i, j) until j ≤ i Swap(l, j) return j Zur Vereinfachung der Darstellung betrachten wir jetzt nur Eingaben, die aus den n verschiedenen Schl¨ usseln 1, 2, . . . , n bestehen. Wir suchen den Erwartungswert der Zufallsvariablen X, die uns die Laufzeit im Sinne der Anzahl der Vergleiche f¨ ur eine beliebige, fest vorgegebene Eingabe angeben soll. Dazu f¨ uhren wir Zufallsvariablen Xi,j ein, die nur die Werte null und eins annehmen. usselwert Xi,j sei genau dann eins, wenn der Algorithmus irgendwann den Schl¨ i mit dem Wert j (und damit auch j mit i) vergleicht. Es reicht, den Fall i < j zu betrachten, in dem der erste Index kleiner als der zweite ist. Denn sonst w¨ urden die beiden Zufallsvariablen Xi,j und Xj,i den gleichen Vergleich beschreiben. Wenn i mit j verglichen wird, dann ist einer der beiden Werte das Pivot-Element, z. B. der Wert j. Damit wird i (aber nicht j) in einer der beiden rekursiv zu sortierenden Teillisten gespeichert und daher nie wieder mit dem Wert j verglichen. Daher kann maximal ein solcher Vergleich stattfinden. Damit ist X die Summe u ¨ ber alle Xi,j mit i < j (vgl. auch Aufgabe 3.13 auf Seite 155): n−1 n Xi,j . X= i=1 j=i+1
Wegen der Linearit¨ at (3.19) des Erwartungswerts gilt (siehe Seite 152): E(X) =
n−1
n
i=1 j=i+1
E(Xi,j ).
(4.12)
4.5 Analyse des randomisierten Quicksort
243
Der Erwartungswert E(Xi,j ) ist gleich der Wahrscheinlichkeit pi,j , dass i mit j verglichen wird: E(Xi,j ) = 1 · pi,j + 0 · (1 − pi,j ) = pi,j . Wir berechnen jetzt diese Wahrscheinlichkeit: Verglichen wird immer mit einem Pivot-Element. Sei i < j. Solange noch kein Schl¨ ussel aus S := {i, i + 1, i + 2, . . . , j} als Pivot-Element ausgew¨ ahlt wurde, liegen alle Schl¨ ussel dieser Menge stets in einer gemeinsamen Teilliste: Ist bei der ersten Erzeugung von Teillisten das Pivot-Element gr¨ oßer als j, dann wird S vollst¨ andig in die Teilliste mit Schl¨ usseln kleiner (gleich) j aufgenommen. Ist dagegen das Pivot-Element kleiner als i, dann gelangt S in die andere Teilliste. Wird die Teilliste, in der jetzt die Elemente von S liegen, weiter mit einem Pivot-Element aufgeteilt, das nicht in S enthalten ist, dann bleiben die Schl¨ ussel aus S wie zuvor in einer neuen Teilliste usw. Irgendwann wird aber ein erster Schl¨ ussel der Menge S als Pivot-Element ausgew¨ ahlt: Handelt es sich beim ersten Pivot-Element um einen Schl¨ ussel k mit i < k < j, so wandern i und j in unterschiedliche Teillisten und k¨ onnen in der Folge nicht mehr miteinander verglichen werden. Sie werden also nie miteinander verglichen. Wird zuerst i (oder j) als Pivot-Element verwendet, dann wird bei der Aufteilung das Pivot-Element i (oder j) mit j (oder i) verglichen. Fassen wir beide Punkte zusammen, dann wissen wir, dass ein Vergleich von i usseln und j genau dann geschieht (also Xi,j = 1), wenn i oder j vor den Schl¨ i + 1, i + 2, . . . , j − 1 als Pivot-Element benutzt wird. Wenn nun jede Wahl 2 die Wahrvon Pivot-Elementen gleich wahrscheinlich ist, dann ist pi,j = j−i+1 scheinlichkeit, dass einer der beiden Schl¨ ussel i oder j als erster der j − i + 1 Schl¨ ussel {i, i+1, . . . , j} zum Pivot-Element wird. Damit erhalten wir insgesamt f¨ ur n ≥ 2: E(X)
(4.12)
=
n−1
n
n−1
E(Xi,j ) =
i=1 j=i+1 k:=j−i+1
=
n−1 n+1−i i=1
=
k=2
pi,j =
i=1 j=i+1
2 k
n+1−i≤n
≤
2(n − 1) −1 +
n k=1
1
0 berechnen, wir einen Wert nahe bei f (x) erhalten. Eine kleine Ursache (Δx) hat somit auch nur eine kleine Wirkung (geringe Abweichung von f (x)). Wir formulieren das pr¨ aziser: ¨ Satz 4.26 (Aquivalente Formulierung der Stetigkeit) aquivalent: F¨ ur eine Funktion f : D → R und eine Stelle x0 ∈ D sind ¨ a) f ist stetig in x0 . b) Zu jedem (kleinen) ε > 0 gibt es ein (kleines) δ > 0, so dass f¨ ur alle x ∈ D mit |x − x0 | < δ gilt: |f (x) − f (x0 )| < ε (siehe Abbildung 4.11). y
f(x 0)
ε δ x0
x
Abb. 4.11 Stetigkeit in x0 : Zu jedem ε > 0 existiert ein δ > 0, so dass auf dem Intervall ]x0 −δ, x0 +δ[ alle Funktionswerte im ε-Streifen ]f (x0 ) − ε, f (x0 ) + ε[ liegen.
Beweis a) folgt aus b) durch Ineinanderschachteln der Definitionen: Sei ε > 0 beliebig vorgegeben und (hn )∞ n=1 eine Nullfolge mit x0 + hn ∈ D. Zum δ aus ur alle n > n0 gilt: |hn − 0| < δ und damit b) existiert daher ein n0 , so dass f¨ ur alle n > n0 . |x0 + hn − x0 | < δ. Wegen b) ist damit |f (x0 + hn ) − f (x0 )| < ε f¨ Damit haben wir aber limn→∞ f (x0 + hn ) = f (x0 ) bewiesen, f ist stetig in x0 . Um zu sehen, dass b) aus a) folgt, f¨ uhren wir einen indirekten Beweis. Wir nehmen an, b) gelte nicht: Es gibt ein ε > 0, so dass f¨ ur jedes δ > 0 – also insbesondere f¨ ur δ = n1 – ein xn ∈ D mit |xn − x0 | < δ gibt, so dass |f (xn ) − f (x0 )| ≥ ε ist. Wenn wir das zu δ = n1 gefundene xn schreiben als xn = x0 + hn , dann ist hn = 0 mit x0 + hn ∈ D, |hn | < 1/n und |f (x0 + hn ) − f (x0 )| ≥ ε. Die ∞ Folge (hn )∞ n=1 konvergiert nach Konstruktion gegen 0, aber (f (x0 + hn ))n=1 konvergiert nicht gegen f (x0 ). Damit gilt a) nicht. Wenn also a) zutrifft, dann muss auch b) gelten. Da wir beispielsweise reelle Zahlen nur n¨ aherungsweise im Computer als Fließpunktzahlen darstellen, ben¨ otigen wir die Stetigkeit, um ohne zu große Fehler Funktionswerte berechnen zu k¨ onnen (vgl. Beispiel zur Berechnung des Sinus auf Seite 204). Stetigkeit wird im Umfeld der Numerik oder im Zusammenhang mit Algorithmen h¨ aufig auch als Stabilit¨ at bezeichnet: Ergebnisse sind dann ¨ robust gegen kleine Anderungen. Das zeigt sich auch am Vorzeichenverhalten:
4.6 Stetigkeit und Differenzierbarkeit
247
Aufgabe 4.17 Die Funktion f : D → R sei stetig an einer Stelle x0 ∈ D mit f (x0 ) > 0. Zeigen Sie, dass f auch nah bei x0 positive Funktionswerte hat, d. h., dass es ein δ > 0 gibt, so dass f (x) > 0 f¨ ur alle x ∈ D mit |x − x0 | < δ gilt. Die entsprechende Aussage gilt nat¨ urlich auch f¨ ur f (x0 ) < 0. Die Stetigkeit hat uns f¨ ur die Analyse des Wachstums von Laufzeitfunktionen scheinbar noch nicht geholfen. Wir ben¨ otigen dazu den Begriff der Ableitung, der sich aber als Versch¨ arfung des Begriffs der Stetigkeit erweisen wird. Die Ableitung wird u ¨ ber Differenzenquotienten definiert. Eine Gerade (Sekante), die durch die beiden Punkte (x0 , f (x0 )) und (x0 + h, f (x0 + h)) geht, hat die Steigung (Steigungsdreieck: H¨ ohenzuwachs / Horizontaldifferenz) f (x0 + h) − f (x0 ) f (x0 + h) − f (x0 ) = , (x0 + h) − x0 h siehe Abbildung 4.12. Wenn wir |h| immer kleiner w¨ ahlen, dann n¨ ahern wir uns mit x0 + h der Stelle x0 und kommen der Steigung von f an der Stelle x0 immer n¨ aher. Die Steigung ist die Ableitung, und die Gerade, die durch (x0 , f (x0 )) geht und die gleiche Steigung hat, ist die Tangente von f an der Stelle x0 . Definition 4.27 (Ableitung) Eine Funktion f : D → R heißt differenzierbar an einer Stelle x0 ∈ D genau dann, wenn f¨ ur jede Nullfolge (hn )∞ n=1 mit x0 + hn ∈ D und hn = 0 f¨ ur alle n ∈ N der Grenzwert lim
n→∞
f (x0 + hn ) − f (x0 ) hn
existiert. Der Grenzwert heißt dann die Ableitung von f an der Stelle x0 df und wird mit f (x0 ) oder dx (x0 ) bezeichnet. Ist f an allen Stellen x0 ∈ D differenzierbar, so heißt f differenzierbar auf D. Die Funktion f , die jedem x ∈ D dann die Ableitung f (x) zuordnet, heißt Ableitungsfunktion oder zur Verwirrung kurz ebenfalls wieder Ableitung.
Sekante
f(x 0 + h n)
Tangente f(x0) x0
x 0+ hn
Abb. 4.12 Die Steigung der Sekante ist f (x0 +hhnn)−f (x0 ) . Strebt hn gegen null, dann wird daraus die Steigung der Tangente.
248
4 Ausgew¨ ahlte Kapitel der Analysis
Wir haben die Situation in der Definition etwas vereinfacht: Falls D ein Intervall mit Randpunkt x0 ∈ D ist, so spricht man eigentlich nicht von Differenzierbarkeit, sondern von einseitiger Differenzierbarkeit in x0 . In Anwendungen haben wir h¨ aufig nur einzelne Funktionswerte, nicht aber die komplette Funktion zur Verf¨ ugung. Das ist z. B. so, wenn wir die Grauwerte von Bildpixeln als Funktionswerte auffassen. Dann k¨ onnen wir wegen der fehlenden Zwischenwerte keine Ableitung berechnen. Aber wir k¨ onnen sie u ¨ ber den Differenzenquotienten ann¨ ahern. Statt mit der Ableitung rechnet man dann also mit einem Differenzenquotienten f¨ ur einen festen Wert hn . Beschreibt die Funktion f (t) eine Entfernung zu einem Startpunkt in Abh¨ angigkeit der Zeit (Weg-Zeit-Diagramm), dann gibt f (t) die Geschwindigkeit an. Leitet man die Ableitungsfunktion noch einmal ab, hat man die zweite 2 Ableitung f (t) = ddtf2 (t) := [f ] (t). Im Beispiel erhalten wir so die Beschleunigung. Entsprechend schreiben wir f (n) (t), wenn wir n-mal hintereinander ableiten. Mit f (0) (t) := f (t) bezeichnen wir die Funktion als ihre nullte Ableitung“. ” Mit dieser Schreibweise m¨ ussen wir sp¨ ater nicht zwischen der Funktion und ihren Ableitungen unterscheiden. Vielleicht irritiert, dass wir hier als Variable t und nicht x verwendet haben. Variablennamen k¨ onnen frei gew¨ ahlt werden, d und t steht h¨ aufig f¨ ur die Zeit. Allerdings muss dann auch die Schreibweise dx d angepasst werden zu dt . Wir berechnen einige wichtige Ableitungen. Sei dazu (hn )∞ n=1 eine beliebige ur alle n ∈ N: Nullfolge mit hn = 0 f¨ F¨ ur f (x) = 1 ist f (x) = 0, denn: limn→∞ f (x+hhnn)−f (x) = limn→∞ 1−1 hn = d c = 0. Machen Sie sich 0. Allgemeiner gilt f¨ ur jede Konstante c ∈ R: dx diesen Sachverhalt auch am Funktionsgraphen und der Tangentensteigung klar: Eine konstante Funktion hat die Steigung null. F¨ ur f (x) = x ist f (x) = 1, denn lim
n→∞
f (x + hn ) − f (x) x + hn − x = lim = 1. n→∞ hn hn
F¨ ur f (x) = xm mit m ∈ N gilt mit dem binomischen Satz (siehe Seite 145) m m m−k k · hn − xm (x + hn )m − xm k=0 k x = lim f (x) = lim n→∞ n→∞ hn hn m x + mxm−1 hn + h2n (. . . ) − xm = lim n→∞ hn = mxm−1 + lim hn (. . . ) = mxm−1 . n→∞
F¨ ur f (x) =
1 x,
f (x) =
x = 0, folgt lim
n→∞
1 x+hn
−
hn
1 x
= lim
n→∞
x−(x+hn ) (x+hn )·x
hn
= lim
n→∞
x − (x + hn ) hn (x + hn )x
4.6 Stetigkeit und Differenzierbarkeit
=
lim
n→∞
249
−1 1 −hn = lim = − 2. hn (x + hn )x n→∞ (x + hn )x x
Eine ganz besondere Funktion hinsichtlich der Ableitung ist die Exponentid exp(x) = exp(x) ist. Da das Ausrechnen von Potenzen mit alfunktion, da dx reellen Exponenten u ¨ ber Grenzwerte von rationalen Potenzen definiert ist, ist das Nachrechnen etwas aufw¨ andiger, so dass wir hier darauf verzichten. Satz 4.28 (Differenzierbare Funktionen sind stetig) Ist f : D → R differenzierbar in x0 ∈ D, so ist f stetig in x0 . Beweis Sei (hn )∞ n=1 mit hn = 0 und x0 + hn ∈ D eine beliebige Nullfolge. Nach Definition der Stetigkeit m¨ ussen wir
⇐⇒ lim f (x0 + hn ) − f (x0 ) = 0 lim f (x0 + hn ) = f (x0 ) n→∞ n→∞
Satz 4.10 c) i) ⇐⇒ lim f (x0 + hn ) − f (x0 ) = 0 n→∞
zeigen: f (x0 + hn ) − f (x0 ) lim [f (x0 + hn ) − f (x0 )] = lim hn · n→∞ hn
f (x0 + hn ) − f (x0 ) = lim hn · lim = 0 · f (x0 ) = 0. n→∞ n→∞ hn
n→∞
Dabei konnten wir Satz 4.10 c) iii) benutzen, da beide Grenzwerte nach Voraussetzung existieren. Damit sind alle Funktionen, deren Ableitung wir an einer Stelle x0 berechnen, auch an der Stelle x0 stetig: Die Funktionen aus Tabelle 4.4 sind auf ihrem Definitionsbereich stetig. Die Umkehrung gilt aber nicht: Wenn es z. B. im Graphen zu einer stetigen Funktion einen Knick gibt, dann ist sie dort nicht differenzierbar. So existiert die Ableitung von |x| nicht an der Stelle 0, da |hn | |0 + hn | − |0| = = ±1, hn hn je nachdem, ob hn positiv oder negativ ist. Je nach Nullfolge (hn )∞ n=1 ist der Grenzwert des Differenzenquotienten −1 oder 1, oder er existiert nicht. Eine Funktion f besitzt an einer Stelle x0 genau dann ein lokales Maximum, oßer oder gleich allen Funktionswerten f (x) ist, sofern x nah genug wenn f (x0 ) gr¨ ur alle x ∈ ]x0 −δ, x0 +δ[ bei x0 liegt (daher: lokal), d. h., wenn diese Bedingung f¨ zu einem kleinen δ > 0 erf¨ ullt ist. Ein lokales Minimum liegt genau dann vor, ur alle x ∈ ]x0 − δ, x0 + δ[ ist. An solchen Extremstellen wenn f (x0 ) ≤ f (x) f¨ ist man bei Optimierungsproblemen interessiert. Wir erhalten unmittelbar die bekannte notwendige Bedingung (vgl. Seite 21) f¨ ur lokale Extremstellen (siehe Abbildung 4.13):
250
4 Ausgew¨ ahlte Kapitel der Analysis
Satz 4.29 (Notwendige Bedingung f¨ ur lokale Extremstellen) Sei f auf ]a, b[ differenzierbar. Besitzt f an einer Stelle x0 ∈ ]a, b[ ein lokales Maximum oder Minimum, dann gilt notwendigerweise f (x0 ) = 0.
Beweis Wir betrachten den Fall eines lokalen Maximums. Der Beweis f¨ ur eine Nullfolge mit positiven ein Minimum verl¨ auft entsprechend. Sei (hn )∞ n=1 ugend groß, dann gilt wegen des lokalen Maximums Gliedern hn . Ist n gen¨ f (x0 ) > f (x0 ± hn ) bzw. f (x0 ± hn ) − f (x0 ) ≤ 0. ≤0
≤0
0
f (x0 − hn ) − f (x0 ) f (x0 + hn ) − f (x0 ) = f (x0 ) = lim ≤ 0. 0 ≤ lim n→∞ n→∞ −hn hn Also ist f (x0 ) = 0.
Abb. 4.13 Bei den lokalen Extrema hat der Graph horizontale Tangenten, allerdings liegt die zweite Tangente von links an keiner Extremstelle: f (x0 ) = 0 ist notwendig, aber nicht hinreichend f¨ ur ein Extremum bei x0 .
Beispielsweise erf¨ ullen die Funktionen f (x) = x2 und g(x) = x3 mit f (x) = 2 2x und g (x) = 3x diese Bedingung an der Stelle x0 = 0. Wenn Sie die Graphen skizzieren, dann sehen Sie, dass f tats¨ achlich ein lokales Minimum an der Stelle 0 hat. Dagegen hat g hier kein lokales Extremum, es handelt sich also tats¨ achlich nur um eine notwendige Bedingung. Wir wollen nun auch verkn¨ upfte Funktionen ableiten. Haben wir zwei Funktionen f und g : D → R, dann verstehen wir unter f + g die Funktion, die jeden Wert x ∈ D abbildet auf f (x) + g(x). Beachten Sie, dass f¨ ur eine feste Zahl x die Summe f (x)+g(x) eine Summe zweier Zahlen ist. Jetzt haben wir dar¨ uber auch die Summe zweier Funktionen erkl¨ a rt. Entsprechend ist (f · g)(x) := f (x) · g(x) ! und
f g
(x) :=
f (x) g(x) .
Satz 4.30 (Ableitungsregeln) Seien die Funktionen f und g : D → R differenzierbar in x0 ∈ D: Linearit¨ at der Ableitung (c ∈ R): (f + g) (x0 ) = f (x0 ) + g (x0 ),
(c · f ) (x0 ) = c · f (x0 ),
Produktregel: (f · g) (x0 ) = f (x0 ) · g(x0 ) + f (x0 ) · g (x0 ),
4.6 Stetigkeit und Differenzierbarkeit
251
Quotientenregel (falls g(x0 ) = 0):
f f (x0 ) · g(x0 ) − f (x0 ) · g (x0 ) (x0 ) = . g g(x0 )2
Beweis Im Folgenden sei (hn )∞ n=1 eine beliebige Nullfolge mit x0 + hn ∈ D. Die Linearit¨ at folgt aus den Eigenschaften des Folgengrenzwertes, z. B.: f (x0 + hn ) + g(x0 + hn ) − (f (x0 ) + g(x0 )) hn $ % f (x0 + hn ) − f (x0 ) g(x0 + hn ) − g(x0 ) = lim + n→∞ hn hn f (x0 + hn ) − f (x0 ) g(x0 + hn ) − g(x0 ) = lim + lim = f (x0 ) + g (x0 ). n→∞ n→∞ hn hn
lim
n→∞
Die Produktregel gilt unter Ausnutzung der Stetigkeit von g: lim
n→∞
f (x0 + hn )g(x0 + hn ) − f (x0 )g(x0 ) hn =0
f (x0 +hn )g(x0 +hn )−f (x0 )g(x0 +hn )+f (x0 )g(x0 +hn )−f (x0 )g(x0 ) = lim n→∞ hn f (x0 + hn ) − f (x0 ) g(x0 + hn ) − g(x0 ) = lim g(x0 + hn ) + f (x0 ) n→∞ hn hn = f (x0 )g(x0 ) + f (x0 )g (x0 ). Die Quotientenregel l¨ asst sich ¨ ahnlich beweisen, wir zeigen sie aber sp¨ ater als Folgerung aus der Kettenregel. Wir berechnen weitere Beispiele: Die Ableitung eines Polynoms p(x) = a0 + a1 x + a2x2 + · · · + an xn ist wegen der Linearit¨ at p (x) = a1 + 2a2 x + 3a3 x2 + · · · + nan xn−1 . Mittels Linearit¨ at und Quotientenregel erhalten wir: d x2 + 2x + 3 (2x + 2) · (3x + 4) − (x2 + 2x + 3) · 3 . = dx 3x + 4 (3x + 4)2 F¨ ur positives n kennen wir bereits die Ableitung von xn , n¨ amlich nxn−1 . Mit der Quotientenregel k¨ onnen wir diese auch f¨ ur negative Exponenten −n berechnen: d 1 0 − 1 · (nxn−1 ) d −n = = = (−n)x(−n)−1 . x n dx dx x x2n
252
4 Ausgew¨ ahlte Kapitel der Analysis
Satz 4.31 (Kettenregel) Sei g eine reelle Funktion auf D und f eine reelle Funktion, die auf dem Wertebereich von g definiert ist. Sei weiterhin g differenzierbar in x0 ∈ D und f differenzierbar in g(x0 ). Dann ist die Funktion (f ◦ g)(x) := f (g(x)) differenzierbar in x0 , und es gilt: [f ◦ g] (x0 ) = f (g(x0 ))g (x0 ). Man merkt sich die Kettenregel in der Form: a ¨ußere mal innere Ableitung“. ” Beweis Sei wieder (hn )∞ n=1 eine beliebige Nullfolge mit hn = 0. f (g(x0 + hn )) − f (g(x0 )) hn g(x0 + hn ) − g(x0 ) · = hn
f (g(x0 +hn ))−f (g(x0 )) , g(x0 +hn )−g(x0 ) f (g(x0 )),
falls g(x0 + hn ) = g(x0 ) falls g(x0 + hn ) = g(x0 ).
Falls g(x0 + hn ) = g(x0 ) ist, steht auf beiden Seiten der Gleichung eine Null, sonst erhalten wir durch K¨ urzen den Startterm. Aufgrund der Stetigkeit von g ist hn := g(x0 +hn )−g(x0 ) limn→∞ g(x0 +hn ) = g(x0 ). Mit hn → 0 strebt also auch ˜ ˜ gegen 0. Ist hn = 0, so sind wir im oberen Fall, und der Ausdruck hinter der ˜ n gleich geschweiften Klammer ist nach Definition von h ˜ n ) − f (g(x0 )) f (g(x0 ) + h f (g(x0 + hn )) − f (g(x0 )) . = ˜n g(x0 + hn ) − g(x0 ) h ˜ n = 0 (unterer Fall), so lautet der Ausdruck f (g(x0 )). Der gesamte AusIst h druck hinter der geschweiften Klammer strebt damit f¨ ur n → ∞ und damit f¨ ur ˜ hn → 0 und hn → 0 gegen f (g(x0 )), und es ist f (g(x0 + hn )) − f (g(x0 )) lim hn g(x0 + hn ) − g(x0 ) = lim f (g(x0 )) = g (x0 )f (g(x0 )). n→∞ hn
(f ◦ g) (x0 ) =
n→∞
d 1 1 Mit der Produktregel (A), der Kettenregel und der Ableitung dx x = − x2 (B) und anschließender Bildung des Hauptnenners (C) erhalten wir sofort die Quotientenregel: $ % (A) 1 1 d d 1 d f (x) f (x) · = f (x) · = + f (x) · dx g(x) dx g(x) g(x) dx g(x) (B)
=
(C) f (x)g(x) f (x) f (x)g (x) f (x)g(x) − f (x)g (x) −1 ·g (x) = − = . +f (x)· g(x) g(x)2 g(x)2 g(x)2 g(x)2
4.6 Stetigkeit und Differenzierbarkeit
253
Die Ableitung des Sinus ist der Kosinus. Auf das etwas m¨ uhsame Nachrechnen verzichten wir hier. Wegen cos(x) = sin(x + π/2) erhalten wir damit aber u ¨ ber die Kettenregel auch die Ableitung des Kosinus:
π! d
=1
π! d d = cos x + x+ cos(x) = sin x + dx dx 2 2 dx 2 ! π = cos x + = sin(x + π) = − sin(x). 2 π!
¨ Uber die Quotientenregel ergeben sich daraus weiterhin die Ableitungen des Tangens und Kotangens: d d sin(x) cos2 (x) + sin2 (x) tan(x) = = dx dx cos(x) cos2 (x)
(3.33)
d cos(x) − sin2 (x) − cos2 (x) d cot(x) = = dx dx sin(x) sin2 (x)
=
1 , cos2 (x)
(3.33)
= −
π x = (2k + 1) , 2
1 , sin2 (x)
x = kπ.
Mittels der Kettenregel k¨ onnen wir auch Ableitungen von Umkehrfunktionen berechnen. Allerdings ist die folgende Rechnung rein formal und nicht immer richtig, da die Kettenregel die Differenzierbarkeit der Funktionen voraussetzt, wir aber nichts u ¨ ber die Differenzierbarkeit der Umkehrfunktion wissen: ' & ' & 1 d −1 d x= f (f (x)) = f −1 (f (x)) · f (x) =⇒ f −1 (f (x)) = . 1= dx dx f (x) außere ¨ Ableitung
innere Ableitung
Mit y = f (x), also x = f −1 (y), erhalten wir die Darstellung
'
& f −1 (y) =
1 . f (f −1 (y))
Tats¨ achlich l¨ asst sich diese Regel sauber“ unter der Voraussetzung beweisen, ” dass f stetig und streng monoton auf einem Intervall [a, b] ist. Wir wenden die Regel auf einige Beispiele an: √ 1 F¨ ur x > 0 ist f −1 (x) := x n = n x die Umkehrfunktion zu f (x) = xn : d −1 1 1 d n1 x = f (x) = −1 = dx dx f (f (x)) n[f −1 (x)]n−1 1 1 1 1 1 − n−1 1 1 1 = = x n = x−(1− n ) = x n −1 . 1 n−1 = n−1 nx n n n n n[x n ] 1 1 d √ d 1 x = dx x 2 = 12 x− 2 = 2√ . Insbesondere ist dx x
Die Ableitung des Arcustangens f −1 (x) = arctan(x) erhalten wir u ¨ ber die des Tangens f (x) = tan(x): 1 d −1 d arctan(x) = f (x) = = dx dx tan (arctan(x))
1 1 cos2 (arctan(x))
254
4 Ausgew¨ ahlte Kapitel der Analysis (3.33)
=
=
1 sin2 (arctan(x))+cos2 (arctan(x)) cos2 (arctan(x))
=
1 sin2 (arctan(x)) cos2 (arctan(x))
+1
1 1 . = tan2 (arctan(x)) + 1 1 + x2
Zum Logarithmus: f −1 (x) = ln(x) ist die Umkehrfunktion von f (x) = exp(x) d exp(x) = exp(x): und dx d 1 d −1 1 1 ln(x) = f (x) = = = , x > 0. dx dx exp (ln(x)) exp(ln(x)) x Mit den Ableitungen von Exponentialfunktion und Logarithmus k¨ onnen wir nun auch Ausdr¨ ucke ableiten, bei denen die Variable in einem Exponenten auftritt. Dabei m¨ ussen wir darauf achten, dass der Logarithmus nur f¨ ur positive Zahlen definiert ist: d d x Kettenregel = ln(a) exp(x ln(a)) = ax ln(a), a = exp(x ln(a)) dx dx Ketten- und x Produktregel
a > 0. (4.13)
x!
d d = exp(x ln(x)) = (ln(x) + 1)xx x exp(x ln(x)) = ln(x) + dx dx x f¨ ur x > 0. Die im Laufe des Kapitels berechneten Ableitungen und weitere sind in Tabelle 4.4 zusammengefasst. Unter Verwendung dieser Funktionen und der Ableitungsregeln k¨ onnen Sie mit dem Algorithmus 4.7 vergleichsweise leicht die Ableitungen von sehr kompliziert aussehenden Funktionen berechnen (was Sie aber in der Informatik so gut wie nie machen m¨ ussen). Aufgabe 4.18 Berechnen Sie die Ableitungen der folgenden Funktionen: a) f (x) = x2 + 3x + 1, b) f (x) = sin(x) cos(x), c) f (x) = x
x+1 x2 +1 , 2
, e) f (x) = exp(cos(x)), f ) f (x) = sin(3x + x), d) f (x) = e +cos(x) x2 g) f (x) = [sin(3x)]x , h) f (x) = (xx )x , i) f (x) = sin(x) ln(x), j) f (x) = ex arctan(x), k) f (x) = ln(x6 (x3 + 2)), l) f (x) = 10 k=1 sin(kx). Wir haben, z. B. beim Master-Theorem, sowohl gegen Polynome als auch atzt. Daher haben wir uns zu Beginn gegen den Logarithmus log2 (n) abgesch¨ dieses Unterkapitels die Aufgabe gestellt herauszufinden, ob eine Laufzeit in O(n) besser oder schlechter als eine Laufzeit in O(log2 (n)) ist. Dazu betrachten wir die Funktionen f (x) = x und g(x) = log2 (x) = ln(x) ln(2) mit Ableitungen 1 1 ur x > ln(2) , also z. B. f¨ ur x ≥ 2. Auf [2, ∞[ f (x) = 1 > g (x) = ln(2)·x f¨ w¨ achst f also schneller als g. Außerdem ist an der Stelle 2 der Funktionswert von f gr¨ oßer als der von g, denn f (2) = 2 > 1 = g(2). Damit ist anschaulich klar, dass g(x) ≤ f (x) f¨ ur x ≥ 2 gilt. Wir werden das mittels Integration sp¨ ater auch noch formal nachrechnen. Setzen wir f¨ ur x wieder n ein, dann erhalten
4.6 Stetigkeit und Differenzierbarkeit
255
Algorithmus 4.7 Berechnung der Ableitung der Funktion f (x) procedure Ableiten(f (x)) if f (x) = c, c ∈ R then return 0 if f (x) = x then return 1 if f (x) ist in Tabelle 4.4 then return Ableitung aus Tabelle 4.4 if f (x) = g(x) + h(x) then return Ableiten(g(x)) + Ableiten(h(x)) if f (x) = g(x) · h(x) then return Ableiten(g(x)) · h(x) + g(x) · Ableiten(h(x)) if f (x) = g(x)/h(x) then return (Ableiten(g(x)) · h(x) − g(x) · Ableiten(h(x))) / h(x)2 if f (x) = g(x)h(x) then return Ableiten(exp(ln(g(x)) · h(x))) if f (x) = g(h(x)) then g (x) := Ableiten(g(x)) return g (h(x)) · Ableiten(h(x)) else Fehler: Ableitung unbekannt.
wir (log2 (n))∞ n=1 ∈ O(n). Aber wir wissen jetzt noch nicht, wie viel schneller uber einer O(n)-Laufzeit ist. Vielleicht untereine O(log2 (n)) Laufzeit gegen¨ scheiden sich die Laufzeiten nur durch eine Konstante? Eine st¨ arkere Aussage log2 (n) ∞ onnten, also limn→∞ n = 0. w¨ are, wenn wir (log2 (n))n=1 ∈ o(n) zeigen k¨ Leider sind aber sowohl der Grenzwert des Z¨ ahlers als auch der des Nenners ∞ – atze nicht anwendbar. wir sprechen vom Typ ∞ ∞ , und damit sind die Grenzwerts¨ An dieser Stelle hilft wieder die Ableitung. Das ist die Aussage des Satzes von , sondern L’Hospital, den wir, um es einfach zu halten, aber nicht f¨ ur den Fall ∞ ∞ ochten. Ein Grenzwert vom Typ ∞ l¨ a sst sich durch f¨ ur den Fall 00 motivieren m¨ ∞ Verwendung von Kehrwerten so umschreiben, dass Z¨ ahler und Nenner gegen 0 konvergieren, z. B.: 1 log2 (n) n = lim . lim 1 n→∞ n→∞ log2 (n) n Typ ∞/∞ Typ 0/0
(n) mit Hilfe von Ableitungen berechnen, wobei Wir wollen also limn→∞ fg(n) limn→∞ f (n) = limn→∞ g(n) = 0 sei. Da es die Stelle ∞ in R nicht gibt, k¨ onnen wir dort auch nicht ableiten. Deshalb u ¨bertragen wir den Grenzwert ¨ im Unendlichen auf die Stelle null, indem wir f¨ ur die folgende Uberlegung die ˜ Funktionen f und g f¨ ur x = 0 mit Hilfsfunktionen f und g˜ 1 1 1 1 und g(x) = g˜ , bzw. f˜(x) := f und g˜(x) := g f (x) = f˜ x x x x
256
4 Ausgew¨ ahlte Kapitel der Analysis
Tab. 4.4 Wichtige Ableitungen
Ableitung f (x)
Funktion f (x) xn ,
x ∈ R, n ∈ N
n · xn−1
xa ,
x > 0, a ∈ R
a · xa−1
ax ,
a > 0, x ∈ R
ax · ln(a)
x∈R
exp(x), ln(x),
exp(x)
x ∈ ]0, ∞[
1 x
sin(x), x ∈ R
cos(x)
cos(x), x ∈ R
− sin(x)
tan(x), x ∈ R, x =
π (2k 2
1 cos2 (x) − sin21(x) √ 1 1−x2 1 − √1−x 2 1 1+x2 1 − 1+x 2
+ 1)
cot(x), x ∈ R, x = kπ arcsin(x),
x ∈ ] − 1, 1[
arccos(x),
x ∈ ] − 1, 1[
arctan(x),
x∈R
arccot(x),
x∈R
umschreiben. Dabei seien die Funktionen f˜ und g˜ auch f¨ ur x = 0 definiert und in einem Intervall um Null differenzierbar mit stetiger Ableitung. Insbesondere sind dann beide Funktionen an der Stelle null stetig, und f˜(0) = f˜ limn→∞ n1 = limn→∞ f˜ n1 = limn→∞ f (n) = 0, sowie analog g˜(0) = 0. Außerdem erhalten wir mit der Kettenregel d 1 1 −1 1 −1 ˜ =f · 2 und g˜ (x) = g · 2. (4.14) f f (x) = dx x x x x x Damit k¨ onnen wir den Grenzwert berechnen, indem wir Z¨ ahler und Nenner zu Differenzenquotienten ausbauen und die Existenz der Ableitung nutzen: =0
1 f˜( n )−f˜(0) 1 f˜ n1 f˜ n1 − f˜(0) f (n) n = lim = lim 1 = lim 1 lim 1 ˜( n )−˜ g (0) n→∞ g(n) n→∞ g n→∞ g n→∞ g ˜ n ˜ n − g˜(0) 1 n
=0
limn→∞ =
1 f˜( n )−f˜(0) 1 n
f˜ (0) = g˜ (0)
f˜ ,˜ g stetig
limn→∞ f˜
1 n 1
= g ˜( 1 )−˜ g (0) limn→∞ g˜ n limn→∞ n 1 n f˜ n1 (4.14) f (n) · (−n2 ) f (n) = lim 1 = lim = lim . n→∞ g n→∞ g (n) · (−n2 ) n→∞ g (n) ˜ n Die verwendeten Voraussetzungen lassen sich abschw¨ achen zu:
4.6 Stetigkeit und Differenzierbarkeit
257
Satz 4.32 (L’Hospital) Seien die Funktionen f und g auf einem Intervall [a, ∞[ differenzierbar. Weiterhin sei dort g (x) = 0. Ist a) limn→∞ f (n) = 0 und limn→∞ g(n) = 0 oder b) limn→∞ f (n) = ±∞ und limn→∞ g(n) = ±∞
(n) als reelle Zahl oder uneigentlich und existiert der Grenzwert limn→∞ fg (n) (±∞), so gilt: f (n) f (n) lim = lim . n→∞ g(n) n→∞ g (n)
Obwohl wir die Grenzwerte von Folgen berechnen, ben¨ otigen wir f¨ ur die Ableitung Funktionen, die auf [a, ∞[ und nicht nur auf N definiert sind. Wir k¨ onnen jetzt ausrechnen, dass (log2 (n))∞ n=1 ∈ o(n) ist: log2 (n) n→∞ n lim
(3.32)
=
ln(n) n→∞ ln(2) · n lim
Typ ∞/∞
=
lim
n→∞
1 n
ln(2)
= 0.
Wenn wir beispielsweise ein Sortierverfahren haben, dessen Laufzeit wie beim ur große Werte von n erheblich Heap-Sort in O(n log2 (n)) liegt, dann ist es f¨ schneller als ein Verfahren, dessen Laufzeit in Θ(n2 ) liegt. Eine weitere, f¨ ur die Einsch¨ atzung von Laufzeiten wichtige Beziehung ist, dass nk =0 n→∞ 2n
ur alle k ∈ N, d. h. lim nk = o (2n ) f¨
gilt. Damit ist 2n f¨ ur große Werte von n viel gr¨ oßer als jedes Polynom nk (vgl. osen Seite 5). Probleme, die sich mit einem (polynomialen) Aufwand in O(nk ) l¨ lassen, sind viel angenehmer als Probleme, f¨ ur die nur Algorithmen bekannt otigen. sind, die einen exponentiellen Aufwand in O(2n ) ben¨ Mittels mehrfacher Anwendung dieses Satzes f¨ ur den Fall ∞/∞ k¨ onnen wir jetzt unseren gesuchten Grenzwert ausrechnen. Dazu benutzen wir (4.13) f¨ ur x d x ur die Ableitungen im Nenner: a = 2, also dx 2 = ln(2) · 2 , f¨ lim
n→∞
nk knk−1 k(k − 1)nk−2 k! 1 = lim = lim = · · · = lim · = 0. n n n→∞ ln(2) · 2 n→∞ ln(2)2 · 2n n→∞ ln(2)k 2n 2 konstant 2
durch AbleWir wissen bereits, dass wir den Grenzwert limn→∞ 2n4n+3n+1 2 +2 ahler sen der Faktoren zu den h¨ ochsten n-Potenzen als 24 = 12 erhalten. Da Z¨ und Nenner bestimmt divergent sind, k¨ onnen wir jetzt aber auch den Satz von L’Hospital f¨ ur den Typ ∞/∞ anwenden: 2n2 + 3n + 1 4n + 3 4 1 = lim lim = . n→∞ n→∞ 4n2 + 2 8n n→∞ 8 2 lim
258
4 Ausgew¨ ahlte Kapitel der Analysis
Aufgabe 4.19 √ Zeigen Sie f¨ ur k ∈ N mit dem Satz von L’Hospital, dass O(lnk (n)) ⊂ o( n). Wir kommen auf die Fehlerabsch¨ atzung (4.1) von Seite 204 zur¨ uck. Hier haben wir den Fehler betrachtet, den wir bei Berechnung eines Funktionswertes des Sinus mit einem Algorithmus sinus machen. Wir k¨ onnen den Sinus programmieren, indem wir viele Funktionswerte in einer Tabelle speichern und die nicht gespeicherten Werte dar¨ uber ann¨ ahern. Wir k¨ onnen aber auch den Sinus durch eine einfach auszuwertende Funktion wie ein Polynom ersetzen, die ungef¨ ahr die gleichen Funktionswerte hat. Sei dazu f (z. B. der Sinus) n-mal differenzierbar an einer Stelle x0 . Das Taylor-Polynom f (2) (x0 ) f (3) (x0 ) (x − x0 )2 + (x − x0 )3 + 2 6 n f (n) (x0 ) f (k) (x0 ) ··· + (4.15) (x − x0 )n = (x − x0 )k n! k!
pn (x) := f (x0 ) + f (x0 )(x − x0 ) +
k=0
hat an der Stelle x0 den gleichen Funktionswert wie f . Das sehen wir sofort, indem wir x = x0 einsetzen, weil alle Summanden außer dem ersten durch onnen aber auch zeigen, Multiplikation mit (x0 − x0 ) = 0 zu null werden. Wir k¨ dass alle Ableitungen bis zur n-ten an der Stelle x0 den gleichen Wert wie die entsprechende Ableitung von f haben. Mit di−1 di−2 di k k−1 (x − x ) = k(x − x ) = k(k − 1)(x − x0 )k−2 = . . . 0 0 dxi dxi−1 dxi−2 ur i ≤ k = k(k − 1) · · · (k − i + 1)(x − x0 )k−i f¨ und
di (x dxi
pn (x) =
− x0 )k = 0 f¨ ur i > k erhalten wir mit den Konstanten
n n f (k) (x0 ) f (k) (x0 ) (x) = k(x − x0 )k−1 , p k(k − 1)(x − x0 )k−2 , n k! k!
k=1 n
p(i) n (x) =
k=i l:=k−i
=
f (k) (x0 ) : k!
n−i l=0
k=2
f
(k)
(x0 ) k(k − 1) · · · (k − i + 1)(x − x0 )k−i k!
n−i f (l+i) (x0 ) f (l+i) (x0 ) (l+i)(l+i−1) · · · (l+1)(x−x0)l = (x−x0)l . (l + i)! l! l=0
(i)
ur 0 ≤ i ≤ n, da nur der Summand f¨ ur l = 0 unDamit ist pn (x0 ) = f (i) (x0 ) f¨ gleich null ist. Durch das gleiche Ableitungsverhalten in x0 sind die Funktionen f und pn auch an Stellen x sehr a ¨hnlich, die nicht allzu weit von x0 entfernt sind. So beschreibt f¨ ur n = 1 das Taylor-Polynom die Tangente an den Graphen ¨ wird um so besser, je gr¨ oßer n von f an der Stelle x0 . Die Ubereinstimmung asst gew¨ ahlt wird. Der Fehler, den man macht, wenn man f durch pn ersetzt, l¨ sich angeben:
4.6 Stetigkeit und Differenzierbarkeit
259
Satz 4.33 (Taylor) Sei x0 ∈ ]a, b[ und f auf ]a, b[ (n + 1)-mal differenzierbar, so dass f (n+1) auf dem Intervall stetig ist. Weiterhin sei pn das Taylor-Polynom (4.15). Die Aussage des Satzes von Taylor ist dann, dass es f¨ ur jedes x ∈ ]a, b[ eine Stelle ξ zwischen x und x0 gibt, so dass f (x) = pn (x) +
f (n+1) (ξ) (x − x0 )n+1 . (n + 1)!
angig von n und ξ n¨ aherungsweise durch eine Wenn z. B. f (n+1) (ξ) unabh¨ Konstante ersetzt werden kann, dann wird die Abweichung |f (x) − pn (x)| umso aßig klein ist) und kleiner, je n¨ aher x bei x0 liegt (so dass (x − x0 )n+1 betragsm¨ je gr¨ oßer n ist, da der Faktor (n + 1)! im Nenner im Vergleich zum Z¨ ahler sehr groß wird, siehe Abbildung 4.14. Das sehen wir uns noch genauer an. 2
2
2
2
0
0
0
0
−2 −5
−2 5 −5
0
0
−2 5 −5
0
−2 5 −5
0
5
Abb. 4.14 Taylor-Polynome f¨ ur sin(x) zu x0 = 0 und n = 1, n = 3, n = 5 und n = 7. Der Sinus ist zum Vergleich gestrichelt eingezeichnet.
Der griechische Buchstabe ξ (xi) erinnert an zwischen“. Die Lage der Stelle ” angt von allen Parametern (x, x0 , n, f ) ab. Der Beweis ξ zwischen x und x0 h¨ des Satzes von Taylor ist zwar nicht schwierig, ben¨ otigt aber einige vorbereitende Aussagen, auf die wir hier nicht eingehen m¨ ochten. Zwei unterschiedliche Beweise finden Sie z. B. in (Goebbels und Ritter, 2013, S. 358). Wir k¨ onnen nun die Funktion sinus mittels eines Taylor-Polynoms pn zu x0 = 0 implementieren. Der Satz von Taylor erm¨ oglicht zudem eine Einsch¨ atzung der ( ( beiden Fehler in (4.1). Der erste Term (sin π4 − sin(0,78125)( beschreibt die Abweichung der Sinus-Werte, wenn statt π4 das Argument 0,78125 eingesetzt wird. Mit dem Satz von Taylor f¨ ur n = 0 k¨ onnen wir sin(x) als sin(x) = sin
π π! x − 4 + cos(ξ) 4 1!
π 4
und x schreiben und erhalten ( ( (( 0,78125 − π (( ( ( ! π( π ( ( ( 4 ( − sin(0,78125)( = (( |cos(ξ)| ≤ 0,78125 − (sin ( (. ( 4 1! 4
f¨ ur ein ξ zwischen
≤1
(4.16)
260
4 Ausgew¨ ahlte Kapitel der Analysis
Was wir hier f¨ ur konkrete Zahlen gerechnet haben, gilt allgemein: Die Funktionswerte des Sinus an Stellen x und x ˜ unterscheiden sich h¨ ochstens um |x − x ˜|. Der zweite Term |sin (0,78125) − sinus(0,78125)| beschreibt den vom Algorithmus sinus, der aus der Berechnung von pn zu x0 = 0 bestehen soll, verursachten Fehler. F¨ ur eine weitere Stelle ξ, die jetzt zwischen 0 und 0,78125 liegt, gilt nach (n+1) dem Satz von Taylor sin (0,78125) = pn (0,78125) + sin(n+1)!(ξ) (0,78125 − 0)n+1 : |sin (0,78125) − sinus(0,78125)| ( ( ( ( sin(n+1) (ξ) n+1 ( − pn (0,78125)(( (0,78125 − 0) = (pn (0,78125) + (n + 1)! ( (n+1) ( ( sin ( 0,78125n+1 (ξ) n+1 ( ( = ( (0,78125−0) ( ≤ (n + 1)! . (n + 1)! Der Fehler, den sinus f¨ ur ein beliebiges Argument x macht, ist also h¨ ochstens |x|n+1 , bei (nur) n = 6 und x = 0,78125 also maximal ca. 0,000035245 = (n+1)! ucksichtigt, die 3,5245 · 10−5 . Dabei haben wir allerdings die Fehler nicht ber¨ beim Rechnen mit Fließkommazahlen entstehen. Wenn wir diese ignorieren, dann kann der Fehler f¨ ur n → ∞ beliebig klein werden. Bei x = 0,78125 wirkt sich |x| < 1 g¨ unstig auf die Fehlerschranke aus. Aber selbst f¨ ur ein beliebiges |x|n+1 = 0, denn zu x gibt es ein n0 ∈ N mit n0 > |x|, so x ∈ R ist limn→∞ (n+1)! dass f¨ ur n > n0 gilt: 0≤
$ %n+1 |x|n+1 |x|n+1 |x| 1 |x|n+1 ≤ n+1−n0 +1 = · 1−n0 . ≤ (n + 1)! n0 (n0 + 1) · · · (n + 1) n0 n0 n0 n+1−n0 +1 Faktoren ≥n0
konstant
Der Quotient aus |x| und n0 ist kleiner als 1, so dass der Term auf der rechten Seite tats¨ achlich f¨ ur n → ∞ gegen null strebt. Damit liegt die Idee nahe, den Sinus mittels n → ∞ exakt als Polynom mit unendlichem Grad zu schreiben, n¨ amlich die Funktionswerte u ¨ ber eine Reihe auszurechnen. F¨ ur jedes x ∈ R ist bei Wahl von x0 = 0 (in 0 sind die geradzahligen Ableitung des Sinus alle null) sin(x) =
∞ ∞ 1 1 sin(k) (0) x2k+1 1 (−1)k (x − 0)k = x − x3 + x5 ± · · · = . k! 1! 3! 5! (2k + 1)!
k=0
k=0
Eine solche Darstellung einer Funktion u ¨ ber eine Reihe heißt Potenzreihe. Der Kosinus l¨ asst sich genau wie der Sinus u ¨ ber die Ableitungen an der Stelle x0 = 0 als Potenzreihe schreiben. Man sagt auch, dass die Potenzreihe um die Stelle x0 entwickelt wird. Beim Kosinus sind die ungradzahligen Ableitungen ± sin(x) an der Stelle 0 alle null. Daher ist f¨ ur jedes x ∈ R (vgl. Abbildung 4.15) cos(x) =
∞ ∞ cos(2k) (0) x2k x2 x4 x6 (−1)k (x − 0)2k = 1 − + − ± ··· = . (2k)! 2! 4! 6! (2k)!
k=0
k=0
4.6 Stetigkeit und Differenzierbarkeit
261
Da alle Ableitungen der Exponentialfunktion an der Stelle x0 = 0 gleich exp(0) = 1 sind, entsteht die Potenzreihe (x ∈ R) ∞ ∞ exp(k) (0) xk k exp(x) = (x − 0) = . k! k! k=0
k=0
In Beispiel 4.24 haben wir die Euler’sche Zahl e erhalten, indem wir in die Potenzreihe der Exponentialfunktion den Wert 1 eingesetzt haben: ∞ ∞ 1k 1 e = exp(1) = = . k! k! k=0
2
2
0
0
k=0
150 100 50
−2 −5
0
5
−2 −5
0
5
0 −5
0
5
Abb. 4.15 Von links nach rechts: Taylor Polynome p6 (durchgezeichnet) zu Sinus, Kosinus und zur Exponentialfunktion (zum Vergleich gestrichelt) f¨ ur x0 = 0.
Zum Abschluss des Abschnitts u ochten wir noch ganz ¨ ber die Ableitung m¨ kurz auf die Anwendung des Satzes von Taylor bei der Kurvendiskussion eingehen. In (4.16) haben wir den Satz von Taylor f¨ ur den Fall n = 0 benutzt. In diesem Fall nennt man ihn auch Mittelwertsatz: f (x) = f (x0 ) +
f (ξ) f (x) − f (x0 ) = f (ξ). (x − x0 )1 ⇐⇒ 1! x − x0
Der Mittelwertsatz besagt also, dass die Steigung der Sekante durch die Punkte (x, f (x)) und (x0 , f (x0 )) auch als Steigung von f an einer Stelle ξ zwischen x und x0 angenommen wird, siehe Abbildung 4.16. y
f(b)
Abb. 4.16 Mittelwertsatz: Die Steigung f (b)−f (a) der Sekante wird an einem Zwib−a
f(a)
a
ξ
b
x
schenpunkt ξ angenommen: f (ξ) = .
f (b)−f (a) b−a
Anschaulich ist klar, wie sich die Ableitung auf das Wachstumsverhalten einer Funktion auswirkt. Mit dem Mittelwertsatz k¨ onnen wir das jetzt auch beweisen. ur alle x ∈]a, b[, Ist f auf dem Intervall ]a, b[ differenzierbar mit f (x) ≥ 0 f¨
262
4 Ausgew¨ ahlte Kapitel der Analysis
dann ist f auf dem Intervall monoton wachsend (vgl. Seiten 179, 207): F¨ ur x0 , x1 ∈ ]a, b[ mit x1 > x0 erhalten wir aus dem Mittelwertsatz f (x1 ) − f (x0 ) = f (ξ)(x1 − x0 ) ≥ 0 =⇒ f (x1 ) ≥ f (x0 ). Entsprechend erhalten wir mit f (x) ≤ 0, dass f monoton fallend ist: f (x1 ) ≤ ur x1 > x0 . Das war uns anschaulich v¨ ollig klar, da bei einer positiven f (x0 ) f¨ Steigung die Funktion w¨ achst und bei einer negativen die Funktion f¨ allt. Anschaulich haben wir links von einem lokalen Maximum eine positive, rechts davon eine negative Steigung, entsprechend umgekehrt bei einem lokalen Minimum – und nach Satz 4.29 ist die Steigung an der Extremstelle null. Mit dem Satz von Taylor k¨ onnen wir die notwendige Bedingung aus Satz 4.29 zu einer hinreichenden Bedingung erweitern: Satz 4.34 (Hinreichende Bedingung f¨ ur ein lokales Extremum) Sei f zweimal differenzierbar auf ]a, b[, so dass f auf ]a, b[ stetig ist. Weiterhin sei x0 ∈ ]a, b[ und f (x0 ) = 0. Dann gilt: Ist f (x0 ) > 0, so hat f ein lokales Minimum in x0 . Ist f (x0 ) < 0, so hat f ein lokales Maximum in x0 . Beweis Da f (x0 ) = 0 ist, ergibt sich aus dem Satz von Taylor f¨ ur n = 2 f (x) = f (x0 ) + 0 +
f (ξ) (x − x0 )2 2
(4.17)
mit ξ zwischen x und x0 . Sind wir mit x nah genug bei x0 , dann hat wegen der Stetigkeit von f der Funktionswert f (ξ) das gleiche Vorzeichen wie f (x0 ), ur x = x0 . Bei f (x0 ) > 0 siehe Aufgabe 4.17. Außerdem ist (x − x0 )2 > 0 f¨ ist damit der rechte Term in (4.17) gr¨ oßer null, also f (x) > f (x0 ), bei x0 liegt ein lokales Minimum. Gilt f (x0 ) < 0, so ist damit der rechte Term in (4.17) kleiner null, also f (x) < f (x0 ), bei x0 liegt ein lokales Maximum.
Beispiel 4.35 (Hinreichende Bedingung) Wir diskutieren die Funktionen f (x) = x2 ≥ 0 und g(x) = x4 ≥ 0. Beide besitzen an der Stelle 0 ein lokales Minimum mit f (0) = g(0) = 0. Daher sind f (x) = 2x und g (x) = 4x3 hier null. Da f (0) = 2 > 0 ist, finden wir das lokale Minimum von f mit der hinreichenden Bedingung. Allerdings ist g (0) = 0, so dass die Bedingung hier nicht greift, sie ist hinreichend, aber nicht notwendig.
4.7 Integral
4.7
263
Integral
n 1 Beim randomisierten Quicksort hatten wir es mit der Summe k=1 k in der Ungleichung (4.11) zu tun. Wir k¨ onnen den Wert der Summe als Fl¨ acheninhalt ohe k1 . Setzen wir auffassen: k1 ist der Inhalt eines Rechtecks mit Breite 1 und H¨ diese Rechtecke f¨ ur k = 1, . . . , n nebeneinander, dann erhalten wir die Fl¨ ache ur k − 1 ≤ x < k zwischen x-Achse und Graph der Funktion f mit f (x) = k1 f¨ auf dem Intervall [0, n], siehe Abbildung 4.17. 1 1
2
3
4
n=5
Abb. 4.17
P5
1 k=1 k
als Fl¨ ache
Bei der Integralrechnung berechnen wir die Gr¨ oße der Fl¨ ache zwischen xAchse und Funktionsgraph einer Funktion f auf einem Intervall [a, b] und be2b 28 ache des Rechtzeichnen sie mit a f (x) dx. Beispielsweise ist 2 5 dx = 30 die Fl¨ ecks mit Kantenl¨ angen 8 − 2 = 6 und 5. Definition 4.36 (Integral) Sei f eine auf [a, b] stetige Funktion. Der Grenzwert lim
n−1
n→∞ k=0
b−a ·f n
a+k·
b−a n
Breite Δx H¨ ohe eines Rechtecks
2b heißt das Integral von f auf [a, b] und wird mit a f (x) dx bezeichnet (s. o.). Die Funktion f heißt in diesem Zusammenhang der Integrand.
a
+
b −
Abb. 4.18 Die linke Kante jeder Fl¨ ache ragt genau bis an den Funktionsgraphen. Die Fl¨ acheninhalte oberhalb der x-Achse geh¨ oren zu positiven Funktionswerten und werden addiert. Davon werden die Inhalte der Fl¨ achen unter der x-Achse, die zu negativen Funktionswerten geh¨ o ren, subtrahiert. F¨ u r n = 17 entsteht damit die Summe ´ Pn−1 b−a ` b−a . k=0 n f a + k · n
Wir erhalten also den Fl¨ acheninhalt als Grenzwert einer Folge. Das n-te Folgenglied ist die Summe der Gr¨ oßen von Rechteckfl¨ achen, wobei die n Rechtecke in unserer Definition alle die gleiche Breite Δx = b−a n haben, siehe Abbildung 4.18. Das dx in der Schreibweise des Integrals deutet dieses Δx an. Als H¨ ohe des
264
4 Ausgew¨ ahlte Kapitel der Analysis
, dieses Rechteck k-ten Rechtecks w¨ ahlen wir den Funktionswert f a + k · b−a n b−a ·f a + k · . Damit ist anschaulich klar, dass hat also den Fl¨ acheninhalt b−a n n mit fortschreitendem n die Fl¨ ache unter dem Funktionsgraphen immer besser angen¨ ahert wird. In der Definition wird davon ausgegangen, dass der Grenzwert tats¨ achlich existiert. Das kann man unter Ausnutzung der Stetigkeit nachrechnen. Es ist nicht schwierig, aber etwas technisch, so dass wir hier darauf verzichten. Die Voraussetzung l¨ asst sich sogar noch abschw¨ achen. Der Grenzwert und damit das Integral existieren auch dann noch, wenn f auf [a, b] beschr¨ ankt und an allen bis auf maximal abz¨ ahlbar unendlich vielen Stellen stetig ist (vgl. Kapitel 3.7). k¨ onnen negativ sein und geh¨ oren dann zur Funktionswerte f a + k · b−a n Berandung von Fl¨ achen unterhalb der x-Achse. Die Definition f¨ uhrt dazu, dass Fl¨ achenanteile oberhalb der x-Achse als positiv und Fl¨ achenanteile unterhalb der x-Achse als negativ angesehen werden, siehe Abbildung 4.19. Die Summe dieser Fl¨ acheninhalte ergibt dann das Integral. Beispielsweise schließt der Sinus auf dem Periodenintervall [0, 2π] mit der x-Achse den gleichen Fl¨ acheninhalt oberhalb wie unterhalb der x-Achse ein (siehe Abbildung 3.10 auf Seite 183), 2 2π 24 ache bei 1 −2 dx = (4 − 1) · (−2) = −6 also ist 0 sin(x) dx = 0. Da die Fl¨ unterhalb der x-Achse liegt, ist das Ergebnis negativ.
+
Rb Abb. 4.19 Das Integral a f (x) dx ist die Summe der Inhalte der beiden Fl¨ achen oberhalb der x-Achse abz¨ uglich des Inhalts der Fl¨ ache unterhalb der Achse.
+ −
a
b
b−a b−a Ist f (x) ≤ g(x) f¨ ur alle x ∈ [a, b] (also a ≤ b), so ist n−1 k=0 n f a + k · n n−1 b−a b−a ¨ ≤ , so dass wir beim Ubergang zum Grenzwert f¨ ur k=0 n g a + k · n n → ∞ direkt die Monotonie des Integrals erhalten: 3 b 3 b f (x) dx ≤ g(x) dx (4.18) a
a
Ebenfalls direkt aus der Definition (und passend zur Anschauung des Fl¨ acheninhaltes) erhalten wir u atze (analog zur entsprechen¨ ber die Grenzwerts¨ den Aussage f¨ ur die Ableitung) die Linearit¨ at des Integrals (c ∈ R): 3 b 3 b 3 b 3 b 3 b f (x) + g(x) dx = f (x) dx + g(x) dx, c · f (x) dx = c · f (x) dx. a
a
a
a
a
Damit k¨ onnen wir ein Integral in einfachere Bestandteile zerlegen. Mit der Linearit¨ at und der Monotonie erhalten wir aus −|f (x)| ≤ f (x) ≤ |f (x)| f¨ ur die Integration u atzung ¨ber [a, b] die Absch¨ 3 b 3 b 3 b 3 b |f (x)| dx = −|f (x)| dx ≤ f (x) dx ≤ |f (x)| dx, − a
a
a
a
4.7 Integral
265
2b 2b 2b 2b 2b also a f (x) dx ≤ a |f (x)| dx und a f (x) dx ≥ − a |f (x)| dx, d. h. − a f (x) dx 2b ≤ a |f (x)| dx, so dass wir die Dreiecksungleichung f¨ ur die Integration erhalten: (3 b ( 3 b ( ( ( f (x) dx(( ≤ |f (x)| dx. ( a
a
b
a
Rc Abb. 4.20 Das Integral a f (x) dx ist der Inhalt der markierten Fl¨ ache zwischen Funktionsgraph und x-Achse. Sie Rentsteht auch als b Summe der Fl¨ acheninhalte a f (x) dx und Rc Rb f (x) ist a f (x) dx die Diffeb R c dx. Andererseits Rc renz a f (x) dx − b f (x) dx
c
Wir d¨ urfen auch das Integrationsintervall zerteilen: Der Inhalt der Fl¨ ache von a bis b plus der Inhalt der Fl¨ ache von b bis c ist gleich dem Fl¨ acheninhalt der Fl¨ ache von a bis c, siehe Abbildung 4.20. F¨ ur a ≤ b ≤ c gilt also: 3 b 3 c 3 c f (x) dx + f (x) dx = f (x) dx. a
b
a
Diese Gleichung ist aber auch f¨ ur a ≤ c ≤ b richtig, wenn wir, wie es u ¨ blich ist, 3 c 3 b f (x) dx := − f (x) dx b
c
definieren. Vom Inhalt der von a bis b reichenden Fl¨ ache wird dann der Inhalt der ¨ von c bis b reichenden Fl¨ ache abgezogen. Ubrig bleibt der Inhalt der Fl¨ ache von a bis c. W¨ ahrend wir in Definition 4.36 von einem Intervall [a, b], also von a ≤ b, ausgingen, d¨ urfen wir jetzt auch eine untere Integrationsgrenze verwenden, die gr¨ oßer als die obere ist. Dabei m¨ ussen wir aber bei Absch¨ atzungen wegen des Minuszeichens aufpassen. Ist a ≤ b, so erhalten wir beispielsweise (3 a ( ( 3 b ( (3 b ( 3 b 3 a ( ( ( ( ( ( ( f (x) dx( = (− f (x) dx( = ( f (x) dx( ≤ |f (x)| dx = − |f (x)| dx . ( ( ( ( ( ( b a a a b R R =| ab |f (x)| dx| =| ba |f (x)| dx| Unabh¨ angig von der Lage der Grenzen k¨ onnen wir also schreiben: (3 b ( (3 b ( ( ( ( ( ( (≤( (. f (x) dx |f (x)| dx ( ( ( ( a
(4.19)
a
Beispiel 4.37 (Einige Integrale auf [a, b], 0 ≤ a ≤ b) Integrieren wir eine konstante Funktion f (x) = 1, so erhalten wir den Fl¨ acheninhalt eines Rechtecks mit Kantenl¨ angen b − a und 1:
3
b
1 dx = lim a
n−1
n→∞ k=0
b−a b−a ·1=n· = b − a. n n
266
4 Ausgew¨ ahlte Kapitel der Analysis
Mit der Linearit¨ at erhalten wir das im Folgenden h¨ aufig benutze Integral u ¨ber eine Konstante c: 3 b 3 b c dx = c · 1 dx = c · (b − a). (4.20) a
a
2b
20 2b 2b 2a Wir berechnen das Integral a x dx = a x dx + 0 x dx = 0 x dx − 0 x dx, das die Differenz zweier Dreiecksfl¨ achen ist: n−1 $ %
3 b n−1 b−0 b2 b−0 x dx = lim k 2 0+k = lim n→∞ n→∞ n n n 0 k=0 k=1 n−1
1 (1.8) 2 1 (n − 1) · n n2 − n b2 = b2 lim 2 k = b lim 2 · = . = b2 lim 2 n→∞ n n→∞ n n→∞ 2n 2 2 k=1
Entsprechend ist
2a 0
3
x dx =
a2 2 ,
3
b
3
b
a
x dx −
x dx = a
und wir erhalten
0
In analoger Weise berechnen wir
x dx = 0
2b a
b2 a2 − . 2 2
x2 dx:
n−1
2 b b x dx = lim k n→∞ n n 0 k=0 n−1
b3 2 Aufgabe 1.10 b3 2n3 − 3n2 + n 2b3 b3 = lim k = lim = = , n→∞ n3 n→∞ n3 6 6 3
3
b
2
k=0
so dass wir wieder durch Differenzbildung erhalten: 3 b 3 b 3 a b3 a3 x2 dx = x2 dx − x2 dx = − . 3 3 a 0 0
a
b
b
b
Rb Abb. 4.21 Die drei Integrale a 1 dx, Rb Rb 2 x dx und 0 x dx aus Beispiel 4.37 0
Berechnen wir nicht den Grenzwert, sondern w¨ ahlen wir einen großen Wert f¨ ur n, dann erhalten wir einen N¨ aherungswert f¨ ur das Integral. So k¨ onnen wir das Integral n¨ aherungsweise mit dem Computer berechnen, wobei zus¨ atzliche Ungenauigkeiten durch die Zahlendarstellung entstehen. Sie sehen aber, dass die exakte Berechnung der einfachen Fl¨ ache im Beispiel mit der Definition bereits recht schwierig ist. Wenn wir aber genauer auf die Ergebnisse in Beispiel 4.37 schauen, dann erkennen wir einen fundamentalen Zusammenhang: Mit der
4.7 Integral
267
(b ' &b ublich ist auch f (x)(a ) sehen abk¨ urzenden Schreibweise f (x) a := f (b) − f (a) (¨ wir $ 3 %b $ 2 %b 3 b 3 b 3 b ' &b b2 a2 b3 a3 x x 2 1 dx = x a = b−a, x dx = = − , x dx = = − . 2 a 2 2 3 a 3 3 a a a Leiten wir die in eckigen Klammern angegebenen Funktionen jeweils ab, so erhalten wir den Integranden: d x = 1, dx
d x2 2x = = x, dx 2 2
d x3 3x2 = = x2 . dx 3 3
In diesen Beispielen k¨ onnen wir also das Integral durch Einsetzen in eine Funktion berechnen, deren Ableitung der Integrand ist. Eine solche Funktion F mit aren wir, warum F (x) = f (x) heißt Stammfunktion von f . Im Folgenden erkl¨
3
b
f (x) dx = F (b) − F (a)
(4.21)
a
ganz allgemein gilt. Zu einer auf [a, b] stetigen Funktion f k¨ onnen wir f¨ ur je2x de Stelle x ∈ [a, b] das Integral I(x) := a f (t) dt bilden, so dass wir eine Funktion I(x) der oberen Integrationsgrenze erhalten. Der Funktionswert dieser Funktion an der Stelle x ist also der Fl¨ acheninhalt unter f auf dem In2b tervall [a, x]. Der Wert des Integrals a f (t) dt ist damit I(b), und außerdem ist I(a) = 0. Kennen wir I(x), so kennen wir auch den Wert des gesuchten 2b ucklicher Weise handelt es sich Integrals: a f (t) dt = I(b) = I(b) − I(a). Gl¨ bei I um eine Stammfunktion, also I (x) = f (x). Das beweisen wir anschließend. Eine beliebige Stammfunktion F muss zwar nicht mit I identisch sein, aber sie stimmt bis auf eine additive Konstante c = F (a) mit I u ¨ berein. Denn [F (x)−I(x)] = f (x)−f (x) = 0, und wenn u ¨ berall die Steigung null ist, dann ist der Graph der Funktion eine Parallele zur x-Achse, also ist F (x) − I(x) = c. Das folgt auch direkt aus dem Mittelwertsatz f¨ ur die Funktion F − I. Die Konstante ist aber f¨ ur den Wert des Integrals nicht wichtig. Dieser ist 3 b f (x) dx = I(b) − I(a) = [F (b) − c] − [F (a) − c] = F (b) − F (a). a
Da sich Stammfunktionen F von f h¨ ochstens um eine Konstante von einer Inte2 gralfunktion unterscheiden, werden sie mit f (x) dx := F (x) bezeichnet. Diese d , da sich beim Ableiten der Schreibweise passt zur Ableitungsschreibweise mit dx 2 d Stammfunktion das dx wegk¨ urzt“: dx f (x) dx = f (x). ” Wir berechnen einige Stammfunktionen und konkrete Integrale: 2π sin(x) + c ist Stammfunktion zu cos(x): 02 cos(x) dx = sin π2 − sin(0) = 1. n+1 1 + c ist eine Stammfunktion zu xn , n+1 x (4 (7 27 24 x2 ( ( = 21 − 6 = 15, 3 dx = 3x x dx = 2 ( = 8, 2 0 2 0
268
4 Ausgew¨ ahlte Kapitel der Analysis
(0 20 2b 2x dx = x2 (4 = −16. Beachten Sie, dass die Konvention a f (x) dx = 42 a − b f (x) dx zum Einsetzen der Werte in die Stammfunktion passt: 3
3
b
f (x) dx = −
F (b) − F (a) = a
2
a
f (x) dx = −(F (a) − F (b)). b
1 1+x2
dx = arctan(x) + c. Die Ableitung von − cos(x) ist sin(x), also
3 0
2π
(2π sin(x) dx = − cos(x)(0 = − cos(2π) − [− cos(0)] = −1 − (−1) = 0.
Wir wissen jetzt, wie wir Integrale mittels Stammfunktionen berechnen k¨ onnen, m¨ ussen aber noch zeigen, dass die Integralfunktion tats¨ achlich eine Stammfunktion ist. Das ist die Aussage des Fundamentalsatzes der Differenzialund Integralrechnung. Satz 4.38 (Hauptsatz der Differenzial- und Integralrechnung) 2x Sei f stetig, dann ist die Integralfunktion I(x) = a f (t) dt differenzierbar auf [a, b], und es gilt f¨ ur alle x ∈ [a, b]: 3 x dI d f (t) dt = f (x). (x) = I (x) = dx dx a Die Beweisidee besteht darin, dass sich die Funktion f wegen ihrer Stetigkeit lokal fast konstant verh¨ alt. Ist also Δx > 0 klein, dann ist 3 x0 +Δx 3 x0 +Δx (4.20) f (t) dt ≈ f (x0 ) dt = f (x0 )Δx. x0
x0
Wenn wir nun die Ableitung von I an der Stelle x0 durch einen Differenzenquotienten ann¨ ahern, dann erhalten wir 2 x0 +Δx 2x f (t) dt − a 0 f (t) dt I(x0 + Δx) − I(x0 ) a = I (x0 ) ≈ Δx Δx 2 x0 +Δx f (t) dt f (x0 )Δx x0 = ≈ = f (x0 ). Δx Δx Hier k¨ urzt sich das Δx der Fl¨ ache f (x0 )Δx mit dem Δx des Differenzenquotienten weg. Wir f¨ uhren das Argument nun ohne ≈“ als Beweis durch: ” ahlen wir wegen Beweis Sei a ≤ x0 ≤ b gegeben. Zu einem beliebigen ε > 0 w¨ der Stetigkeit mit Satz 4.17 ein δ > 0 so klein, dass die Funktionswerte von f auf [x0 − δ, x0 + δ] ∩ [a, b] bis auf eine maximale Abweichung von ε gleich der Konstante f (x0 ) sind, also |f (t) − f (x0 )| < ε. Ist hn ein Folgenglied mit x0 + hn ∈ [a, b] und |hn | < δ, dann erhalten wir
4.7 Integral
269
3
3
x0 +hn
I(x0 + hn ) =
f (t) dt = a
3
x0
Rn :=
x0 +hn
f (t) dt = I(x0 ) + Rn ,
f (t) dt + a
x0
wobei f¨ ur Rn gilt:
(3 x0 +hn ( (3 x0 +hn ( 3 x0 +hn ( ( ( (4.20) ( |Rn − hn f (x0 ) = (( f (t) dt − f (x0 ) dt(( = (( f (t) − f (x0 ) dt(( x0 x0 x0 (3 ( (3 x0 +hn ( (4.19) ( x0 +hn ( ( ( (4.20) ≤ (( |f (t) − f (x0 )| dt(( ≤ (( ε dt(( = |(x0 + hn − x0 )ε| = |hn ε|. x0
x0
(hn )∞ n=0
eine Nullfolge mit hn = 0 und x0 + hn ∈ [a, b]. Dann gibt es Sei nun ur n > n0 wie zuvor benutzt |hn | < δ ist, und wir erhalten ein n0 ∈ N, so das f¨ ( ( ( ( ( I(x0 + hn ) − I(x0 ) ( ( I(x0 ) + Rn − I(x0 ) ( ( ( ( ( − f (x ) = − f (x ) 0 ( 0 ( ( ( hn hn ( ( ( Rn − hn f (x0 ) ( |hn |ε (≤ = (( = ε. ( hn |hn | Damit haben wir aber limn→∞ I(x0 +hhnn)−I(x0 ) = f (x0 ) gezeigt. Da die Nullfolge ahlt war, ist I (x0 ) = f (x0 ) bewiesen. (hn )∞ n=1 beliebig gew¨ Beispiel 4.39 (Beschleunigung) Es gibt L¨ auferuhren, die die Laufstrecke nicht mittels GPS, sondern mit einem Beschleunigungssensor ermitteln. Wie erhalten wir aus der Beschleunigung a(t) den zur¨ uckgelegten Weg? Die Beschleunigung ist die Ableitung der Geschwindigkeit: a(t) = v (t), und die Geschwindigkeit ist die Ableitung der Weg-Zeitaufer zum Zeitpunkt t = 0 am Funktion s(t), also v(t) = s (t). Wenn der L¨ Start seiner Strecke steht, d. h. s(0) = v(0) = 0, dann erhalten wir aus der Beschleunigung die Geschwindigkeit u ¨ber 3 t 3 t a(x) dx = v (x) dx = v(t) − v(0) = v(t), 0
0
und entsprechend erhalten wir aus der Geschwindigkeit die Weg-Zeit-Funktion: 3 t 3 t v(x) dx = s (x) dx = s(t) − s(0) = s(t). 0
0
F¨ ugen wir beide Berechnungen zusammen, dann erhalten wir 3 t 3 t 3 x s(t) = v(x) dx = a(u) du dx. 0
0
(4.22)
0
Die Klammern k¨ onnen wir auch weglassen, da das Integralsymbol zusammen mit du bereits eine Klammer bildet. Die beiden Integrationen werden von der Uhr nur n¨ aherungsweise u ¨ ber Summen wie in Definition 4.36 ausgerechnet.
270
4 Ausgew¨ ahlte Kapitel der Analysis
Aus der Physik kennen Sie vielleicht das Weg-Zeit-Gesetz des freien Falls. Hier ist die Beschleunigung a(t) = 9,81 m / s2 konstant. Setzen wir die Konstante in (4.22) ein, dann erhalten wir die Formel
3 t3
3
x
s(t) =
a du dx = 0
0
0
t
' &x a u 0 dx =
Aufgabe 4.20 Berechnen Sie mittels Stammfunktion: 21 2 2π b) 0 sin(x) + cos(x) dx, a) 0 ex dx,
3
t
0
$ 2 %t x at2 ax dx = a = . 2 0 2
c)
21 0
1 + 2x2 + x3 dx.
Auf Seite 254 haben wir anschaulich u ¨ ber die Steigungen argumentiert, dass ur x ≥ 2 ist. Jetzt k¨ onnen wir das formal beweisen: log2 (x) ≤ x f¨ 3 x 3 x ln(x) (4.21) d ln(t) 1 ln(2) = dt + = dt + 1 log2 (x) = ln(2) dt ln(2) ln(2) ln(2) ·t 2 2 3 x 1 dt + 1 = x − 2 + 1 ≤ x. ≤ 2
Wir k¨ onnen nun auch die f¨ ur die Analyse des randomisierten Quicksort be 1 ur nutzte Absch¨ atzung (4.11), also 1 + ln(n) ≥ n k=1 k ≥ ln(n + 1), beweisen. F¨ 1 1 1 x ∈ [k, k + 1] ist k+1 ≤ x ≤ k , und mit (4.18) erhalten wir einerseits n 1 k
(4.20)
=
k=1
n 3 k=1
=
k+1 k
3 n+1 n 3 k+1 (4.18) ' &n+1 1 1 1 dx ≥ dx = dx = ln |x| 1 k x x k 1 k=1
ln(n + 1) − ln(1) = ln(n + 1),
andererseits k¨ onnen wir entsprechend nach oben absch¨ atzen: n n n 3 k n 3 k (4.18) 1 1 (4.20) 1 1 = 1+ = 1+ dx ≤ 1 + dx k k k x k=1 k=2 k=2 k−1 k=2 k−1 3 n 1 dx = 1 + ln(n) − ln(1) = 1 + ln(n). = 1+ x 1
W¨ ahrend das Ausrechnen von Summen (z. B. bei Aufwandsabsch¨ atzungen) in ¨ der Regel schwierig ist, haben wir durch den Ubergang zu Integralen das Werkzeug der Stammfunktion zur Verf¨ ugung. Es gibt elementare Funktionen wie sin(x) x , zu denen keine Stammfunktionen existieren, die wir als Verkn¨ upfung elementarer Funktionen schreiben k¨ onnen. Dabei sind Polynome, Potenzfunktionen, trigonometrische Funktionen und deren Umkehrfunktionen elementare Funktionen. Daher gibt es im Gegensatz zur Differenziation keinen einfachen Algorithmus zum Berechnen von Integralen. Wenn Sie eine Stammfunktion nicht direkt sehen, dann helfen aber vielleicht die Produkt- oder die Kettenregel – nur umgekehrt angewendet. Man spricht dann von der partiellen Integration oder von der Substitutionsregel.
4.7 Integral
271
Unter Ausnutzung des Hauptsatzes erhalten wir mit der Produktregel (f · g) (x) = f (x)g(x) + f (x)g (x) ⇐⇒ f (x)g(x) = (f · g) (x) − f (x)g (x) durch Integration beider Seiten die Regel zur partiellen Integration: 3 b 3 b 3 b 3 b (b (4.21) f (x)g(x) dx = (f ·g) (x) dx− f (x)g (x) dx = f (x)g(x)(a − f (x)g (x) dx. a
a
a
a
Wir l¨ osen damit das auf der linken Seite gegebene Integral nicht vollst¨ andig, sondern erhalten auf der rechten Seite ein neues Integral. Wenn wir Gl¨ uck haben, ist das aber einfacher zu l¨ osen als das urspr¨ unglich gegebene Integral. Als 2π Beispiel wollen wir 0 x · sin(x) dx berechnen. Wir setzen f (x) = sin(x), da wir eine Stammfunktion f (x) = − cos(x) kennen und g(x) = x, da die Ableitung achlich einfacher wird: g (x) = 1 ist und damit das neue Integral tats¨ 3 π 3 π (π ' &π sin(x)·x dx = − cos(x)·x(0 − − cos(x)·1 dx = − cos(π)·π−0− −sin(x) 0 = π. 0
0
d Die Substitutionsregel entsteht, wenn wir die Kettenregel dx h(g(x)) = h (g(x))g (x) mit dem Hauptsatz integrieren: 3 b 3 b 3 g(b) (4.21) (4.21) d h (g(x))g (x) dx = h (t) dt, h(g(x)) dx = h(g(b)) − h(g(a)) = a a dx g(a)
ahlen, erhalten wir d. h., wenn wir f (x) = h (x) w¨ 3 b 3 g(b) f (g(x))g (x) dx = f (t) dt. a
g(a)
Diese Regel l¨ asst sich kalk¨ ulm¨ aßig anwenden (siehe Algorithmus 4.8): g(x) wird durch t ersetzt, also t = g(x). Mit der formalen Merkregel dt = g (x) dx k¨ onnen wir dx durch dt ersetzen. Die Grenzen x = a und x = b werden zu t = g(x) = g(a) und t = g(x) = g(b). Mit diesen Zuordnungen kann man eine Substitution eventuell auch dann durchf¨ uhren, wenn das Paar g(x) und g (x) nicht sofort zu erkennen ist. Es ist lediglich darauf zu achten, dass beim Ersetzen an keiner Stelle die alte Variable u ¨ brig bleibt. Wenn das nicht gelingt, weil beispielsweise t = g(x) nicht nach x umgeformt werden kann, dann ist die Regel nicht anwendbar. Im folgenden Beispiel substituieren wir t = g(x) := sin(x). Formal ist daher dt = cos(x) dx: 3 π 3 sin( π ) ' &1 2 2 cos(x) exp(sin(x)) dx = exp(t) dt = exp(t) 0 = e − 1. 0
sin(0)
Wenn wir uns den Ablauf im Algorithmus 4.8 ansehen, dann haben wir dx 1 1 = cos(x) ersetzt und direkt gegen den vorhandenen cos(x)-Term durch d sin(x) dx
¨ gek¨ urzt. Ubrig bleibt exp(sin(x)), wobei wir sin(x) durch t ersetzen. Damit tritt die Variable x nicht mehr auf, und es sind nur noch die Grenzen anzupassen.
272
3
4 Ausgew¨ ahlte Kapitel der Analysis
Mit der Substitutionsregel k¨ onnen wir auch eine Stammfunktion berechnen: 3 x 3 g(x) f (g(x))g (x) dx = f (g(u))g (u) du = f (t) dt = F (g(x)) − F (g(a)) . a g(a) konstant
Hier haben wir t = g(u) mit dt = g (u) du substituiert, und F sei eine Stammfunktion von f . Wir d¨ urfen daher wie folgt ohne Grenzen rechnen, wenn wir am Ende r¨ ucksubstituieren: Mit t = g(x) und dt = g (x) dx erhalten wir 3 3 R¨ ucksubstitution f (g(x))g (x) dx = f (t) dt = F (t) + c = F (g(x)) + c, also z. B. 3
2x t=x2 +1, dt=2x dx dx = (x2 + 1)2
3
1 1 1 dt = − + c = − 2 + c. t2 t x +1
Formal falsch ist aber die leider in Klausuren immer wieder anzutreffende Rechnung 3 b 3 b ' &b ' &b f (g(x))g (x) dx = f (t) dt = F (t) a = F (g(x)) a = F (g(b)) − F (g(a)). a
a
Zwar ist das Ergebnis wegen der R¨ ucksubstitution t = g(x) richtig, aber bei ' &b den Zwischenschritten stimmen die Grenzen nicht. Schließlich ist F (t) a = F (b) − F (a) und nicht F (g(b)) − F (g(a)). Algorithmus 4.8 Berechnen der Zahl 2 f (x) dx mit der Substitution t = g(x)
2b a
f (x) dx oder der Stammfunktion
1 Berechne g (x), ersetze dx durch g (x) dt und k¨ urze, falls m¨ oglich. Ersetze jedes Auftreten von g(x) durch t. if Variable x tritt noch auf then if t = g(x) l¨ asst sich umformen zu x = g −1 (t) then Ersetze jedes Auftreten von x durch g −1 (t). else Fehler: Substitution t = g(x) ist nicht durchf¨ uhrbar.
if Grenzen a und b vorhanden then Ersetze die Grenze a durch g(a) und die Grenze b durch g(b). Berechne den Zahlenwert des Integrals mit der Integrationsvariable t. else Berechne die Stammfunktion zur Funktion mit der Variable t. R¨ ucksubstitution: Ersetze t u ¨berall durch g(x).
Aufgabe 4.21 2e 21 Berechnen Sie mit partieller Integration: a) 1 x10 · ln(x) dx, b) 0 x · e−3 x dx. 2π 2 π sin(x) dx (t = cos(x)), Berechnen Sie mittels Substitution: c) 04 tan(x) dx = 04 cos(x) 2 2 −3 2 sin x e) cos5 x dx. d) 0 3x+1 dx,
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
¨ Ubersicht 5.1 5.2 5.3 5.4 5.5 5.6
Blockcodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lineare Codes und Vektorr¨ aume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Informationsbits und Dimension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Matrizen und Gleichungssysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Orthogonalit¨ at, Fehlererkennung und verlustbehaftete Kompression . Lineare Abbildungen und Vektorgrafik . . . . . . . . . . . . . . . . . . . . . . . . . .
273 277 284 293 316 332
In diesem Kapitel behandeln wir einige wichtige Begriffe aus der Linearen Algebra (Vektorrechnung). Dazu sehen wir uns mit linearen Codes eine Klasse von g¨ angigen Blockcodes aus der Codierungstheorie an, zu der beispielsweise Hamming-Codes und zyklische Codes geh¨ oren. Diese Codes werden verwendet, um Daten u ale zu u ¨ber fehlerbehaftete Kan¨ ¨ bertragen, so dass Bitfehler erkannt und gegebenenfalls korrigiert werden k¨ onnen. Die Theorie der Linearen Algebra, die wir u osen von Glei¨ ber die linearen Codes kennen lernen, hilft auch beim L¨ chungssystemen. Das Codieren und Decodieren von linearen Codes geschieht u uber hin¨ ber lineare Abbildungen. Zum Abschluss des Kapitels nutzen wir dar¨ aus lineare Abbildungen f¨ ur die Vektorgrafik.
5.1
Blockcodes
F¨ ur die Darstellung von Daten haben wir bereits einige Codierungen kennengelernt: Buchstaben werden im ASCII oder UTF-Code abgespeichert (siehe Kapitel 1.3.3), ganze Zahlen als Zweier-Komplement (siehe Kapitel 3.2.2), reelle Zahlen mittels IEEE-754 (Kapitel 3.6.4). All diesen Codierungen ist gemeinsam, ¨ dass sie redundanzfrei sind. Andert sich auch nur ein einziges Bit, dann wird ein anderer Wert repr¨ asentiert. Wenn wir Daten u ¨ ber Leitungen oder per WLAN u ussen wir aufgrund von elektromagnetischen St¨ orungen ¨ bertragen wollen, m¨ S. Goebbels, J. Rethmann, Mathematik für Informatiker, DOI 10.1007/978-3-642-55340-0_5, © Springer-Verlag Berlin Heidelberg 2014
274
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
damit rechnen, dass einzelne Bits nicht korrekt beim Empf¨ anger ankommen. Auch beim Lesen von CD oder DVD kommt es zu Fehlern, da sich auf dem Medium Kratzer oder Staubk¨ orner befinden k¨ onnen. Wir ben¨ otigen also Codes, bei denen wir aufgetretene Fehler erkennen oder auch korrigieren k¨ onnen. Ist ¨ ein Ubertragungskanal nur sehr gering gest¨ ort, dann reicht es oft aus, Fehler zu erkennen und einzelne Daten erneut zu senden. Da Kratzer nicht von einer DVD verschwinden, ben¨ otigen wir hier zwingend fehlerkorrigierende Codes. Auf Seite 154 haben wir die Binomialverteilung kennen gelernt, mit der wir die Wahrscheinlichkeit berechnen k¨ onnen, dass k von n Bits fehlerhaft sind, falls jedes Bit mit gleicher Wahrscheinlichkeit p einen Fehler aufweist und die Fehler sich gegenseitig nicht beeinflussen (also stochastisch unabh¨ angige Ereignisse sind). In der Realit¨ at sind dagegen h¨ aufig mehrere hintereinander liegende Bits durch einen St¨ orimpuls oder einen Kratzer auf der DVD gest¨ ort. Das nennt man einen Fehler-Burst. Wir ignorieren hier solche Bursts (die technisch durch das Verteilen von zusammengeh¨ orenden Bits auf dem Speichermedium entsch¨ arft werden) und erwarten bei n Bits durchschnittlich n · p Fehler. Das ist der Erwartungswert der Binomialverteilung. Bei einem Code-Wort der L¨ ange 32 Bit und einem Kanal mit einer Fehlerwahrscheinlichkeit von p = 0,05 sind das n · p = 32 · 0,05 = 1,60. Wir m¨ ussen also davon ausgehen, dass bei einem solchen Kanal in jedem empfangenen 32-Bit-Wort ein Fehler ist. Falls wir den Kanal durch elektromagnetische Abschirmung besser sch¨ utzen k¨ onnen, sollten wir das tun. Falls das nicht m¨ oglich ist, m¨ ussen wir Fehler erkennen und korrigieren. Eine Codierung ist eine Abbildung zwischen zwei Wortmengen. Eine Wortmenge besteht aus W¨ ortern, die durch Aneinanderreihung von endlich vielen orter u Zeichen eines Alphabets entstehen. Sei A+ die Menge aller W¨ ¨ ber einem + orter u Alphabet A = ∅ und B die Menge aller W¨ ¨ber dem Alphabet B = ∅. Dann heißt jede Abbildung f : A+ → B + eine Codierung. Der Wertebereich orige Code. C ⊂ B + der Abbildung heißt der zugeh¨ Damit wir eine Codierung auch decodieren k¨ onnen, sollte die Umkehrabbildung existieren. Wenn wir die Zielmenge der Codierung auf den Code C einschr¨ anken und damit die Abbildung surjektiv machen, dann ben¨ otigen wir urfen zus¨ atzlich noch die Injektivit¨ at (siehe Seite 54), d. h., zwei W¨ orter aus A+ d¨ nicht mit dem gleichen Wort aus C codiert werden. Jedes einzelne Zeichen von A bildet bereits ein Wort aus A+ . Wenn die Codierung schon durch die Bilder dieser einstelligen W¨ orter festgelegt ist, indem jedes l¨ angere Wort in einzelne Zeichen zerlegt, diese Zeichen abgebildet und die Ergebnisse wieder zu einem Wort aus B + zusammengesetzt werden, dann heißt die Codierung homomorph. Eine solche homomorphe Codierung wird beim Morsen verwendet:
5.1 Blockcodes
275
’a’
· –
’d’
– · ·
’g’
– – ·
’j’
· – – –
’b’
– · · ·
’e’
·
’h’
· · · ·
’k’
– · –
’c’
– · – ·
’f’
· · – ·
’i’
· ·
’l’
· – · ·
Schr¨ anken wir diese Codierung auf Buchstaben (W¨ orter der L¨ ange eins) ein, dann ist sie injektiv, und eine Decodierung ist leicht m¨ oglich. Betrachten wir aber die komplette Abbildung auf A+ , wobei A das Alphabet der Kleinbuchstaben ist, dann ist sie nicht injektiv: f (’ab’) = · − − · · · = f (’egi’). Daher wurde beim Morse-Code ein zus¨ atzliches Zeichen in das Alphabet B eingef¨ uhrt, die Pause. Es muss am Ende jedes Morsezeichens hinzugenommen werden. Damit wird die Codierung injektiv. ¨ Aufgrund der zu erwartenden Ubertragungsfehler gen¨ ugt in der Regel aber eine injektive bzw. bijektive Codierung noch nicht. Wenn ein Wort empfangen wird, das nicht zum Code geh¨ ort, dann sollte es m¨ oglichst noch einem Codewort zugeordnet werden k¨ onnen. Das erreicht man beispielsweise dadurch, dass in C nur Worte sind, bei denen jedes Zeichen k-mal hintereinander wiederholt wird. Ist k = 3, dann darf ein Zeichen fehlerhaft sein, mit der Mehrheit der beiden anderen gleichen Zeichen kann das fehlerhafte Zeichen korrigiert werden. Solche Codes nennt man Wiederholungs-Codes. Erstrebenswert sind aber Codes, die weniger Redundanz aufweisen. Das f¨ uhrt uns zu linearen Blockcodes, die wir mit der Linearen Algebra mathematisch analysieren werden. Zun¨ achst betrachten wir allgemeinere Blockcodes, im n¨ achsten Abschnitt geht es dann um das Adjektiv linear“. ” aren Zeichen. Ein n-BitSei n ∈ N und B = {0, 1} die Menge der bin¨ Blockcode oder kurz n-Bit-Code ist eine Teilmenge C ⊂ Bn . Zuvor haben wir die Codew¨ orter als Aneinanderreihung von Zeichen des Alphabets geschrieben. Da wir in diesem Kapitel aber mit den W¨ ortern rechnen werden, ist f¨ ur unsere Zwecke die Darstellung als Tupel geeigneter. Aus dem Wort x1 . . . xn wird also onnen h¨ ochstens 2n W¨ orter codiert (x1 , . . . , xn ) ∈ Bn . Mit einem Blockcode k¨ werden. In der Regel werden Blockcodes als Baustein zur Codierung von Zeichen eines Alphabets A verwendet, so dass damit ein homomorpher Code konstruiert werden kann. Wir wollen eine hinreichende Bedingung angeben, wann ein Blockcode kBit-fehlererkennend ist. Unter dem Hamming-Abstand d(x, y) zweier W¨ orter n x, y ∈ B versteht man die Anzahl der Bits, an denen sich x und y unterscheiden. F¨ ur x = (1, 1, 1, 0, 1) und y = (0, 0, 1, 0, 1) betr¨ agt der Hamming-Abstand d(x, y) = 2, denn x und y unterscheiden sich im ersten und zweiten Bit.
276
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
Der Hamming-Abstand eines Codes C ⊂ Bn ist definiert als das Minimum aller Hamming-Abst¨ ande zwischen je zwei verschiedenen Codew¨ ortern: d(C) = min {d(x, y) : x = y}.
(5.1)
x,y∈C
Der Hamming-Abstand eines Wiederholungs-Codes mit k-facher Wiederholung betr¨ agt mindestens k. Die Idee bei fehlererkennenden Codes ist recht einfach: Alle Code-W¨ orter sollten zu Nicht-Code-W¨ ortern werden, wenn sie durch einen Fehler verf¨ alscht werden. Wie viele Bits ein solcher Fehler verf¨ alschen darf, damit das gelingt, h¨ angt vom Hamming-Abstand des Codes ab. Ein Fehler kann immer dann erkannt werden, wenn die Anzahl der betroffenen Bits kleiner als der Hamming-Abstand des Codes ist. Betrachten wir den Code C := {(0, 0), (0, 1), (1, 0), (1, 1)} = B2 , den wir so modifizieren, dass wir an jedes Code-Wort eine 0 oder eine 1 anh¨ angen, so dass die Anzahl der Einsen in jedem Code-Wort gerade ist: C := {(0, 0, 0), (0, 1, 1), (1, 0, 1), (1, 1, 0)} ⊂ B3 . Man spricht bei dem zus¨ atzlichen Bit vom Parit¨ ats-Bit. Dieser Code hat den Hamming-Abstand zwei, wie Sie leicht u ufen k¨ onnen. Wir erkennen alle ¨ berpr¨ ¨ W¨ orter, die durch das Andern eines einzigen Bits entstehen, sicher als fehlerhaft: (0, 0, 1), (0, 1, 0), (1, 0, 0), (1, 1, 1). Ist nur ein Bit betroffen, dann muss das fehlerhafte Code-Wort eine ungerade Anzahl von Einsen haben. Allerdings k¨ onnen wir nicht feststellen, welches Bit fehlerhaft ist: Das Nicht-Code-Wort (0, 0, 1) k¨ onnte aus (0, 0, 0) entstanden sein, falls das letzte Bit verf¨ alscht wurde, oder aus (0, 1, 1), falls das zweite Bit verf¨ alscht wurde. Bei Verwendung mehrerer zus¨ atzlicher Bits ist aber auch eine Lokalisierung ur des Fehler m¨ oglich. Wir betrachten ein Beispiel C ⊂ B8 , bei dem vier Bits f¨ die Fehlererkennung eingesetzt werden und ein einzelnes fehlerhaftes Bit erkannt werden kann. Wir schreiben ein Codewort (a1,1 , a1,2 , a2,1 , a2,2 , b1 , b2 , c1 , c2 ) in der Form a1,1 a1,2 b1 a2,1 a2,2 b2 c1
c2
also z. B.
0 0 0
0 0 0
0 0 1
1 0 1,
1 1 1,
1 0 1.
1 0
1 0
1 0
ats-Bits c1 , c2 Rechts sind jeweils Parit¨ ats-Bits b1 , b2 der Zeilen, unten Parit¨ der Spalten eingetragen. Das linke Beispielwort ist in C, die beiden anderen nicht. Im mittleren Wort ist die Anzahl der Einsen in der zweiten Zeile und in der zweiten Spalte nicht gerade. Damit ist hier jeweils das Bildungsgesetz des Codes verletzt. Da nur maximal ein Bitfehler vorliegen soll, muss die Eins in
5.2 Lineare Codes und Vektorr¨ aume
277
a2,2 falsch sein. Rechts ist dagegen die Anzahl der Einsen nur in der ersten Zeile ¨ ungerade. In der Zeile muss es einen Ubertragungsfehler geben. Wenn er bei a1,1 l¨ age, dann m¨ usste auch a2,1 oder c1 falsch sein. Entsprechend w¨ urde ein Fehler bei a1,2 einen Fehler bei a2,2 oder c2 zur Konsequenz haben. Da nur ein Fehler vorliegen soll, ist damit das Parit¨ atsbit b1 falsch. Der gesamte Code lautet C :=
(5.2)
{(0, 0, 0, 0, 0, 0, 0, 0), (0, 0, 0, 1, 0, 1, 0, 1), (0, 0, 1, 0, 0, 1, 1, 0), (0, 0, 1, 1, 0, 0, 1, 1), (0, 1, 0, 0, 1, 0, 0, 1), (0, 1, 0, 1, 1, 1, 0, 0), (0, 1, 1, 0, 1, 1, 1, 1), (0, 1, 1, 1, 1, 0, 1, 0), (1, 0, 0, 0, 1, 0, 1, 0), (1, 0, 0, 1, 1, 1, 1, 1), (1, 0, 1, 0, 1, 1, 0, 0), (1, 0, 1, 1, 1, 0, 0, 1), (1, 1, 0, 0, 0, 0, 1, 1), (1, 1, 0, 1, 0, 1, 1, 0), (1, 1, 1, 0, 0, 1, 0, 1), (1, 1, 1, 1, 0, 0, 0, 0)} und hat den Hamming-Abstand drei, so dass zwei Fehler erkannt werden k¨ onnen. Korrigiert werden kann mit dem obigen Verfahren allerdings nur ein einzelner Bitfehler. Dieser Code ist ein linearer Code:
5.2
Lineare Codes und Vektorr¨ aume
Aus Aufgabe 3.16 auf Seite 165 wissen wir bereits, dass (B, ⊕, ) ein K¨ orper ist. Dabei ist die als Addition verwendete Verkn¨ upfung ⊕ die Addition zwei¨ er Bits ohne Ubertrag, also das exklusive Oder. Die Multiplikation ist die Multiplikation zweier Bits und entspricht dem logischen Und, zur Erinnerung: ⊕ 0 1
0 1
0 0 1
0 0 0
1 1 0
1 0 1.
¨ Damit entspricht B im Ubrigen dem Restklassenk¨ orper Z2 . Das additive Inverse der Restklasse [1] in Z2 ist z. B. −[1] = [−1] = [1]. Genauso wird in B das additive Inverse zu 1 mit einem Minuszeichen geschrieben: −1 = 1. Definition 5.1 (linearer Code) Ein Blockcode ∅ = C ⊂ Bn heißt linearer Code genau dann, wenn die Summe x ⊕ y f¨ ur alle Codew¨ orter x, y ∈ C ebenfalls ein Codewort ist, also x ⊕ y ∈ C. Dabei ist f¨ ur x = (x1 , x2 , . . . , xn ) und y = (y1 , y2 , . . . , yn ) die Addition ⊕ : Bn × Bn → Bn komponentenweise (bitweise) u ¨ ber die Addition ⊕ im K¨ orper B definiert: (x1 , x2 , . . . , xn ) ⊕ (y1 , y2 , . . . , yn ) = (x1 ⊕ y1 , x2 ⊕ y2 , . . . , xn ⊕ yn ).
278
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
¨ Uberpr¨ ufen Sie, dass in (5.2) tats¨ achlich die Summen aller Codew¨ orter enthalten sind, und es sich damit um einen linearen Code handelt. Da das Beispiel unhandlich groß ist, verfolgen wir hier ein kleineres: Beispiel 5.2 (linearer 3-Bit-Bin¨ arcode mit Parit¨ ats-Bit) C := {(0, 0, 0, 0), (0, 0, 1, 1), (0, 1, 0, 1), (0, 1, 1, 0), (1, 0, 0, 1), (1, 0, 1, 0), (1, 1, 0, 0), (1, 1, 1, 1)} ⊂ B4 ist ebenfalls ein linearer Code. Eine der vier Stellen l¨ asst sich als Parit¨ ats-Bit der u ¨brigen drei Stellen interpretieren. Die Menge C ist also abgeschlossen unter der komponentenweisen Addition. Wenn wir die Bit-Multiplikation : B × B → B so erweitern, dass wir das Element aus B mit jedem Bit des Wortes aus Bn multiplizieren, d. h. : B × Bn → Bn mit s (y1 , . . . , yn ) := (s y1 , . . . , s yn ) uhrt auch diese Multiplikation nicht aus f¨ ur s ∈ B und (y1 , . . . , yn ) ∈ Bn , dann f¨ C hinaus: Die Multiplikation von 1 mit einem Wort ergibt das gleiche Wort, die Multiplikation mit 0 f¨ uhrt zum Wort, das nur aus Nullbits besteht. Das ist aber in C, da es als x ⊕ x f¨ ur jedes x ∈ C darstellbar ist. Wir werden zeigen, dass die Menge C unter der Addition ⊕ und Multiplikation orper sind eine mit Elementen aus B einen Vektorraum bildet. In einem K¨ Addition und eine Multiplikation definiert. Ein Vektorraum ist eine ¨ ahnliche Struktur, allerdings wird die Multiplikation nicht zwischen den Elementen des Vektorraums sondern wie beim linearen Code mit Elementen aus einem K¨ orper (den Skalaren) definiert. Es lohnt sich, Vektorr¨ aume axiomatisch einzuf¨ uhren. Die S¨ atze, die wir dann f¨ ur Vektorr¨ aume beweisen, gelten nicht nur f¨ ur lineare Codes, sondern auch f¨ ur ganz andere Objekte wie Pfeile in der Ebene und im Raum, Matrizen oder gewisse Mengen von Funktionen. Definition 5.3 (Vektorraum) Eine Menge V = ∅ bildet einen Vektorraum (V, +; K, · ) u ¨ ber einem K¨ orper K, falls eine Vektoraddition +“ zwischen Elementen aus V und ” eine Multiplikation ·“ zwischen Elementen aus V und Skalaren aus K er” kl¨ art ist, so dass (V, +) eine kommutative Gruppe mit neutralem Element 0 ist und die folgenden Regeln f¨ ur r, s ∈ K und a, b ∈ V gelten: a) Zu jedem a ∈ V und jedem r ∈ K ist ein Produkt r · a = a · r = b ∈ V eindeutig erkl¨ art (Produkt mit Skalar, Skalarmultiplikation). b) Das Produkt mit einem Skalar ist assoziativ: (rs) · a = r · (s · a). orpers ist. c) 1 · a = a, wobei 1 ∈ K das Einselement des K¨
5.2 Lineare Codes und Vektorr¨ aume
279
d) Addition in K, Vektoraddition und Multiplikation mit einem Skalar erf¨ ullen die Distributivgesetze r · (a + b ) = r · a + r · b,
(r + s) · a = r · a + s · a.
Die Elemente von V heißen Vektoren. Um sie von den Elementen des K¨ orpers besser unterscheiden zu k¨ onnen, markieren wir sie durch einen Pfeil u ¨ ber der Variablen. Die Schreibweise (V, +; K, ·) ist etwas l¨ anglich. H¨ aufig ist klar, was unter Vektoraddition und Skalarmultiplikation zu verstehen ist. Dann k¨ onnen wir auch, wie in der Litertur u ¨ blich, vom K-Vektorraum V oder Vektorraum V u ¨ ber K sprechen, wobei wir bisweilen auch K nicht explizit erw¨ ahnen. Wir verwenden hier im Wesentlichen die K¨ orper K = R oder K = B. Wenn Sie m¨ ochten, k¨ onnen Sie sich mit den Axiomen etwas besch¨ aftigen: Aufgabe 5.1 Zeigen Sie mit der Definition, dass in einem Vektorraum (V, +; K, ·) gilt: 0 · a = 0 und (−1) · a = −a, wobei −a das additive Inverse zu a in der Gruppe (V, +) ist, w¨ ahrend −1 das additive Inverse zu 1 im K¨ orper K ist. Da ein Vektorraum insbesondere eine Gruppe ist, schreiben wir wie zuvor a − b := a + (−b ). Wir betrachten das wichtige Beispiel des Vektorraums (K n , +; K, ·) der Zeilen- oder Spaltenvektoren mit n Komponenten u ur den spe¨ ber K, das wir f¨ ziellen K¨ orper K = B schon kennen: ⎫ ⎧⎛ ⎞ ⎪ ⎪ ⎪ ⎪ x1 ⎬ ⎨ ⎜ . ⎟ n n .. ⎟ : x1 , . . . , xn ∈ K . K = {(x1 , . . . , xn ) : x1 , . . . , xn ∈ K} bzw. K = ⎜ ⎝ ⎠ ⎪ ⎪ ⎪ ⎪ ⎭ ⎩ xn F¨ ur die Multiplikation mit Matrizen wird es einen Unterschied machen, ob wir ur alle ein Element des (K n , +; K, ·) als Spalten oder Zeilenvektor hinschreiben, f¨ anderen Zwecke spielt das keine Rolle. Spaltenvektoren mit zwei Komponenten sehen leider genau so aus wie Binomialkoeffizienten. Aus dem Zusammenhang ist aber stets klar, was gemeint ist. Die Addition und die Skalarmultiplikation von Zeilen- bzw. Spaltenvektoren ist (wie f¨ ur Bn ) komponentenweise definiert, also z. B. (x1 , . . . , xn ) + (y1 , . . . , yn ) = (x1 + y1 , . . . , xn + yn ) und r · (x1 , . . . , xn ) = (r · x1 , . . . , r · xn ). Die Vektorraumaxiome ergeben sich daher sofort aus den entsprechenden Axiomen ur n = 2 oder des K¨ orpers K. Von besonderem Interesse ist der Fall K = R f¨ n = 3, den wir im Folgenden betrachten.
280
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
Der Name Vektor entstammt der Physik: Physikalische Gr¨ oßen wie die Kraft haben einen Betrag und eine Richtung, in der sie wirken. Aus der Schule F kennen Sie vielleicht noch ihre Darstellung als Pfeile, deren L¨ ange dem Betrag entspricht. Zwei Pfeile sind genau dann gleich, wenn sie den gleichen Betrag und die gleiche Richtung haben. Der konkrete Startpunkt eines Pfeils spielt dabei keine Rolle. Die gleiche Kraft kann an unterschiedlichen Punkten ansetzen und damit aber eine unterschiedliche Wirkung entfalten. Die Menge der Pfeile bildet einen Vektorraum u ¨ ber K = R, falls man Addition und Multiplikation so erkl¨ art (siehe Abbildung 5.1): Zwei Pfeile a und b werden addiert, indem man den Startpunkt von b an die Spitze von a ansetzt. Der neue Pfeil vom Startpunkt von a zur Spitze von b ist die Summe. Ein Pfeil wird mit einem Skalar c ∈ R multipliziert, indem seine L¨ ange mit |c| multipliziert wird. Ist c negativ, dann kehrt sich zus¨ atzlich die Richtung des Vektors um. Die Vektorr¨ aume (R2 , +; R, ·) bzw. (R3 , +; R, ·) beschreiben Zahlentupel, die als Punkte verstanden werden k¨ onnen. Durch jeden Punkt ist ein Pfeilspitze eines Pfeils, der vom Nullpunkt ausgeht, bestimmt. Die Vektoren des R2 und R3 lassen sich also als Pfeile interpretieren. Die komponentenweise Verkn¨ upfungen der Tupel werden dabei zu den Verkn¨ upfungen f¨ ur Pfeile, siehe Abbildung 5.1. a2+ b2
ca2
a2
ca
b
a
a+b
a2
a a1
a1+ b1
a1
ca1
Abb. 5.1 Summe a + b und skalares Vielfaches c·a von Vektoren in Koordinatenschreibweise: a = (a1 , a2 ), b = (b1 , b2 )
Der einfachste Vektorraum besteht nur aus dem Nullvektor: V = {0}. Daf¨ ur gibt es aber wenig Anwendungen. Allerdings muss man beim Formulieren von Aussagen aufpassen, dass sie auch f¨ ur diesen pathologischen Fall gelten oder ihn ausschließen. ater Ein sinnvolleres Beispiel f¨ ur einen Vektorraum u ¨ ber K = R, auf das wir sp¨ zur¨ uck kommen werden, bildet die Menge der Polynome P mit der u ¨ blichen u ¨ ber Funktionswerte definierten Addition und Multiplikation (siehe Seite 250) (p + q)(x) := p(x) + q(x),
(r · p)(x) := r · p(x) f¨ ur alle r ∈ R, p, q ∈ P.
ussen wir Ein linearer Code ist tats¨ achlich ein Vektorraum. Da C ⊂ Bn ist, m¨ die meisten Vektorraumaxiome gar nicht u ufen, denn sie gelten im Vek¨ berpr¨ ussen lediglich noch zeigen, dass die Vektoraddition torraum (Bn , ⊕, B, ·). Wir m¨
5.2 Lineare Codes und Vektorr¨ aume
281
und die Skalarmultiplikation nicht aus C hinausf¨ uhren, also nicht nur sinnvoll art sind. Hinsichtlich der Addition ist das die auf Bn sondern auch auf C erkl¨ Definition eines linearen Codes, und hinsichtlich der Skalarmultiplikation haben wir uns das eingangs dieses Abschnitts bereits u ¨ berlegt. Ein linearer Code ist also ein Vektorraum, der im Vektorraum (Bn , ⊕, B, ) liegt. Daf¨ ur f¨ uhren wir einen Begriff ein: Definition 5.4 (Unterraum) Wir betrachten zwei Vektorr¨ aume (V, +; K, ·) und (U, +; K, ·) mit U ⊂ V , mit gleicher Vektoraddition und mit gleicher skalarer Multiplikation. Dann heißt (U, +; K, ·) ein Unterraum des Vektorraums (V, +; K, ·). Es gibt also immer zwei triviale Unterr¨ aume: U = {0} und U = V . Wir haben bereits benutzt, dass die Rechenregeln automatisch auch f¨ ur Teilmengen gelten und man lediglich zeigen muss, dass der m¨ ogliche Unterraum gegen¨ uber Vektoraddition und skalarer Multiplikation abgeschlossen ist. Damit haben wir bereits das folgende Lemma bewiesen: Lemma 5.5 (Unterraum-Kriterium) Es seien (V, +; K, ·) ein Vektorraum und U ⊂ V , U = ∅. (U, +; K, ·) ist genau dann ein Unterraum von (V, +; K, ·), wenn gilt: F¨ ur alle a, b ∈ U ist a + b ∈ U , und f¨ ur alle a ∈ U und alle r ∈ K ist r · a ∈ U . Dass die Unterraum-Eigenschaft f¨ ur die Konstruktion von linearen Codes hilfreich sein kann, sehen wir jetzt. Das Hamming-Gewicht w( x) eines Wortes n x = (x1 , . . . , xn ) ∈ B definieren wir als w( x) :=
n
xk ,
k=1
wir z¨ ahlen also die Anzahl der Einsen. Die Summe ist nicht bez¨ uglich ⊕ zu bilden, sondern wir addieren die ganzen Zahlen null und eins. Beispielsweise ist w((1, 1, 0, 1)) = 3. Zwei Bits sind unterschiedlich genau dann, wenn ihre Verkn¨ upfung mit ⊕ eins ergibt. Daher l¨ asst sich der Hamming-Abstand zweier W¨ orter (die Anzahl der unterschiedlichen Bits) u ¨ ber das Hamming-Gewicht berechnen: d( x, y ) = w( x⊕ y ) f¨ ur x, y ∈ Bn .
282
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
Satz 5.6 (Hamming-Abstand bei linearen Codes) Der Hamming-Abstand d(C) = min{d( x, y ) : x, y ∈ C, x = y } eines linearen Codes C ⊂ Bn , also die minimale Anzahl von Bits, in denen sich Code-W¨ orter unterscheiden (siehe Seite 276), ist gleich dem minimalen Hamming-Gewicht aller von 0 verschiedener Codew¨ orter, also gleich der minimalen Anzahl der in den W¨ ortern verwendeten Einsen: d(C) = min{w( x) : x ∈ C, x = 0}. Bei der Konstruktion eines Codes, der bis zu k Bitfehler erkennen soll, m¨ ussen wir also nur darauf achten, dass mindestens k + 1 Einsen in allen von 0 verschiedenen Codew¨ ortern vorkommen. Schauen Sie sich mit dieser Erkenntnis noch einmal den Code (5.2) an, und pr¨ ufen Sie, dass er den Hamming-Abstand drei hat. Beweis Da 0 ∈ C ist, gilt f¨ ur jedes x ∈ C mit x = 0: d(C) ≤ d( x, 0) = w( x), x ∈ C} gezeigt haben. Wir m¨ ussen so dass wir bereits d(C) ≤ min{w( x) : 0 = also nur noch die Gleichheit zeigen. Das machen wir mit einem indirekten Beweis. Dazu nehmen wir d(C) < min{w( x) : 0 = x ∈ C} an. Dann gibt es nach Definition des Hamming-Abstands zwei Code-W¨ orter x = y ∈ C mit d( x, y ) < min{w( x) : 0 = x ∈ C}. Jetzt ist aber d( x, y ) = w( x⊕ y ), und da C ein Unterraum ist, ist auch x ⊕ y ∈ C. Damit kann aber nur 1 Vektoren ist: ”
Keiner der Vektoren l¨ asst sich als Linearkombination der anderen n − 1 Vektoren schreiben.“
(5.5)
Bilden linear unabh¨ angige Vektoren ein Erzeugendensystem, dann k¨ onnen wir keinen der Vektoren weglassen, ohne dass die Eigenschaft Erzeugendensystem verloren geht. Denn der weggelassene Vektor kann durch die anderen nicht linear kombiniert werden. L¨ asst sich umgekehrt ein Vektor als Linearkombination der anderen schreiben, die Vektoren sind also linear abh¨ angig, dann ist dieser f¨ ur die Eigenschaft Erzeugendensystem nicht n¨ otig. Achtung: Es gen¨ ugt nicht zu pr¨ ufen, ob ein Vektor Vielfaches eines anderen ist. Sie m¨ ussen Linearkombinationen mit allen anderen Vektoren angig, obwohl ber¨ ucksichtigen, z. B. sind (1, 1), (1, 0) und (0, 1) im R2 linear abh¨ kein Vektor Vielfaches eines anderen ist. Auch gen¨ ugt es nicht zu pr¨ ufen, ob ein Vektor nicht als Linearkombination der anderen geschrieben werden kann. So ist (1, 0) nicht als Linearkombination von (0, 1) und (0, 2) darstellbar, aber die drei Vektoren zusammen sind linear abh¨ angig.
286
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
Beweis a) Aus der Definition der linearen Unabh¨ angigkeit folgt die Aussage (5.5), denn wenn ein Vektor als Linearkombination der anderen darstellbar w¨ are, z. B. a1 = x2a2 + · · · + xnan =⇒ a1 − x2a2 − · · · − xnan = 0, dann g¨ abe es im Widerspruch zur linearen Unabh¨ angigkeit eine weitere L¨ osung von (5.4), denn vor a1 steht der Faktor 1 = 0. b) Aus (5.5) folgt die lineare Unabh¨ angigkeit. Denn h¨ atte (5.4) eine nichtare triviale L¨ osung, z. B. x1a1 + x2a2 + · · · + xnan = 0 mit x1 = 0, dann w¨ a1 = −
x2 xn a2 − · · · − an . x1 x1
Dies ist ein Widerspruch zu (5.5). Daher ist 0 nur trivial linear kombinierbar, die Vektoren sind linear unabh¨ angig. Die vier Vektoren des Erzeugendensystems (5.3) f¨ ur einen linearen Code C sind linear abh¨ angig in C, da z. B. (1, 1, 0, 0) = 1 (0, 1, 1, 0) ⊕ 1 (1, 0, 1, 0).
(5.6)
Der Code l¨ asst sich also auch ohne (1, 1, 0, 0) vollst¨ andig aus den drei anderen Vektoren des Erzeugendensystems linear kombinieren. Aufgabe 5.3 Sind die Vektoren (1, 0, 0, 1), (1, 1, 0, 1), (1, 1, 1, 1) in (R4 , +; R, ·) linear unabh¨ angig? Damit eine Menge von Vektoren ein Erzeugendensystem bilden kann, m¨ ussen gen¨ ugend viele Vektoren in der Menge enthalten sein. Damit Vektoren linear unabh¨ angig sein k¨ onnen, d¨ urfen es dagegen nicht zu viele werden. Dass beide Bedingungen erf¨ ullt sind, ist etwas Besonderes, so dass wir daf¨ ur einen neuen Begriff spendieren. Definition 5.12 (Basis) Eine Menge von Vektoren {a1 , a2 , . . . , an } ⊂ V heißt genau dann eine Basis von V , wenn die Vektoren linear unabh¨ angig sind und die Menge ein Erzeugendensystem von V bildet. Wir zeigen, dass der Code C aus Beispiel 5.2 die Basis {(0, 1, 1, 0), (1, 0, 1, 0), (1, 1, 1, 1)} besitzt. Die Vektoren sind linear unabh¨ angig, da das Gleichungssystem x1 (0, 1, 1, 0) ⊕ x2 (1, 0, 1, 0) ⊕ x3 (1, 1, 1, 1) = (0, 0, 0, 0),
(5.7)
5.3 Informationsbits und Dimension
287
also x2 ⊕ x3 = 0 ∧ x1 ⊕ x3 = 0 ∧ x1 ⊕ x2 ⊕ x3 = 0 ∧ x3 = 0, nur die triviale L¨ osung x3 = 0 ∧ x2 = 0 ∧ x1 = 0 besitzt. Außerdem handelt es sich um ein Erzeugendensystem. Diese Eigenschaft kennen wir bereits von der Menge (5.3). Außerdem wissen wir wegen (5.6), dass wir den weggelassenen Vektor (1, 1, 0, 0) linear aus den verbliebenen kombinieren k¨ onnen, so dass auch (5.7) ein Erzeugendensystem bildet. Aufgabe 5.4 Verifizieren Sie, dass der Code (5.2) die folgende Basis besitzt: {(1, 0, 0, 0, 1, 0, 1, 0), (0, 1, 0, 0, 1, 0, 0, 1), (0, 0, 1, 0, 0, 1, 1, 0), (0, 0, 0, 1, 0, 1, 0, 1)}. Basen des R3 sind beispielsweise {(1, 0, 0), (0, 1, 0), (0, 0, 1)} (man spricht hier von der Standard-Basis, ihre Vektoren werden wegen ihrer elementaren Form Standard-Einheitsvektoren genannt) oder {(1, 0, 0), (1, 1, 1), (0, 0, 1)} oder {(1, 2, 3), (4, 1, 0), (5, 0, 0)}. Die drei Basen haben gleich viele Elemente. Das legt nahe, dass alle Basen eines Vektorraums gleich viele Vektoren haben. Dieser Verdacht wird sich tats¨ achlich best¨ atigen. Gibt es eine Basis mit n Vektoren, dann k¨ onnen wir jeden Vektor eindeutig n mit einem Element aus K beschreiben (und umgekehrt): Satz 5.13 (Basisdarstellung) x∈V Es sei B = {a1 , a2 , . . . , an } eine Basis von V . Dann hat jeder Vektor eine Darstellung als Linearkombination x = r1 · a1 + r2 · a2 + · · · + rn · an , wobei die Skalare r1 , . . . , rn ∈ K eindeutig bestimmt sind.
Beweis Da eine Basis insbesondere ein Erzeugendensystem ist, existiert eine ussen Darstellung von x als Linearkombination x = r1a1 + · · · + rnan , und wir m¨ nur noch die Eindeutigkeit zeigen. Sei also x = s1a1 + · · · + snan eine beliebige Darstellung, d. h. x− x = 0. (r1 − s1 )a1 + · · · + (rn − sn )an = Jetzt sind aber die Vektoren zus¨ atzlich linear unabh¨ angig. Damit ist die Gleichung nur erf¨ ullt, wenn r1 − s1 = 0, . . . , rn − sn = 0. Also sind die Koeffizienten eindeutig bestimmt. Die Aussage ist sehr hilfreich. Denn wenn ein Vektorraum V u ¨ ber K eine Basis mit n Vektoren hat, dann kann er u ¨ber den vielleicht viel einfacher aussehenden Vektorraum K n der n-Tupel u ¨ ber K wie folgt dargestellt werden: Die
288
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
onnen wir als Faktoren einer LinearkomKomponenten eines Elements des K n k¨ bination der Basisvektoren auffassen, so dass wir damit dem Element eindeutig einen Vektor aus V zuordnen. Umgekehrt hat ein Vektor aus V eine eindeutige Linearkombination hinsichtlich der Basis. Die skalaren Faktoren dieser Linearkombination bilden das zugeh¨ orige Element des K n . In der Tat hat dann K n die gleichen Eigenschaften wie der Vektorraum V . Allerdings kann V deutlich komplizierter als K n erscheinen, z. B. wirkt der Umgang mit dem n-dimensionalen Vektorraum der Polynome vom Grad kleiner n onnen u ¨ ber K = R erst einmal schwieriger als der Umgang mit Rn . Rechnungen k¨ asst sich dann wieder nach V nun statt in V in K n stattfinden, das Ergebnis l¨ abbilden. F¨ ur die Hin- und R¨ uckabbildung (Transformation) k¨ onnen wir bijektive lineare Abbildungen einsetzen, die die Struktur von Linearkombinationen erhalten. Damit werden wir uns im Abschnitt 5.6 besch¨ aftigen. Auch f¨ ur die Analyse linearer Codes haben wir jetzt mehr Wissen. Hat ein ortern, dann k¨ onnen wir mit ihm den Code C ⊂ Bn eine Basis mit k Codew¨ ur w¨ urden eigentlich nur k Bits ben¨ otigt (InformatiRaum Bk darstellen. Daf¨ onsbits). Die u orter dienen der Fehlererkennung und ¨brigen n−k Bits der Codew¨ Fehlerkorrektur. Einen solchen Code mit k Informationsbits und n − k Pr¨ ufbits bezeichnen wir als (n, k)-Code. Wegen der Basis (5.7) ist der Code C aus Beispiel 5.2 ein (4, 3)-Code, beim Code (5.2) handelt es sich um einen (8, 4)-Code. Lemma 5.14 (Existenz einer Basis) Gibt es in (V, +; K, ·) mit V = {0} ein Erzeugendensystem mit m Vektoren, dann existiert eine Basis mit n ≤ m Vektoren. Beweis Da V = {0} ist, k¨ onnen wir einen eventuell im Erzeugendensystem enthaltenen Nullvektor weglassen und haben immer noch ein Erzeugendensystem mit mindestens einem Vektor. Falls die u ¨ brig gebliebenen Vektoren linear abh¨ angig sind, k¨ onnen wir einen als Linearkombination der anderen schreiben. Damit wird er aber im Erzeugendensystem nicht gebraucht, und wir lassen ihn weg. Das machen wir jetzt so oft, wie es geht, also h¨ ochstens m − 1-mal. Dadurch entsteht ein Erzeugendensystem mit (maximal m) linear unabh¨ angigen Vektoren, also eine Basis. Ein Vektorraum mit einer Basis aus n Vektoren kann als K n codiert werden. ur n = k unterschiedliche VekAnschaulich ist naheliegend, dass K n und K k f¨ torr¨ aume sind. Beispielsweise entspricht R2 den Pfeilen in der Ebene, und R3 kann mit den Pfeilen im Raum identifiziert werden. Das ist ein weiteres Indiz daf¨ ur, dass jede Basis eines Vektorraums gleich viele Vektoren hat. Ein Beweis ist das aber nicht. Um ihn formal zu f¨ uhren, ben¨ otigen wir den Austauschsatz.
5.3 Informationsbits und Dimension
289
Satz 5.15 (Austauschsatz) Gegeben sei eine Basis {a1 , . . . , an } in (V, +; K, · ). Wenn wir einen Vektor b = c1a1 + c2a2 + · · · + cnan mit einem Skalar ck = 0 haben (1 ≤ k ≤ n), dann k¨ onnen wir b an Stelle von ak in die Basis tauschen: Auch {a1 , . . . , ak−1 , b, ak+1 , . . . an } ist eine Basis. ur jeden andeBeweis Um die Schreibweise einfach zu halten, sei c1 = 0. F¨ ren von null verschiedenen Skalar funktioniert der Beweis genauso. Wir m¨ ussen angiges Erzeunachrechnen, dass die Vektoren {b, a2 , . . . an } ein linear unabh¨ gendensystem bilden. a) Wir zeigen die lineare Unabh¨ angigkeit, indem wir beweisen, dass kein Vektor als Linearkombination der anderen geschrieben werden kann. – Falls b eine Linearkombination der anderen ohne a1 ist, also b = d2a2 + · · · + dnan , dann ist 0 = b − b = c1a1 + (c2 − d2 )a2 + . . . (cn − dn )an wegen c1 = 0 eine nicht-triviale Linearkombination von 0 – im Widerspruch zur linearen Unabh¨ angigkeit der Basisvektoren. ur i ≥ 2 als Linearkombination der anderen geschrieben – Falls ein ai f¨ werden kann, dann muss wegen der linearen Unabh¨ angigkeit der Vektoren a2 , . . . , an in der Linearkombination von ai der Vektor b mit einem von null verschiedenen Faktor c vorkommen. L¨ osen wir b mit der im Satz angegebenen Linearkombination auf, dann erhalten wir ai = c[c1a1 +. . .+cnan ]+d2a2 +. . .+di−1ai−1 +di+1ai+1 +. . .+dnan = c · c1a1 + (c · c2 + d2 )a2 + · · · + (c · ci )ai + · · · + (c · cn + dn )an . Durch Subtraktion von ai auf beiden Seiten erhalten wir auch hier eine nicht-triviale (da c · c1 = 0) Linearkombination von 0, also wie zuvor ein Widerspruch zur linearen Unabh¨ angigkeit der Basisvektoren. b) Wir haben durch den Austausch auch ein Erzeugendensystem geschaffen: Zun¨ achst l¨ asst sich a1 als Linearkombination schreiben zu a1 =
1 1 cn c2 [b − c2a2 − · · · − cnan ] = b − a2 − · · · − an . c1 c1 c1 c1
onnen wir daher alle Basisvektoren a1 , . . . , an linear Mit {b, a2 , . . . , an } k¨ kombinieren. Mit den Basisvektoren lassen sich wiederum alle Vektoren aus V linear kombinieren. Wenn wir in einer solchen Linearkombination die Basisvektoren wieder durch ihre Linearkombination aus {b, a2 , . . . , an } ersetzen, dann sehen wir, dass diese Menge ein Erzeugendensystem ist. Wie wir schon erwartet haben, gilt:
290
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
Satz 5.16 (Anzahl der Vektoren einer Basis) Hat V eine Basis mit n Vektoren, dann haben alle Basen von V genau n Vektoren. Beweis Wir nehmen an, es g¨ abe Basen mit unterschiedlich vielen Vektoren, also z. B. {a1 , a2 , . . . , al } und {b1 , b2 , . . . , bm } mit l < m. Zun¨ achst l¨ asst sich b1 als Linearkombination lk=1 ckak schreiben. Wir verwenden also das Summensymbol auch f¨ ur die Vektoraddition. Da b1 = 0 ist, muss mindestens ein ck = 0 sein. Zur Vereinfachung der Darstellung sei c1 = 0. Durch Anwendung des Austauschsatzes ist damit auch {b1 , a2 , . . . , al } eine Ba sis. Mit dieser Basis kann b2 linear kombiniert werden: b2 = d1b1 + lk=2 dkak . angig sind, d. h., b2 l¨ asst sich nicht als Vielfaches von Da b1 und b2 linear unabh¨ b1 schreiben, muss ein Koeffizient dk f¨ ur k ≥ 2 ungleich null sein. Beachten Sie, dass k jetzt nicht 1 ist. Zur Vereinfachung der Darstellung sei jetzt d2 = 0. Wieder hilft der Austauschsatz: {b1 , b2 , a3 , . . . , al } ist eine Basis. Dieses Vorgehen l¨ asst sich fortsetzen, bis wir sehen, dass {b1 , b2 , . . . , bl } eine Basis ist. Jetzt kann bm als Linearkombination der Vektoren b1 , . . . , bl geschrieben werden (beachte: m > l) – im Widerspruch zur linearen Unabh¨ angigkeit von b1 , . . . , bm . Die Standardbasis von (R3 , +; R, ·), also {(1, 0, 0), (0, 1, 0), (0, 0, 1)}, hat drei Vektoren. Damit haben alle Basen des Vektorraums drei Vektoren. In der Umgangssprache spricht man vom dreidimensionalen Raum. In der Mathematik auch: Definition 5.17 (Dimension) Ein Vektorraum mit einer Basis aus n Vektoren hat die Dimension n, Bezeichnung: dim V = n. Ist V = {0}, so legen wir dim V := 0 fest. Auf Seite 283 haben wir kurz beschrieben, wie in der affinen Geometrie Geraden und Ebenen u aume des (R3 , +; R, ·) beschrieben werden. Eine Ur¨ ber Unterr¨ sprungsgerade entspricht dabei einem eindimensionalen Unterraum, eine Ebene durch den Ursprung einem zweidimensionalen. Denn sie wird von zwei Vektoren aufgespannt, die nicht gemeinsam auf einer Geraden durch den Ursprung liegen und damit linear unabh¨ angig sind. Beispiel 5.18 (Polynome vom Grad h¨ ochstens n) Wir zeigen, dass der Vektorraum der reellen Polynome vom Grad kleiner oder gleich n die Dimension n + 1 hat. Ein Erzeugendensystem ist durch die Monome gegeben: {1, x, x2 , x3 , . . . , xn }. Um zu zeigen, dass die Monome auch linear unabh¨ angig sind, m¨ ussen wir beweisen, dass a 0 · 1 + a1 · x + a 2 · x2 + · · · + a n · xn = 0
5.3 Informationsbits und Dimension
291
ullt ist, wenn a0 = a1 = · · · = an = 0 ist. Setzen wir x = 0 f¨ ur alle x ∈ R nur erf¨ ein, so sehen wir bereits, dass a0 = 0 sein muss. Beide Seiten der Gleichung beschreiben die gleiche konstante Funktion,die u ¨berall null ist, so dass auch die Ableitungen beider Seiten u ussen und null sind. Durch ¨ bereinstimmen m¨ Ableiten erhalten wir a1 + 2 · a2 · x + · · · + n · an · xn−1 = 0, so dass wir f¨ ur x = 0 auch a1 = 0 schließen. Erneutes Ableiten zeigt a2 = 0 usw. Wegen der Basis mit n + 1 Vektoren ist die Dimension n + 1. Wir betrachten in diesem Buch nur Vektorr¨ aume mit einer endlichen Diaume (wie mension n ∈ N0 . Es gibt aber auch unendlich-dimensionale Vektorr¨ beispielsweise der Vektorraum aller Polynome beliebigen Grades). Ein (n, k)-Code (siehe Seite 288) besitzt eine Basis mit k Vektoren, die Dimension des Codes ist also k – unabh¨ angig von der konkret gefundenen Basis. Satz 5.19 (Bedeutung der Dimension) Sei V ein Vektorraum der Dimension n > 0, d. h., V besitzt eine Basis aus n Vektoren. Dann gilt: a) Ein Erzeugendensystem hat mindestens n Vektoren. b) Es sind maximal n Vektoren linear unabh¨ angig. c) Hat man n Vektoren, die linear unabh¨ angig sind oder die ein Erzeugendensystem bilden, dann bilden sie auch eine Basis.
Beweis a) G¨ abe es ein Erzeugendensystem mit weniger als n Vektoren, dann h¨ atten wir nach Lemma 5.14 auch eine Basis mit weniger als n Vektoren – im Widerspruch zur Dimension n. onnen sie b) H¨ atten wir m > n linear unabh¨ angige Vektoren b1 , . . . , bm , so k¨ wegen dim V = n kein Erzeugendensystem bilden, da sie sonst bereits eine Basis mit zu vielen Vektoren w¨ aren. Sei {a1 , . . . , an } eine Basis. Wenn wir jeonnten, dann den Vektor dieser Basis mit den Vektoren b1 , . . . , bm erzeugen k¨ k¨ onnten wir unter Verwendung der dazu benutzen Linearkombinationen auch alle Vektoren aus V erzeugen. Daher l¨ asst sich mindestens ein Vektor ak nicht als Linearkombination von b1 , . . . , bm schreiben, d. h., cak +
m l=1
clbl = 0
292
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
angig sind, kann nur f¨ ur c = 0 gelten. Da aber die Vektoren bl linear unabh¨ m¨ ussen jetzt auch alle u ¨brigen Faktoren cl = 0 sein. Damit haben wir schon m + 1 linear unabh¨ angige Vektoren gefunden. Auf die gleiche Weise k¨ onnen wir unter Beibehaltung der linearen Unabh¨ angigkeit weitere Vektoren der Basis hinzuf¨ ugen, bis wir schließlich doch ein Erzeugendensystem und damit eine Basis mit mehr als m > n Vektoren haben – Widerspruch. c) Wir u angige Vektoren ein Erzeu¨ berlegen uns zuerst, dass n linear unabh¨ gendensystem und damit eine Basis bilden. Nach b) sind n + 1 Vektoren linear abh¨ angig. Wenn wir also einen beliebigen Vektor b ∈ V zu den n unabh¨ angigen Vektoren hinzuf¨ ugen, dann l¨ asst sich damit der Nullvektor nichttrivial als Linearkombination schreiben. Dabei muss der Faktor zu b ungleich null sein, da sonst die gegebenen n Vektoren nicht linear unabh¨ angig w¨ aren. Damit k¨ onnen wir aber die Darstellung des Nullvektors nach b aufl¨ osen und sehen, dass b als Linearkombination der n linear unabh¨ angigen Vektoren geschrieben werden kann, die damit ein Erzeugendensystem bilden. Jetzt m¨ ussen wir noch zeigen, dass die Vektoren eines Erzeugendensystems mit n Vektoren linear unabh¨ angig sind und damit eine Basis ergeben. Nach a) ben¨ otigen wir f¨ ur ein Erzeugendensystem mindestens n Vektoren. W¨ aren die gegebenen n Vektoren des Erzeugendensystems nicht linear unabh¨ angig, so k¨ onnte man einen als Linearkombination der anderen schreiben. Wenn wir ihn weglassen, haben wir noch immer ein Erzeugendensystem – aber mit ussen die Vektoren bereits n − 1 und damit zu wenigen Vektoren. Folglich m¨ linear unabh¨ angig sein.
Aufgabe 5.5 a) Der Code C ⊂ B5 werde als Unterraum des (B5 , ⊕, B, ) durch die Vektoren (1, 1, 0, 0, 1), (1, 1, 1, 0, 1) und (0, 0, 1, 0, 0) erzeugt. Welche Dimension hat der Code? uber dem K¨ orper Z5 b) Welche Dimension hat der Vektorraum (Z45 , +, Z5 , ·) ¨ (vgl. Seite 167)? uber dem K¨ orper c) Wir fassen die reellen Zahlen als Vektorraum (R, +; Q, ·) ¨ der rationalen Zahlen auf, d. h., die Vektoren sind reelle Zahlen und die Skalare, mit denen wir multiplizieren d¨ urfen, sind ausschließlich Br¨ uche. Da das Produkt einer rationalen mit einer reellen Zahl wieder eine reelle Zahl ist, ergeben sich Vektorraumaxiome aus den Rechenregeln in R. i) Sind die Vektoren 1 und 2 linear unabh¨ angig? Beweisen Sie ihre Aussage. ii) Zeigen Sie, dass die Vektoren 4711 und π linear unabh¨ angig sind. iii)Welche Dimension hat der von den Vektoren 1, 2, 4711 und π erzeugte Unterraum?
5.4 Matrizen und Gleichungssysteme
5.4
293
Matrizen und Gleichungssysteme
In diesem Abschnitt werden wir zum Codieren und Decodieren Matrizen verwenden und insbesondere zum Decodieren lineare Gleichungssysteme l¨ osen. Bevor wir uns mit diesen Themen systematisch besch¨ aftigen, betrachten wir zum Aufw¨ armen ein kleines Gleichungssystem: 2 · x1 + 3 · x2 = 8 ∧
4 · x1 − 2 · x2 = 0.
(5.8)
Das Gleichungssystem heißt linear, da jede Gleichung auf der linken Seite aus einer Linearkombination (siehe Seite 282) der Variablen besteht und rechts nur Konstante stehen. Linearkombination bedeutet insbesondere, dass die Variablen nicht mit einer Zahl ungleich eins potenziert oder als Argument komplizierterer Funktionen als f (x) = x auftreten d¨ urfen. So ist x21 + x32 = 8 keine lineare Gleichung. Wir suchen L¨ osungen (x1 , x2 ) ∈ R2 , die beide Gleichungen von (5.8) gemeinsam erf¨ ullen. Jede einzelne Gleichung beschreibt eine Gerade in der Ebene. So ist die L¨ osungsmenge der ersten Gleichung die Menge der Punkte (x1 , x2 ) mit 8 osungen der zweiten Gleichung erf¨ ullen die Gex2 = 3 − 23 ·x1 , x1 ∈ R, und die L¨ osung beider Gleichungen radengleichung x2 = 2 · x1 , x1 ∈ R. Die gemeinsame L¨ ist der Schnittpunkt (1, 2), siehe Abbildung 5.3. Wir erhalten die L¨ osung z. B., oste zweite Gleichung f¨ ur x2 in die erste Gleichung indem wir die nach x2 aufgel¨ einsetzen: 2x1 + 3x2 = 8 ∧ x2 = 2x1
⇐⇒
2x1 + 3(2x1 ) = 8 ∧ x2 = 2x1
⇐⇒
x1 = 1 ∧ x2 = 2.
x2 2
1
x1
Abb. 5.3 Die Geraden zu x2 = den sich im Punkt (1, 2)
8 3
− 23 · x1 und x2 = 2 · x1 schnei-
Prinzipiell k¨ onnen die Geraden gleich sein, sich wie hier in genau einem Punkt schneiden oder parallel liegen und keinen gemeinsamen Punkt haben. Genau diese drei F¨ alle beobachtet man auch bei L¨ osungsmengen von linearen Gleichungssystemen. Gleichungssysteme lassen sich mit der soeben praktizierten Einsetzungsmethode l¨ osen. Allerdings wird diese un¨ ubersichtlich, wenn mehr als zwei Variablen vorkommen. Daher verwendet man das Gauß-Verfahren, bei dem Gleichungen mit Zahlen multipliziert und durch die Summe mit anderen Gleichungen ersetzt
294
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
werden d¨ urfen. Wie wir sp¨ ater sehen werden, l¨ asst sich das Gauß-Verfahren algorithmisch einfach durchf¨ uhren. Analog zur Einsetzungemethode erhalten wir das Ergebnis mit Gauß-Umformungen, indem wir von der ersten Gleichung 32 mal die zweite addieren, um x2 zu eliminieren: 2 · x1 +3 · x2 = 8 ∧ 4 · x1 −2 · x2 = 0
⇐⇒ ⇐⇒
8 · x1
= 8
∧ 4 · x1 −2 · x2 = 0 = 1
x1 ∧
−2 · x2 = −4
⇐⇒ ⇐⇒
x1
= 1
∧ 4 · x1 −2 · x2 = 0 x1 ∧
= 1 x2 = 2.
Im zweiten Schritt haben wir die erste Gleichung mit 18 multipliziert und danach das Vierfache des Ergebnisses von der zweiten subtrahiert. Schließlich haben wir im letzten Schritt die zweite Gleichung mit − 12 multipliziert. Wir werden uns das Gauß-Verfahren wesentlich genauer ansehen und systematischer benutzen. Bevor wir damit beginnen, besch¨ aftigen wir uns aber etwas intensiver mit Matrizen. Relevant f¨ ur die L¨ osung des Beispielsystems sind nur die Koeffizienten 2, 3, 4 und −2, die wir u ¨ ber eine Matrix A schreiben werden, sowie die rechte Seite bestehend aus 8 und 0, die wir als Spaltenvektor b darstellen. Nur diese Daten m¨ ussen gespeichert und vom Gauß-Algorithmus verwendet werden: 2 3 8 , b= . A= 4 −2 0
5.4.1
Matrizen und die Generatormatrix eines linearen Codes
Wir haben Matrizen schon kurz zum Speichern von Kanten eines Graphen benutzt (vgl. Seite 64), besch¨ aftigen uns jetzt aber etwas gr¨ undlicher mit ihnen. Ein rechteckiges Zahlenschema
⎛
a1,1
a1,2 . . . a1,n
⎞
⎜ ⎟ ⎜ a2,1 a2,2 . . . a2,n ⎟ ⎜ ⎟ A := ⎜ , .. .. .. ⎟ ⎜ ⎟ . . . ⎝ ⎠ am,1 am,2 . . . am,n bei dem m · n Zahlen in m Zeilen und n Spalten angeordnet sind, heißt eine (m × n)-Matrix. Jede Komponente ai,k der Matrix wird mit zwei Indizes adressiert, zun¨ achst schreiben wir den Zeilenindex i = 1, . . . , m und dann den
5.4 Matrizen und Gleichungssysteme
295
Spaltenindex k = 1, . . . , n. Die Zeilen von A sind Ai• = (ai,1 , ai,2 , . . . , ai,n ), i = 1, . . . , m. Die Spalten von A sind ⎛ ⎞ a1,k ⎜ . ⎟ . ⎟ A•k = ⎜ ⎝ . ⎠ , k = 1, . . . , n. am,k Zeilenzahl m und Spaltenzahl n bilden das Format (m × n) von A. Wenn die gleiche Zeilen- und Spaltenzahl vorliegt, nennen wir eine Matrix quadratisch. Die Menge aller (m × n)-Matrizen mit Komponenten aus einem K¨ orper K heißt K m×n . Wir betrachten hier Matrizen aus Rm×n und Bm×n und werden sie mit fett gedruckten Großbuchstaben benennen. Die Hauptdiagonale einer (m×n)Matrix A besteht aus den Komponenten a1,1 , a2,2 , . . . , ai,i , i = min{m, n}, bei denen Zeilen- und Spaltenindex u ¨ bereinstimmen. Eine (1 × n)-Matrix mit nur einer Zeile ist identisch mit einem Zeilenvektor aus (K n , +; K, ·). Eine (m × 1)-Matrix hat nur eine Spalte, sie ist ein Spaltenvektor aus (K m , +; K, ·). Bei der Multiplikation von Matrizen und Vektoren wird es formal wichtig sein, ob wir einen Zeilen- oder Spaltenvektor haben. Eine Diagonalmatrix D ist eine (m × n)-Matrix, bei der nur die Hauptdiaurfen: gonalkomponenten d1 , . . . , dmin{m,n} von null verschieden sein d¨ ⎛ ⎞ ⎛ ⎞ d1 0 . . . 0 0 0 1 0 ... 0 ⎜ ⎟ ⎜ ⎟ ⎜ 0 d2 . . . 0 0 0 ⎟ ⎜ 0 1 ... 0 ⎟ ⎜ ⎟ ⎜ ⎟ D=⎜ . . . , En := ⎜ . . . . .. ⎟ .. .. .. ⎟ ⎜ .. .. . . ⎟ ⎜ ⎟ . . . . . . . . . . ⎝ ⎠ ⎝ ⎠ 0 0 ... 1 0 0 . . . dm 0 0 Ein sehr wichtiger Spezialfall ist die (n × n)-Einheitsmatrix En (oder kurz E, wenn die u ¨ bereinstimmende Anzahl der Zeilen- und Spalten aus dem Zusammenhang bekannt ist), bei der alle Diagonalkomponenten gleich eins sind. Wir werden sehen, dass sich das L¨ osen vieler Gleichungssysteme auf das Umformen von (m × n)-Matrizen zu Diagonalmatrizen zur¨ uckf¨ uhren l¨ asst. Dabei brauchen wir aber unter Umst¨ anden gar nicht die volle Diagonalstruktur, sondern uns reichen Nullen unterhalb (d. h. links) oder oberhalb (d. h. rechts) der Hauptdiagonalen und sprechen dann von einer oberen (rechten) oder unteren (linken) Dreiecksmatrix. Dabei erlauben wir aber auch weitere Nullen, z. B. auf der Hauptdiagonalen. Die Bezeichnung ist also genau entgegengesetzt zum Auftreten der Nullen, da das Dreieck durch die Eintr¨ age gebildet wird, die nicht null sein m¨ ussen: ⎛ ⎞ ⎛ ⎞ 1 2 3 4 1 0 0 ⎜ ⎟ ⎜ ⎟ ⎜ 0 5 6 7 ⎟ ist obere rechte, ⎜ 2 3 0 ⎟ ist untere linke Dreiecksmatrix. ⎝ ⎠ ⎝ ⎠ 0 0 8 9 4 5 6
296
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
F¨ ur eine platzsparende Schreibweise sowie zur Anpassung des Formats f¨ ur die weiter unten beschriebene Matrixmultiplikation ben¨ otigen wir auch noch den Begriff transponierte Matrix. Zur Matrix A ∈ K m×n entsteht die transponierte Matrix A ∈ K n×m , indem wir aus der ersten Zeile die erste Spalte, aus der zweiten Zeile die zweite Spalte usw. machen. Dadurch werden andererseits aus den Spalten von A die Zeilen von A . Beispielsweise ist ⎛ ⎞ ⎛ ⎞ 1 4 1 ⎜ ⎟ ⎜ ⎟ 1 2 1 3 1 2 3 ⎜ ⎟ ⎜ = , = ⎝ 2 5 ⎠ , (1, 2, 3) = ⎝ 2 ⎟ ⎠. 3 4 2 4 4 5 6 3 6 3 Damit k¨ onnen wir z. B. Spaltenvektoren platzsparend in eine Zeile schreiben. Wir f¨ uhren jetzt Rechenoperationen f¨ ur Matrizen u orper K ein: ¨ber einem K¨ Es seien A und B zwei (m×n)-Matrizen und r ∈ K ein Skalar. Die Summe A+ B und das skalare Vielfache r · A ist komponentenweise definiert. Die Matrizen A und B m¨ ussen daher bei der Addition ein u ¨ bereinstimmendes Format haben. Beispielsweise ist f¨ ur K = R 1 2 3 7 8 9 1+7 2+8 3+9 + = , 4 5 6 10 11 12 4 + 10 5 + 11 6 + 12 1 2 3·1 3·2 3· = . 3 4 3·3 3·4 Aufgabe 5.6 Zeigen Sie, dass die (m × n)-Matrizen ¨ uber K hinsichtlich der Addition eine kommutative Gruppe bilden und dass (K m×n , +; K, ·) ein Vektorraum ist. Matrizen k¨ onnen wir auch Multiplizieren, allerdings muss dabei die Anzahl der Spalten der ersten mit der Anzahl der Zeilen der zweiten Matrix u ¨ bereinstimmen: ⎛ ⎞⎛ ⎞ ⎛ ⎞ 1 2 3 10 11 1 · 10 + 2 · 12 + 3 · 14 1 · 11 + 2 · 13 + 3 · 15 ⎜ ⎟⎜ ⎟ ⎜ ⎟ ⎜ 4 5 6 ⎟ · ⎜ 12 13 ⎟ = ⎜4 · 10 + 5 · 12 + 6 · 14 4 · 11 + 5 · 13 + 6 · 15 ⎟ ⎝ ⎠⎝ ⎠ ⎝ ⎠. 7 8 9 14 15 7 · 10 + 8 · 12 + 9 · 14 7 · 11 + 8 · 13 + 9 · 15 Wir betrachten eine (l × m)-Matrix A und eine (m × n)-Matrix B. Das Produkt der Matrizen A und B ist eine (l × n)-Matrix, die entsteht, wenn wir die Elemente der Zeilen von A mit den Elementen der Spalten von B multiplizieren und die Produkte aufaddieren (Merkregel: Zeile · Spalte“). Bezeichnen wir die ” Ergebnismatrix mit C, dann berechnet sich ihre Komponente in der i-ten Zeile und j-ten Spalte zu ci,j = ai,1 · b1,j + ai,2 · b2,j + · · · + ai,m · bm,j =
m k=1
ai,k · bk,j .
5.4 Matrizen und Gleichungssysteme
297
Hier multiplizieren“ wir die i-te Zeile von A mit der j-ten Spalte von B, um ” die Komponente ci,j der Ergebnismatrix zu erhalten (siehe Algorithmus 5.1). Algorithmus 5.1 Multiplikation der (l × m)-Matrix A mit der (m × n)-Matrix B zur (l × n)-Matrix C for i := 1 bis l do Zeilenindex von A for j := 1 bis n do Spaltenindex von B ci,j := 0 for k := 1 bis m do Skalarprodukt von Zeile i und Spalte j ci,j := ci,j + ai,k · bk,j Die Multiplikation eines Zeilen- mit einem Spaltenvektor nennt man u ¨ brigens Skalarprodukt – das ist trotz des ¨ ahnlichen Namens etwas Anderes als das Produkt mit einem Skalar. Skalarprodukte werden auch zur Winkelberechnung eingesetzt, darauf gehen wir detailliert in Abschnitt 5.5 ein. Die (n × n)-Matrizen u orper K bilden hinsichtlich der Ad¨ ber einem K¨ dition und Matrixmultiplikation einen Ring. Das Einselement ist dabei die Einheitsmatrix En , und die Matrixmultiplikation ist insbesondere assoziativ: (A · B) · B = A · (B · C). Aber nicht jede Matrix A hat hinsichtlich der Multiplikation eine Inverse A−1 mit A · A−1 = E, z. B. −1 1 0 a1,1 a1,2 a1,1 a1,2 1 0 1 0 existiert · = = =⇒ nicht. 0 0 0 1 0 0 a2,1 a2,2 0 0 Außerdem ist das Matrixprodukt in der Regel auch nicht kommutativ: 0 1 1 2 3 4 1 2 0 1 2 1 · = , · = . 1 0 3 4 1 2 3 4 1 0 4 3 Aufgabe 5.7 Zeigen Sie, dass f¨ ur A ∈ K l×m und B ∈ K m×n gilt: (A · B) = B · A ∈ K n×l .
(5.9)
Definition 5.20 (Generatormatrix) Sei C ein linearer (n, k)-Code, d. h. ein linearer Code mit einer Basis oge. Schreiben wir {b1 , . . . , bk } ⊂ Bn , die aus Zeilenvektoren bestehen m¨ diese Zeilenvektoren als Zeilen in eine Matrix, dann heißt die entstehende Matrix G eine Generatormatrix von C: ⎛ ⎞ b1 ⎜ . ⎟ k,n . ⎟ G=⎜ ⎝ . ⎠∈B . bk
298
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
Die Generatormatrix zur Basis (5.7) ⎛ 0 ⎜ ⎜ G=⎝1 1
des Codes C aus Beispiel 5.2 lautet ⎞ 1 1 0 ⎟ (5.10) 0 1 0⎟ ⎠. 1 1 1
Wir k¨ onnen nun W¨ orter aus Bk codieren, indem wir sie als Zeilenvektor von links mit einer Generatormatrix multiplizieren. Wir multiplizieren also den Zeilenvektor mit allen Spalten der Matrix. Dabei wird jeweils die erste Komponente einer Spalte mit der ersten Komponente des Zeilenvektors, die zweite mit der zweiten usw. multipliziert. Das k¨ onnen wir aber auch als Bilden einer Linearkombination der Zeilen der Matrix auffassen, wobei wir mittels Unterstreichung und Fettdruck andeuten, ob die Komponenten aus dem Zeilenvektor oder der Matrix stammen: ⎛ ⎞ ⎛ ⎞ 0110 11 11 10 10 ⎜ ⎟ ⎜ ⎟ ⎟ ⎜ ⎟ (1, 1, 0) · ⎜ ⎝ 1010 ⎠ = ⎝ ⊕11 , ⊕10 , ⊕11 , ⊕10 ⎠ 1111 ⊕01 ⊕01 ⊕01 ⊕01 ⎫ ⎧ ⎪ 1 (0, 1, 1, 0) ⎪ ⎪ ⎪ ⎨ ⎬ =
= (1, 1, 0, 0), ⊕ 1 (1, 0, 1, 0) ⎪ ⎪ ⎪ ⎭ ⎩ ⊕ 0 (1, 1, 1, 1) ⎪
Wir verwenden Zeilenvektoren, da sie – wenn wir die Klammern und Kommata weglassen – an Worte erinnern, die u ¨ber einem Alphabet gebildet sind. Da die Basis insbesondere ein Erzeugendensystem des Codes ist, gilt: C = { x·G: x ∈ Bk }. F¨ ur jede Generatormatrix G ist die Codierung f = fG : Bk → C,
f ( x) = x · G
(5.11)
bijektiv, so dass aus der Codierung wieder das urspr¨ ungliche Wort ermittelt werden kann. Um zu zeigen, dass f bijektiv ist, m¨ ussen wir die Injektivit¨ at und Surjektivit¨ at zeigen (siehe Seite 54). Die Surjektivit¨ at ist offensichtlich, da die Zeilen von G den Raum C erzeugen und wir beim Codieren Linearkombinationen der Zeilen bilden. Die Injektivit¨ at folgt aus der Eindeutigkeit der Basisdarstellung (Satz 5.13) oder unmittelbar: Wenn zwei Worte x, y ∈ Bk auf das gleiche Code-Wort c ∈ C abgebildet werden, dann gilt, dass ( x− y)·G = x·G− y · G = c − c = 0
5.4 Matrizen und Gleichungssysteme
299
ist, x− y wird also als durch Multiplikation mit G als Nullvektor codiert. Die Multiplikation berechnet eine Linearkombination der Zeilen von G. Der Nullvektor kann aber nur als triviale Linearkombination der linear unabh¨ angigen Basisvektoren, die Zeilen von G sind, entstehen. Folglich muss x− y = 0 und damit x = y sein. Die Codierung f ist eine lineare Abbildung. Lineare Abbildungen erhalten Linearkombinationen. Darauf gehen wir in Abschnitt 5.6 ausf¨ uhrlich ein.
5.4.2
Gleichungssysteme
Mittels der Matrix- bzw. Matrix-Vektor-Multiplikation k¨ onnen wir nun lineare Gleichungssysteme sehr u ¨ bersichtlich schreiben als A· x = b at b ∈ K m und den Variablenvektor x ∈ K n . f¨ ur A ∈ K m×n , die Inhomogenit¨ So lautet das Gleichungssystem (5.8) von Seite 293 in Matrixschreibweise 2 3 x1 8 · = . 4 −2 0 x2 Die einzelnen Gleichungen entstehen durch einen komponentenweisen Vergleich der Vektoren auf beiden Seiten des Gleichheitszeichens. Ist b = 0, also A · x = 0, so sprechen wir von einem homogenen linearen Gleichungssystem, anderenfalls von einem inhomogenen. Entsprechend nennen wir zugeh¨ orige L¨ osungen homogene oder inhomogene L¨ osungen. Wenn wir mittels einer Generatormatrix G codieren, dann m¨ ochten wir die ¨ (nicht durch Ubertragungsfehler gest¨ orten) Codew¨ orter auch wieder decodieren. Dass das gelingt, wissen wir, denn die Codierung ist bijektiv. Wenn wir nun konkret f¨ ur G aus (5.10) zu einem Codewort (0, 1, 0, 1) das Ursprungswort ussen wir ein lineares Gleichungssystem (x1 , x2 , x3 ) aus B3 bestimmen wollen, m¨ l¨ osen. Wie zuvor schreiben wir das Produkt eines Vektors mit einer Matrix mit ·“, w¨ ahrend die beim Ausrechnen dieses Produkts verwendeten Vektorraum” verkn¨ upfungen ⊕ und sind. Wegen (A · B) = B · A aus (5.9) gilt: ⎛ ⎞ 0 1 1 0 ⎜ ⎟ ⎟ (x1 , x2 , x3 ) · ⎜ (5.12) ⎝ 1 0 1 0 ⎠ = (0, 1, 0, 1) 1 1 1 1 ⎛ ⎞ ⎛ ⎞ ⎛ ⎞ 0 x1 ⊕ 1 x2 ⊕ 1 x3 = 0 0 0 1 1 x1 ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ 1 0 1 (5.9) ⎟ · ⎜ x2 ⎟ = ⎜ 1 ⎟ ⇐⇒ ∧ 1 x1 ⊕ 0 x2 ⊕ 1 x3 = 1 ⇐⇒ ⎜ ⎟⎝ ⎜ ⎠ ⎜0⎟ ∧ 1 x1 ⊕ 1 x2 ⊕ 1 x3 = 0 ⎝ ⎠ ⎝1 1 1⎠ x3 0 0 1 1 ∧ 0 x1 ⊕ 0 x2 ⊕ 1 x3 = 1.
300
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
In der letzten Zeile sehen wir ein Gleichungssystem einmal in Matrix- und einmal in der klassischen Schreibweise u ¨ ber Gleichungen. Wie die erste Zeile dieses Beispiels zur Decodierung zeigt, k¨ onnten wir alternativ Gleichungssysteme auch ur die Variablen und die Inhomoin der Form x ·A = b mit Zeilenvektoren f¨ genit¨ at schreiben. Das ist aber nicht so verbreitet. Auch sehen wir, dass in den Anwendungen Gleichungssysteme auftreten, bei denen die Anzahl der Variablen (hier 3) nicht mit der Anzahl der Gleichungen (hier 4) u ¨ bereinstimmt. Wir werden (5.12) mit dem Gauß-Algorithmus l¨ osen. Da allerdings sowohl das Eingangsbeispiel (5.8) mit nur zwei Variablen als auch der beim Decodierungsproblem verwendete K¨ orper B mit nur zwei Zahlen den Algorithmus unterfordern, stellen wir ihn anhand des folgenden Gleichungssystems u ¨ ber R vor: ⎛ ⎞ ⎛ ⎞ ⎛ ⎞ 3x1 + 6x2 + 9x3 = 9 3 6 9 x1 9 ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ 1 4 5 ⎟ · ⎜ x2 ⎟ = ⎜ 3 ⎟ ⇐⇒ ∧ x1 + 4x2 + 5x3 = 3 (5.13) ⎝ ⎠ ⎝ ⎠ ⎝ ⎠ 2 5 7 6 ∧ 2x1 + 5x2 + 7x3 = 6. x3 Die L¨ osungsmenge eines linearen Gleichungssystems ¨ andert sich nicht, wenn wir zu einer Gleichung eine Linearkombination von anderen Gleichungen addieren (also eine Summe von Vielfachen anderer Gleichungen), denn wir addieren dann auf beide Seiten der Gleichung den gleichen Wert. Außerdem d¨ urfen wir eine Gleichung mit einer Zahl c ∈ K, c = 0, multiplizieren. Hier m¨ ussen wir aber c = 0 ausschließen, denn das ließe sich nicht r¨ uckg¨ angig machen – aus der Gleichung w¨ urde 0 = 0. Durch den Wegfall der Gleichung k¨ onnte sich die L¨ osungsmenge vergr¨ oßern, da wir weniger Bedingungen erf¨ ullen m¨ ussen. Schließlich ist v¨ ollig klar, dass die Reihenfolge der Gleichungen keine Rolle spielt. Sie darf also beliebig ge¨ andert werden. Der Gauß-Algorithmus verwendet nun genau diese elementaren Zeilenumformungen Addition eines Vielfachen einer anderen Gleichung, Multiplikation einer Gleichung mit c = 0 und Vertauschen von zwei Gleichungen, um damit die Matrix eines Gleichungssystems A · x = b in eine sogenannte normierte Zeilenstufenform zu bringen. Eine normierte Zeilenstufenform ist eine obere Dreiecksmatrix, bei der in jeder Zeile die erste von null verschiedene Komponente eine Eins ist. In der Spalte
5.4 Matrizen und Gleichungssysteme dieser Eins sind alle anderen Komponenten nicht-quadratische Matrix in dieser Form ist ⎛ 1 z1 0 0 z2 ⎜ ⎜ 0 0 1 0 z3 ⎜ ⎜ ⎜ 0 0 0 1 z4 Z=⎜ ⎜ ⎜0 0 0 0 0 ⎜ ⎜0 0 0 0 0 ⎝ 0 0 0 0 0
301
gleich null. Ein Beispiel f¨ ur eine
0 z5
⎞
⎟ 0 z6 ⎟ ⎟ ⎟ 0 z7 ⎟ ⎟. ⎟ 1 z8 ⎟ ⎟ 0 0⎟ ⎠ 0 0
Wie wir mit dem Gauß-Algorithmus mittels Zeilenumformungen f¨ ur jedes Gleichungssystem A x = b ein ¨ aquivalentes Gleichungssystem Z x = c mit einer onnen, sehen wir Matrix Z ∈ K m×n in normierter Zeilenstufenform berechnen k¨ uns sp¨ ater an. Zun¨ achst lesen wir an der Darstellung Z x = c die L¨ osungsmenge ab: Hat c eine von null verschiedene Komponente zu einer Nullzeile von Z, dann gibt es keine L¨ osung. Im Beispiel ist das bei c = (c1 , . . . , c6 ) der Fall, wenn c5 = 0 oder c6 = 0 ist, da wir Gleichungen 0 = c5 und 0 = c6 haben. Anderenfalls sind zwei F¨ alle zu unterscheiden: agen, d. h., alle – Gibt es keine Spalten in Z mit den hier zk genannten Eintr¨ Spalten entsprechen unterschiedlichen Standard-Einheitsvektoren, dann ist die L¨ osung eindeutig. Insbesondere im Fall einer quadratischen Matrix n×n (gleich viele Variablen und Gleichungen) ist das genau der A ∈ K Fall, in dem die Einheitsmatrix entsteht. agen, dann gibt es mehrere – Gibt es dagegen eine Spalte mit zk -Eintr¨ L¨ osungen, da die Variablen zu den zk -Spalten (im Beispiel sind dies x2 , x5 und x7 ) beliebig gew¨ ahlt werden k¨ onnen. Die Gleichungen k¨ onnen nach Wahl dieser zk -Variablen wie unten in (5.14) nach den verbleibenden Variablen (hier x1 , x3 , x4 und x6 ) umgestellt werden, so dass sich diese ur die Variaeindeutig aus den Werten der zk -Variablen ergeben. Stehen f¨ ugung, dann gibt es blen unendliche viele Skalare wie bei K = R zur Verf¨ direkt unendlich viele L¨ osungen. Im Beispiel mit Z · x = c lesen wir die L¨ osungsmenge ab: Wir k¨ onnen x2 , ahlen und erhalten x5 und x7 als Variablen zu den zk -Spalten beliebig w¨ durch Aufl¨ osen der Gleichungen f¨ ur die u ¨brigen Variablen x1 + z1 x2 + z2 x5 + z5 x7 = c1 ⇐⇒ x1 = c1 − z1 x2 − z2 x5 − z5 x7 x3 + z3 x5 + z6 x7 = c2 ⇐⇒ x3 = c2 − z3 x5 − z6 x7 x4 + z4 x5 + z7 x7 = c3 ⇐⇒ x4 = c3 − z4 x5 − z7 x7 x6 + z8 x7 = c4 ⇐⇒ x6 = c4 − z8 x7 . (5.14)
302
5 Ausgew¨ ahlte Kapitel der Linearen Algebra Damit k¨ onnen wir alle L¨ osungen x als Linearkombinationen angeben, inahlen: dem wir x2 , x5 , x7 ∈ R beliebig w¨ ⎛ ⎛ ⎞ ⎛ ⎞ ⎞ ⎞ ⎛ ⎞ ⎛ x1 c1 −z1 −z2 −z5 ⎜ ⎜ ⎟ ⎜ ⎟ ⎟ ⎟ ⎜ ⎟ ⎜ ⎜ 1 ⎟ ⎜x ⎟ ⎜ 0 ⎟ ⎜ 0 ⎟ ⎜ 0 ⎟ ⎜ ⎜ 2⎟ ⎜ ⎟ ⎟ ⎟ ⎜ ⎟ ⎜ ⎜ ⎜ ⎟ ⎜ ⎟ ⎟ ⎟ ⎜ ⎟ ⎜ ⎜ 0 ⎟ ⎜ x3 ⎟ ⎜ c2 ⎟ ⎜ −z3 ⎟ ⎜ −z6 ⎟ ⎜ ⎜ ⎟ ⎜ ⎟ ⎟ ⎟ ⎜ ⎟ ⎜ ⎜ ⎜ ⎟ ⎜ ⎟ ⎟ ⎟ ⎜ ⎟ ⎜ ⎜ x4 ⎟ = ⎜ c3 ⎟ + x2 ⎜ 0 ⎟ + x5 ⎜ −z4 ⎟ + x7 ⎜ −z7 ⎟ . ⎜ ⎜ ⎟ ⎜ ⎟ ⎟ ⎟ ⎜ ⎟ ⎜ ⎜ 0 ⎟ ⎜x ⎟ ⎜ 0 ⎟ ⎜ 1 ⎟ ⎜ 0 ⎟ ⎜ ⎜ 5⎟ ⎜ ⎟ ⎟ ⎟ ⎜ ⎟ ⎜ ⎜ ⎜ ⎟ ⎜ ⎟ ⎟ ⎟ ⎜ ⎟ ⎜ ⎜ 0 ⎟ ⎜ x6 ⎟ ⎜ c4 ⎟ ⎜ 0 ⎟ ⎜ −z8 ⎟ ⎝ ⎝ ⎠ ⎝ ⎠ ⎠ ⎠ ⎝ ⎠ ⎝ 0 0 x7 0 1
Algorithmus 5.2 ist tats¨ achlich ein Verfahren, dass die Matrix des Gleichungssystems in eine normierte Zeilenstufenform u uhrt, so dass wir alle L¨ osungen ¨ berf¨ ablesen k¨ onnen. Jetzt machen wir uns am Beispiel 5.13 f¨ ur den Fall m = n = 3 klar, dass er dies wirklich tut. Algorithmus 5.2 Gauß-Algorithmus f¨ ur lineare Gleichungssysteme mit m × nMatrix A u orper K: Am Ende des Algorithmus ist A in normierter ¨ ber einem K¨ Zeilenstufenform und b die passende Inhomogenit¨ at. 1: z := 1, s := 1 z ist Zeilen-, s ist Spaltenindex 2: while (z ≤ m) ∧ (s ≤ n) do 3: if az,s = az+1,s = · · · = am,s = 0 then 4: s := s + 1 gleiche Zeile, n¨ achste Spalte 5: else In der Spalte gibt es ein aj,s = 0, j ≥ z: 6: if az,s = 0 then 7: Tausche Gleichung z gegen eine j-te, z + 1 ≤ j ≤ m, mit aj,s = 0. 8: 9: 10: 11: 12: 13: 14: 15: 16:
for j := s + 1 bis n do az,j := az,j /az,s
Dividiere Zeile durch az,s
bz := bz /az,s , az,s := 1 for l := 1 bis m, l = z do Subtrahiere Vielfache der neuen z-ten Zeile von den anderen for j := s + 1 bis n do al,j := al,j − al,s · az,j bl := bl − al,s · bz , al,s := 0 z := z + 1, s := s + 1
n¨ achste Zeile und n¨ achste Spalte
Da in Zeile 6 des Algorithmus a1,1 = 3 = 0 ist, wird die erste Zeile der Matrix und der Inhomogenit¨ at in den Algorithmuszeilen 8, 9 und 10 durch
5.4 Matrizen und Gleichungssysteme
303
ur, dass a1,1 = 1 wird, Multiplikation mit 13 normiert. Die Normierung sorgt daf¨ wie in der Definition der normierten Zeilenstufenform gefordert ist. Wir erhalten ⎛ ⎞ ⎛ ⎞ ⎛ ⎞ ⎛ ⎞ ⎛ ⎞ ⎛ ⎞ 3 6 9 x1 9 1 2 3 x1 3 ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎜ 1 4 5 ⎟ · ⎜ x2 ⎟ = ⎜ 3 ⎟ ⇐⇒ ⎜ 1 4 5 ⎟ · ⎜ x2 ⎟ = ⎜ 3 ⎟ . ⎝ ⎝ ⎠ ⎝ ⎠ ⎝ ⎠ ⎠ ⎝ ⎠ ⎝ ⎠ 2 5 7 x3 6 2 5 7 x3 6 Mit der Schleife in Zeile 11 werden Vielfache der ersten Gleichung von den anderen abgezogen (n¨ amlich einmal die erste von der zweiten und zweimal die erste Gleichung von der dritten), so dass in der ersten Spalte jeweils eine Null entsteht: ⎛ ⎞ ⎛ ⎞ ⎛ ⎞ 1 2 3 x1 3 ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ 0 2 2 ⎟ · ⎜ x2 ⎟ = ⎜ 0 ⎟ . ⎝ ⎠ ⎝ ⎠ ⎝ ⎠ 0 1 1 0 x3 Jetzt ist die erste Spalte fertig, und wir wechseln zur zweiten. Dort finden wir a2,2 = 2 vor, so dass die zweite Zeile durch Multiplikation mit 12 normiert wird. Anschließend subtrahieren wir wieder Vielfache dieser Zeile von den anderen, um Nullen zu erzeugen: ⎛ ⎞ ⎛ ⎞ ⎛ ⎞ ⎛ ⎞ ⎛ ⎞ ⎛ ⎞ 1 2 3 x1 3 1 0 1 x1 3 ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ 0 1 1 ⎟ · ⎜ x2 ⎟ = ⎜ 0 ⎟ ⇐⇒ ⎜ 0 1 1 ⎟ · ⎜ x2 ⎟ = ⎜ 0 ⎟ . ⎝ ⎠ ⎝ ⎠ ⎝ ⎠ ⎝ ⎠ ⎝ ⎠ ⎝ ⎠ 0 1 1 0 0 0 0 0 x3 x3 abe es weitere Nach dem Wechsel zur dritten Spalte finden wir a3,3 = 0 vor. G¨ Zeilen, dann w¨ urden wir mit einer Zeile tauschen, die in der dritten Spalte keine Null hat. So f¨ uhrt aber die Abfrage in Zeile 3 des Algorithmus dazu, dass wir zur n¨ achsten Spalte wechseln, die es aber nicht mehr gibt. Wir sind damit fertig und haben tats¨ achlich eine normierte Zeilenstufenform erzeugt, bei der eine Gleichung zu 0 = 0 weggefallen ist. Diese legt nahe, dass wir die Variable x3 beliebig w¨ ahlen (zk -Spalte) und in Abh¨ angigkeit davon die anderen bestimmen: Wir stellen also x1 + x3 = 3 ∧ x2 + x3 = 0 nach x1 und x2 um: x1 = 3 − x3 ∧ osungen lauten also x2 = −x3 . Die L¨ ⎛ ⎞ ⎛ ⎞ ⎛ ⎞ x1 3 −1 ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ x2 ⎟ = ⎜ 0 ⎟ + x3 · ⎜ −1 ⎟ , x3 ∈ R. ⎝ ⎠ ⎝ ⎠ ⎝ ⎠ 0 1 x3 Der Algorithmus tauscht in Zeile 7 gegebenenfalls gegen eine nachfolgende Zeile, die einen Eintrag ungleich null in der aktuellen Spalte hat. Wir machen das, weil wir einen Eintrag ungleich null ben¨ otigen, um damit Nullen in den nachfolgenden und vorangehenden Zeilen zu erzeugen. Im Beispiel war das nicht erforderlich. Wird mit reellen Zahlen gerechnet, dann sollte ein Austausch aber
304
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
auch dann stattfinden, wenn az,s = 0 ist. Hinsichtlich der Rundungsfehler erweist es sich hier als g¨ unstig, wenn die aktuelle Zeile stets mit einer Zeile j ausgetauscht wird, f¨ ur die |aj,s|, z ≤ j ≤ m, maximal ist. Der maximale Wert heißt hier auch wieder Pivot-Element. Beim manuellen Rechnen sollte dagegen mit einer Zeile getauscht werden, f¨ ur die m¨ oglichst einfache Zahlenwerte entstehen. Hier k¨ onnen wir dann auch auf eine Normierung verzichten. Wir l¨ osen nun auch das Gleichungssystem (5.12) mit dem Gauß-Algorithmus. Da wir schreibfaul sind, f¨ allt uns aber zuvor etwas auf: Durch die GaußUmformungen wird der Variablenvektor nicht ver¨ andert. Wir k¨ onnen ihn also w¨ ahrend der Berechnung weglassen. Dazu verwenden wir ein erweitertes MatrixSchema, bei dem wir die Inhomogenit¨ at durch einen Strich von der Matrix abtrennen. Damit wird aus dem Gleichungssystem (5.12) in Kurzschreibweise das links dargestellte Schema, f¨ ur das wir im ersten Schritt die ersten beiden Zeilen vertauschen (A) und dann die neue erste Zeile von der Dritten subtrahieren (B):
⎡
0 1 1 0
⎤
⎡
1 0 1 1
⎤
⎡
1 0 1 1
⎤
⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ 1 0 1 1 ⎥ (A) ⎢ 0 1 1 0 ⎥ (B) ⎢ 0 1 1 0 ⎥ ⎢ ⎥ ⇐⇒ ⎢ ⎥ ⇐⇒ ⎢ ⎥. ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎣1 1 1 0⎦ ⎣0 1 0 1⎦ ⎣1 1 1 0⎦ 0 0 1 1
0 0 1 1
0 0 1 1
Da in B dass additive Inverse zu 1 ebenfalls 1 ist, also −1 = 1, sind Addition und Subtraktion identisch. Daher k¨ onnen wir Schritt (B) auch als Addition der ersten Zeile zur dritten auffassen. Auch m¨ ussen wir uns wegen B nicht um die im Algorithmus durchgef¨ uhrte Normierung (Zeilen 8 – 10 in Algorithmus 5.2) k¨ ummern. Die jetzige zweite Zeile m¨ ussen wir mit keiner anderen tauschen. Im dritten Schritt k¨ onnen wir direkt diese Zeile von der dritten abziehen. Schließlich subtrahieren wir die dritte Zeile von allen anderen (C):
⎡
1 0 1 1
⎤
⎡
1 0 0 0
⎤
⎛
1 0 0
⎞
⎛
⎞
⎛
0
⎞
x1 ⎢ ⎥ ⎥ ⎢ ⎜ ⎟ ⎜ ⎟ ⎢ 0 1 1 0 ⎥ (C) ⎢ 0 1 0 1 ⎥ (D) ⎜ 0 1 0 ⎟ ⎜ ⎟ ⎜ ⎟ ⎢ ⎥ ⇐⇒ ⎢ ⎥ ⇐⇒ ⎜ ⎟ · ⎜ x2 ⎟ = ⎜ 1 ⎟ . ⎢ ⎥ ⎥ ⎢ ⎜ ⎟ ⎝ ⎠ ⎜1⎟ ⎣0 0 1 1⎦ ⎣0 0 1 1⎦ ⎝0 0 1⎠ ⎝ ⎠ x3 0 0 1 1 0 0 0 0 0 0 0 0 Jetzt haben wir eine Zeilenstufenform erreicht und l¨ osen mit (D) die Kurzschreibweise auf. Nun k¨ onnen wir die hier eindeutige L¨ osung wieder u ¨ ber einen Vergleich des Matrix-Vektor-Produkts und der rechten Seite ablesen: x1 = 0 ∧ x2 = x3 = 1. Der Vektor (0, 1, 1) ∈ B3 wird also u ¨ ber die Generatormatrix G aus (5.10) auf das gegebene Codewort (0, 1, 0, 1) abgebildet. Dass wir richtig gerechnet haben, k¨ onnen Sie durch Multiplikation mit G nachpr¨ ufen.
5.4 Matrizen und Gleichungssysteme
305
Wir wiederholen schließlich noch das Gauß-Verfahren f¨ ur (5.8) von Seite 293 uchen verzichten wir auf eine Normierung u ¨ ber K = R. Zur Vermeidung von Br¨ und die Verwendung eines Pivot-Elements f¨ ur die erste Spalte. Subtraktion des Doppelten der ersten von der zweiten Zeile und anschließende Multiplikation der zweiten Zeile mit −1/8 ergibt
2
3 8
⇐⇒
4 −2 0
2
3
8
0 −8 −16
⇐⇒
2 3 8
.
0 1 2
Nun subtrahieren wir das Dreifache der zweiten von der ersten Zeile und multiplizieren diese anschließend mit 1/2:
2 3 8
⇐⇒
0 1 2
2 0 2
⇐⇒
0 1 2
1 0 1
.
0 1 2
Jetzt k¨ onnen wir die bereits bekannte L¨ osung x1 = 1 und x2 = 2 ablesen. Informatikerinnen sind immer an der Laufzeit von Algorithmen interessiert. Daher wollen wir auch den Gauß-Algorithmus analysieren. Wir z¨ ahlen die Anzahl der ben¨ otigten Multiplikationen M (m, n). Insbesondere bei K = R sind gegen¨ uber den Multiplikationen die anderen Berechnungen hinsichtlich ihrer Rechenzeit zu vernachl¨ assigen. Wir subtrahieren bei jedem Schritt Vielfache einer Zeile von den vorausgehenden und nachfolgenden, um zu einer Zeilenstufenform zu gelangen. Außerdem ver¨ andern wir die Inhomogenit¨ at. Daher normieren wir die k-te Zeile mit n − k + 1 Multiplikationen und subtrahieren Vielfache (n − k + 1-Multiplikationen) dieser Zeile von den m − 1 anderen Zeilen. Das ergibt insgesamt
min{m,n}
M (m, n) =
min{m,n}
[n − k + 1 + (m − 1)(n − k + 1)] = m
k=1
[n − k + 1] .
k=1
Falls n ≤ m ist, ergibt sich mit der Indextransformation i = n − k + 1, mit der wir die Reihenfolge der Summanden von n + (n − 1) + · · · + 1 zu 1 + 2 + · · · + n umkehren: M (m, n) = m
n k=1
[n − k + 1] = m
n
(1.8)
i = m
i=1
n(n + 1) . 2
Falls n > m ist, erhalten wir ebenfalls mit einer Indextransformation, die die Summationsreihenfolge umkehrt: n
m n n−m [n − k + 1] = m i=m i− i M (m, n) = m k=1
(1.8)
=
$ m
i=n−m+1
%
n(n + 1) (n − m)(n − m + 1) . − 2 2
i=1
i=1
306
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
Insbesondere im quadratischen Fall n = m ist damit M (n, n) ∈ Θ(n3 ). Tats¨ achlich wird der Gauß-Algorithmus in der Praxis eingesetzt, so lange die Gleichungssysteme nicht zu groß werden. Hat man Millionen von Variablen, dann werden iterative Verfahren verwendet, die sich mit jeder Iteration einer L¨ osung ann¨ ahern. Pro Variable werden dann also Folgenglieder einer gegen den L¨ osungswert konvergenten Folge berechnet. Allerdings erh¨ alt man so in der Regel keine exakte L¨ osung, sondern nur eine ungef¨ ahre. Aufgabe 5.8 asst sich durch Ein Gleichungssystem A · x = b mit A ∈ Bm×n und b ∈ Bm l¨ oglichkeiten f¨ ur den Ausprobieren l¨ osen, denn es gibt nur“ 2n verschiedene M¨ ” L¨ osungsvektor x ∈ Bn . Schreiben Sie einen Algorithmus, der durch Ausprobieren eine L¨ osung (oder alle L¨ osungen) findet, sofern das System l¨ osbar ist. Vergleichen Sie die Worst-Case-Laufzeit mit dem Gauß-Verfahren im Fall n = m. Der Fall der eindeutigen L¨ osung ist sch¨ on, aber nicht besonders spannend. Falls es gar keine L¨ osung gibt, k¨ onnen wir auch nichts mehr machen. Interessant ist aber der Fall, dass es mehrere bzw. unendlich viele L¨ osungen gibt. Wir untersuchen die Struktur der L¨ osungsmenge. Ist beispielsweise die Anzahl der frei w¨ ahlbaren Variablen (Freiheitsgrade, im Beispiel (5.14) sind es 3) f¨ ur ein Gleichungssystem eindeutig festgelegt, oder h¨ angt diese Anzahl vielleicht von der Reihenfolge der Variablen ab? Die Differenz zweier partikul¨ arer L¨ osungen x und y (L¨ osungen des inhomogenen Systems A · x = b ) ist eine homogene L¨ osung (L¨ osung des zugeh¨ origen homogenen Systems A · x = 0 ), denn A · ( x− y) = A· x−A· y = b − b = 0. Wir w¨ ahlen eine partikul¨ are L¨ osung x. Damit k¨ onnen wir jede L¨ osung des Gleichungssystems schreiben als Summe dieser partikul¨ aren L¨ osung x und einer homogenen L¨ osung z und erhalten die L¨ osungsmenge des inhomogenen Systems L = { x+ z : z ist homogene L¨ osung}.
(5.15)
Gibt es eine eindeutige L¨ osung, dann gibt es nur die eine homogene L¨ osung y = 0. Gibt es mehr als eine L¨ osung, dann gibt es entsprechend viele homogene L¨ osungen. Im Beispiel (5.14) lautet die Menge der homogenen L¨ osungen (c = 0):
x2 · (−z1 , 1, 0, 0, 0, 0, 0) +
+
x5 · (−z2 , 0, −z3 , −z4 , 1, 0, 0)
x7 · (−z5 , 0, −z6 , −z7 , 0, −z8 , 1)
:
x2 , x5 , x7 ∈ K .
Die L¨ osungsmenge eines homogenen linearen Gleichungssystems A x = 0 mit m×n n ) ist ein Unterraum des (K , +; K, ·). Wir m¨ ussen n Variablen (A ∈ K zum Beweis wegen des Unterraum-Kriteriums Lemma 5.5 lediglich pr¨ ufen, dass
5.4 Matrizen und Gleichungssysteme
307
Summe und skalares Vielfaches von L¨ osungen selbst wieder L¨ osungen sind und damit im Unterraum liegen. Sind x und y L¨ osungen, dann auch x+ y und r · x, r ∈ K, denn A( x+ y ) = A x + A y = 0 + 0 = 0,
A · (r x ) = r · (A x ) = r · 0 = 0.
Aufgabe 5.9 Bestimmen Sie die L¨ osungsmengen der folgenden Gleichungssysteme:
⎡
⎤⎛
⎞
⎛
⎞
⎡
1 2 4
7
⎤⎛
x1
⎞
⎛
6
2 −5 1 x1 1 ⎢ ⎥⎜ ⎟ ⎜ ⎢ 2 4 6 8 ⎥ ⎜ x2 ⎟ ⎜ 10 ⎢ ⎥⎜ ⎟ ⎜ ⎟ ⎜ ⎢ ⎥ ⎟=⎜ ⎢ ⎥ ⎜ ⎟ ⎜ ⎟ a) ⎣ 1 2 −1 ⎦ ⎝ x2 ⎠ = ⎝ 1 ⎠ , b) ⎢ ⎥⎜ ⎟ ⎜ ⎣ 1 2 0 −5 ⎦ ⎝ x3 ⎠ ⎝ 2 3 0 2 1 x3 1 2 2 1 4 x4
⎞ ⎟ ⎟ ⎟. ⎟ ⎠
Um die L¨ osungsmengen von Gleichungssystemen weiter zu untersuchen, f¨ uhren wir neue Begriffe ein: Definition 5.21 (Nullraum, Spaltenraum und Zeilenraum) Sei A ∈ K m×n , wobei m = n erlaubt ist. Die L¨ osungsmenge des homogenen linearen Gleichungssystems A x = 0 heißt der Nullraum von A, kurz N (A). Wir wissen bereits, dass es sich um einen Unterraum des K n handelt. Die lineare H¨ ulle der Spaltenvektoren von A, also der Vektorraum aller Linearkombinationen von Spaltenvektoren (siehe Seite 283), heißt der Spaltenraum von A, kurz S(A). Der Spaltenraum ist ein Unterraum des K m . Als Zeilenraum von A bezeichnen wir die lineare H¨ ulle der m Zeilenvektoren von A, kurz Z(A). Der Zeilenraum ist ein Unterraum des K n . Da die Codew¨ orter als Linearkombination der Zeilenvektoren der Generatormatrix G eines linearen Codes C entstehen (siehe Seite 298), ist der Zeilenraum Z(G) der Code: Z(G) = C. Ein Gleichungssystem A x = b hat genau dann mindestens eine L¨ osung, wenn b ∈ S(A). Denn genau dann l¨ asst sich b aus den Spalten der Matrix linear kombinieren, und die Faktoren bilden eine L¨ osung x. Das Gleichungssystem hat genau dann h¨ ochstens eine L¨ osung, wenn das zugeh¨ orige homogene System A x = 0 nur die L¨ osung x = 0 besitzt (da sich ja zwei inhomogene L¨ osungen um eine homogene unterscheiden). In diesem Fall ist N (A) = {0 }, d. h., 0 kann nur als triviale Linearkombination der Spaltenvektoren der Matrix dargestellt werden. Das aber bedeutet, dass die Spaltenvektoren linear unabh¨ angig sind.
308
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
F¨ ur den Fall einer quadratischen Matrix A ∈ K n×n , bei der wir so viele Gleichungen wie Variablen haben, bedeutet die Existenz einer eindeutigen L¨ osung zu irgend einer Inhomogenit¨ at, dass die n Spalten linear unabh¨ angig sind und eine Basis des K n bilden, da dim(K n ) = n ist. Umgekehrt wissen wir, dass, wenn die Spalten der quadratischen Matrix eine Basis bilden, jeder Vektor b eindeutig als Linearkombination der Spalten geschrieben werden kann (siehe Satz 5.13). Dann hat also das Gleichungssystem f¨ ur jede Inhomogenit¨ at eine eindeutige L¨ osung. Zusammengenommen gilt also f¨ ur quadratische Matrizen A ∈ K n×n und b ∈ K n : A x = b hat eindeutige L¨ osung ⇐⇒ Spalten von A sind Basis des K n . Tats¨ achlich ist dies auch dazu ¨ aquivalent, dass die n Zeilen der Matrix linear unabh¨ angig und damit eine Basis des K n sind. Diesen Zusammenhang wollen wir uns nicht nur f¨ ur quadratische Matrizen sondern allgemein auch f¨ ur nichtquadratische Matrizen A ∈ K m×n ansehen. Die elementaren Zeilenumformungen des Gauß-Verfahrens ¨ andern die L¨ osungsmenge von A·x = 0 nicht, also lassen sie den Nullraum N (A) unver¨ andert. Außerdem stellen sie umkehrbare Linearkombinationen der Zeilenvektoren von A dar, so dass sie auch den Zeilenraum Z(A) nicht ver¨ andern. Damit haben wir bewiesen: Lemma 5.22 (Nullraum und Zeilenraum bei Zeilenumformungen) Entsteht die Matrix B aus der Matrix A durch elementare Zeilenumformungen, so gilt Z(A) = Z(B) und N (A) = N (B). Der Spaltenraum kann sich jedoch bei Zeilenumformungen ver¨ andern. Im Beispiel entsteht durch Subtraktion der ersten von der zweiten Zeile ein anderer Spaltenraum: ? ? 1 1 1 1 1 1 = r : r ∈ K = S = r :r∈K . S 1 1 1 0 0 0 Jedoch gilt: Satz 5.23 (Spaltenvektoren von Matrizen) Sind die Spaltenvektoren zu k fest gew¨ ahlten Spalten der Matrix A ∈ K m×n linear unabh¨ angig und entsteht die Matrix B aus A durch elementare Zeilenumformungen, dann sind auch die k Spalten in B linear unabh¨ angig. V¨ ollig analog bleiben k linear abh¨ angige Spalten unter den Zeilenumformungen linear abh¨ angig.
5.4 Matrizen und Gleichungssysteme
309
Beweis Durch Auswahl der k Spalten aus A erstellen wir eine neue Matrix A ∈ K m×k . Unter den elementaren Zeilenumformungen, die im Gauß-Algorithmus verwendet werden, bleibt die L¨ osungsmenge von A x = 0 erhalten – und damit die lineare Unabh¨ angigkeit/Abh¨ angigkeit der Spalten. Als Konsequenz des Satzes bleibt die Dimension des Spaltenraums unter elementaren Zeilenumformungen unver¨ andert. Mit dem Algorithmus 5.2 k¨ onnen wir eine Matrix A ∈ K m×n mittels elementarer Zeilenumformungen in eine normierte Zeilenstufenform Z ∈ K m×n bringen (vgl. Z auf Seite 301). Wir wissen nach den Vor¨ uberlegungen: Z(Z) = Z(A), N (Z) = N (A) und dim S(Z) = dim S(A). An der Zeilenstufenform k¨ onnen wir jetzt zudem ablesen, dass dim S(Z) = dim Z(Z) und dim N (Z) = n − dim S(Z) ist. Denn eine Basis von Z(Z) erh¨ alt man aus denjenigen Zeilenvektoren von Z, die ungleich dem Nullvektor sind. Zu jedem Zeilenvektor k¨ onnen wir einen Spaltenvektor w¨ ahlen, der genau in der Zeile des Zeilenvektors eine 1 und sonst nur Nullen als Komponenten hat. Diese Spaltenvektoren bilden eine Basis des Spaltenraums. In Z auf Seite 301 sind das die Spalten 1, 3, 4 und 6. Bei der L¨ osung des Gleichungssystems Z x = 0 k¨ onnen die Variablen zu den noch nicht ber¨ ucksichtigten Spalten (Spalten 2, 5 und 7 in Z auf Seite 301) beliebig gew¨ ahlt werden. Ihre Anzahl n−dim S(Z) bestimmt daher die Dimension des Nullraums. Wir setzen unsere Ergebnisse zusammen und erhalten: dim Z(A) = dim Z(Z) = dim S(Z) = dim S(A), dim N (A) = dim N (Z) = n − dim S(Z) = n − dim S(A).
Satz 5.24 (Dimensionssatz f¨ ur Matrizen) F¨ ur jede Matrix A ∈ K m×n ist dim Z(A) = dim S(A) und n = dim S(A) + dim N (A). Da Zeilen- und Spaltenraum einer Matrix die gleiche Dimension haben, ist diese Dimension eine charakteristische Gr¨ oße der Matrix und heißt der Rang der Matrix A: Rang(A) := dim S(A) = dim Z(A). Eine Generatormatrix eines (n, k)-Codes hat damit den Rang k. Jetzt ist neben der Struktur (siehe (5.15) auf Seite 306, insbesondere bilden die homogenen L¨ osungen einen Vektorraum) auch die Gr¨ oße von L¨ osungsmengen linearer Gleichungssysteme gekl¨ art. Denn aus Satz 5.24 folgt direkt:
310
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
Satz 5.25 (Dimensionssatz f¨ ur Gleichungssysteme) Die Dimension dim N (A) des Vektorraums der L¨ osungen eines homogenen linearen Gleichungssystems A · x = 0 mit n Variablen ist n − dim S(A) = n − Rang(A). Aufgabe 5.10 uber die ein homogenes lineares Gleichungssystem Sei A ∈ R3×3 eine Matrix, ¨ A x = 0 definiert ist. Die L¨ osungen bilden den Nullraum von A. a) Geben Sie alle m¨ oglichen Dimensionen dieses Vektorraums an. b) Welche Dimension hat der Nullraum, wenn der Spaltenraum der Matrix die Dimension 2 hat? c) L¨ osen Sie das Gleichungssystem f¨ ur alle Matrizen A, deren Zeilenraum die Dimension 3 hat. Wir k¨ onnen Gauß’sche Zeilenumformungen, die den Zeilenraum unver¨ andert lassen, auch nutzen, um eine Basis in eine einfacher zu benutzende andere Basis zu u uhren. Wenn wir also wie bei einer Generatormatrix Basisvektoren ¨ berf¨ eines Unterraums des (K n , +; K, ·) in die Zeilen einer Matrix schreiben, dann erhalten wir nach Gauß’schen Zeilenumformungen wieder Zeilen einer Basis. So k¨ onnen wir mit der Generatormatrix G aus (5.10) verfahren. Aus ⎛ ⎞ ⎛ ⎞ 0 1 1 0 1 0 1 0 ⎜ ⎟ ⎜ ⎟ ⎜ 1 0 1 0 ⎟ entsteht ⎜ 0 1 1 0 ⎟ ⎝ ⎠ ⎝ ⎠ 1 1 1 1 0 1 0 1 durch Vertauschen der ersten beiden Zeilen und anschließende Subtraktion der neuen ersten von der dritten Zeile. Jetzt subtrahieren wir die zweite von der dritten Zeile und ziehen dann die dritte von den beiden anderen ab: ⎛ ⎞ ⎛ ⎞ 1 0 1 0 1 0 0 1 ⎜ ⎟ ⎜ ⎟ ⎜ 0 1 1 0 ⎟ , G := ⎜ 0 1 0 1 ⎟ . ⎝ ⎠ ⎝ ⎠ 0 0 1 1 0 0 1 1 Wenn wir nun diese Matrix G als Generatormatrix f¨ ur unseren (4, 3)-Code mit k = 3 Informations- und n − k = 1 Pr¨ ufbits verwenden und Vektoren aus B3 u ¨ ber die Multiplikation mit dieser Matrix codieren, dann sind die ersten drei Bits der Codew¨ orter die Informationsbits, und das vierte ist das Pr¨ ufbit. Eine solche Generatormatrix eines (n, k)-Codes, bei der die linken Spalten der Einheitsmatrix Ek entsprechen, wird als systematische Form bezeichnet. Beachten Sie: Multiplikation mit G f¨ uhrt zu einer anderen Codierung als Multiplikation mit ultigen Codew¨ orter und Wertebereich der G . Der Code als Vektorraum der g¨ Codierung bleibt dagegen der gleiche, da die Gauß’schen Zeilenumformungen den von den Zeilen erzeugten Vektorraum nicht ver¨ andern.
5.4 Matrizen und Gleichungssysteme
311
Mittels Zeilenumformungen kann man nicht immer die systematische Form erreichen, da bei einer Zeilenstufenform die Einheitsvektoren als Spalten u ¨ ber die Matrix verteilt sein k¨ onnen, die sich bei der systematischen Form auf der linken Seite befinden. Um in eine systematische Form zu gelangen, sind dann auch noch Spaltenvertauschungen n¨ otig. Die Spaltenumformungen k¨ onnen aber die Zeilenvektoren der Generatormatrix so ver¨ andern, dass sie einen anderen Vektorraum aufspannen, d. h., der Code kann sich ver¨ andern. Beispielsweise ahrend der Vektor nicht geh¨ ort (0, 0, 1) zum Code der Generatormatrix G1 , w¨ von den Zeilen der aus G1 durch Vertauschung der zweiten und dritten Spalte entstandenen Matrix G2 , die in systematischer Form ist, erzeugt werden kann: 1 0 0 1 0 0 G1 = , G2 = . 0 0 1 0 1 0 Codieren wir mit einer systematischen Generatormatrix, dann f¨ ugen wir lediglich Pr¨ ufbits hinzu. Die Decodierung eines korrekten Codeworts (d. h. das Codewort ist Element des Codes, mit fehlerhaft u ortern ¨ bertragenen Codew¨ besch¨ aftigen wir uns sp¨ ater) ist nun ganz einfach: Wir lassen die Pr¨ ufbits weg, das sind die letzten n − k Bits der Codew¨ orter. Ist die Generatormatrix nicht in einer systematischen Form, dann m¨ ussen wir uns bei der Decodierung mehr anstrengen. Das machen wir im folgenden Unterkapitel.
5.4.3
Inverse Matrix
Zum Decodieren haben wir ein Gleichungssystem gel¨ ost. Das m¨ ochten wir aber nicht f¨ ur jedes einzelne Codewort tun. Abhilfe schafft die inverse Matrix: Definition 5.26 (inverse Matrix) Eine Matrix A ∈ K n×n heißt invertierbar mit Inverser A−1 ∈ K n×n genau dann, wenn A−1 · A = E gilt. Hier ist E wieder die Einheitsmatrix, also eine Diagonalmatrix mit Einsen als Diagonalkomponenten. In Kapitel 3.2.1 haben wir uns mit Gruppen und Ringen besch¨ aftigt: A−1 ist die multiplikative Inverse zu A im Ring der (n × n)-Matrizen u ¨ber K und damit eindeutig bestimmt. Analog zum Satz 3.3 f¨ ur Gruppen folgt aus A−1 A = E −1 auch AA = E und umgekehrt. Man hat also bereits eine Inverse, wenn eine der beiden Bedingungen erf¨ ullt ist, d. h. wenn man eine Linksinverse“ oder eine ” Rechtsinverse“ gefunden hat. ” Die Definition ist nur f¨ ur quadratische Matrizen sinnvoll, da nur in diesem Fall die Inverse eindeutig ist und von links und rechts multipliziert werden kann. Da-
312
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
mit besch¨ aftigen wir uns sp¨ ater in Satz 5.27. Wir arbeiten also zun¨ achst mit quadratischen Matrizen, bevor wir dann das Decodieren auch f¨ ur nicht-quadratische Generatormatrizen mit einem ganz ¨ ahnlichen Ansatz bewerkstelligen. onnen Wenn die Inverse A−1 einer Matrix A existiert und bekannt ist, dann k¨ osen: wir das Gleichungssystem A · x = b durch Multiplikation mit A−1 l¨ x) = A−1b ⇐⇒ (A−1 · A) x = A−1b ⇐⇒ E A x = b ⇐⇒ A−1 (A x = A−1b ⇐⇒ x = A−1b. Der Ansatz ist dann vorteilhaft, wenn das System f¨ ur verschiedene Inhomogenit¨ aten, also f¨ ur verschiedene Vektoren b, gel¨ ost werden soll. Dann muss nur einmal in die Berechnung von A−1 investiert werden – und wir haben dann mittels n2 Multiplikationen mit den Komponenten des Vektors der rechten Seite sofort f¨ ur jede Inhomogenit¨ at b eine L¨ osung. Ist eine invertierbare Generatormatrix gegeben (die Matrix ist quadratisch, und es gibt es keine Pr¨ ufbits), so k¨ onnen wir jedes Codewort b mittels b · G−1 decodieren: x · E = b · G−1 ⇐⇒ x = b · G−1 . x · G = b ⇐⇒ x · G · G−1 = b · G−1 ⇐⇒ Hier haben wir ber¨ ucksichtigt, dass Generatormatrizen u ¨ blicherweise von links mit dem zu codierenden Vektor multipliziert werden, w¨ ahrend bei der vorangehenden Rechnung der L¨ osungsvektor von rechts multipliziert wurde. Wir werden jetzt eine Rechtsinverse mit AA−1 = E berechnen. Zur Bestimussen wir daher das Gleichungssystem mung der k-ten Spalte sk von A−1 m¨ Ask = k-te Spalte der Einheitsmatrix l¨ osen. Die Inverse erhalten wir damit u ur die n Spal¨ ber n Gleichungssysteme f¨ −1 onnen wir diese n Gleichungssysteme ten von A . Mit dem Gauß-Verfahren k¨ gleichzeitig l¨ osen. Die Systeme unterscheiden sich nur durch die Inhomogenit¨ at. Wir arbeiten daher mit n Inhomogenit¨ aten gleichzeitig, indem wir die Kurzschreibweise ohne Variablen um weitere Spalten auf der rechten Seite erweitern. Beispielsweise invertieren wir
1 1 −2 1 −1 2 2 zu A = , A := 4 −1 2 1 indem wir zwei Inhomogenit¨ aten erg¨ anzen – damit steht rechts die Einheitsmatrix – und dann so lange umformen, bis links die Einheitsmatrix steht. Die L¨ osungen f¨ ur die Spalten k¨ onnen nun abgelesen werden, es ergibt sich als Inverse die Matrix rechts vom Strich (gleiche Umformungen wie auf Seite 305):
−2
1 1 0
4 −1 0 1
⇐⇒
−2 1 1 0 0 1 2 1
⇐⇒
−2 0 −1 −1 0 1
2
1
⇐⇒
1 0
1 2
1 2
0 1 2 1
.
5.4 Matrizen und Gleichungssysteme
313
Die Matrix-Invertierung mit dem Gauß-Algorithmus liegt hinsichtlich der Anosen zwar n Gleichungssysteme, f¨ ur zahl der Multiplikationen in Θ(n3 ). Wir l¨ 3 die der Gauß-Algorithmus einzeln bereits einen Aufwand von Θ(n ) hat, aber der Aufwand f¨ ur die Matrix-Invertierung ist nicht in Θ(n4 ), sondern ebenfalls in 3 atzlichen Inhomogenit¨ aten leΘ(n ). Das liegt daran, dass sich durch die n−1 zus¨ diglich die L¨ angen der umzuformenden Zeilen von n+1 auf 2n Eintr¨ age erh¨ ohen, damit aber immer noch in Θ(n) liegen. Es gibt eine Kennzahl, die f¨ ur eine Matrix A ∈ K n×n anzeigt, ob sie invertierbar ist. Diese Kennzahl ist die Determinante det(A), die z. B. wie in Algorithmus 5.3 berechnet werden kann. Es gilt: x = 0 ist eindeutig l¨ osbar det(A) = 0 ⇐⇒ A−1 existiert ⇐⇒ A ⇐⇒ Die Zeilen (Spalten) von A sind linear unabh¨ angig. Diese Zusammenh¨ ange lassen sich elementar u ¨ber das Verhalten der Determinente unter Gauß’schen Zeilen- (und Spalten-) Umformungen der Matrix beweisen. Da wir hier nur ganz kurz auf die Determinante eingehen wollen, scheuen wir den dazu erforderlichen, nicht unerheblichen Aufwand und verweisen z. B. auf ¨ (Goebbels und Ritter, 2013, Kap. 1.8 und S. 453). Die Aquivalenz ist aber auch anschaulich zug¨ angig. F¨ ur eine Matrix A ∈ R2×2 ist beispielsweise | det(A)| der Fl¨ acheninhalt eines Parallelogramms mit zwei Seiten, die den Zeilenvektoren von A entsprechen. Die Fl¨ ache ist null genau dann, wenn die Zeilenvektoren auf einer Geraden liegen und damit linear abh¨ angig sind. Entsprechend l¨ asst sich 3×3 als Volumen eines Paralder Betrag einer Determinante einer Matrix aus R lelepipeds auffassen, bei dem drei Kanten den Zeilen der Matrix entsprechen. Algorithmus 5.3 Rekursive Determinantenberechnung der (n × n)-Matrix A procedure det(A) if n = 1 then return a1,1 det := 0 for k := 1 bis n do det := det + (−1)k+1 · ak,1 ·det(Ak,1 ) return det In Algorithmus 5.3 wird in der Schleife die erste Spalte der Matrix durchlaufen. Dabei ist Ai,j ∈ K (n−1)×(n−1) die Matrix, die aus A entsteht, wenn wir die i-te Zeile und j-te Spalte weglassen. Als Beispiel berechnen wir eine Determinante mit dem Algorithmus: ⎛ ⎞ 1 2 3 ⎜ ⎟ 5 0 2 3 2 3 ⎟ det ⎜ ⎝ 4 5 0 ⎠ = 1 · det 0 0 − 4 · det 0 0 + 6 · det 5 0 6 0 0
314
5 Ausgew¨ ahlte Kapitel der Linearen Algebra = 1 · (5 · 0 − 0 · 0) − 4 · (2 · 0 − 0 · 3) + 6 · (2 · 0 − 5 · 3) = −90.
Alternativ zur ersten Spalte kann die Determinante auch u ¨ ber jede andere Spalte j oder Zeile i gew¨ ahlt werden, Unterschiede gibt es nur beim Vorzeichen: det(A) =
n
(−1)j+k ak,j det(Ak,j ) =
k=1
n
(−1)i+k ai,k det(Ai,k ).
k=1
Aufgabe 5.11 a) Berechnen Sie mit Algorithmus 5.3 ⎛ ⎞ 1 2 3 4 ⎜ ⎟ ⎜0 0 3 0⎟ ⎟. det ⎜ ⎜ ⎟ ⎝0 1 3 0⎠ 0 5 6 7 b) Stellen Sie eine Rekursionsgleichung f¨ ur die Anzahl der Multiplikationen T (n) in Algorithmus 5.3 auf, und sch¨ atzen Sie den Aufwand T (n) nach oben 1 ab. Dabei k¨ onnen Sie verwenden, dass ∞ k=0 k! konvergiert, siehe Seite 241. Wir sehen uns nun an, wie wir das Gleichungssystem (5.12) zum Decodieren durch eine Matrixmultiplikation ersetzen k¨ onnen und gehen dabei analog zur Matrixinvertierung vor. Voraussetzung ist, dass ein korrektes Codewort b ∈ C ¨ vorliegt. Vor dem Decodieren m¨ ussen eventuell vorhandene Ubertragungsfehler korrigiert werden, indem z. B. Parit¨ atsbits ausgewertet werden. Wir suchen eine Rechtsinverse I der (3 × 4)-Matrix G des Gleichungssystems. Dabei ist I ∈ B4×3 , und wir nennen die drei Spalten b1 , b2 , b3 ∈ B4 :
⎛
⎞
⎛
⎞
0 1 1 0
1 0 0
=G
=E3
⎜ ⎟ ⎜ ⎟ ⎜ 1 0 1 0 ⎟ · (b1 , b2 , b3 ) = ⎜ 0 1 0 ⎟ . ⎝ ⎠ ⎝ ⎠ =I 1 1 1 1 0 0 1 Wenn wir eine solche Matrix I kennen, dann k¨ onnen wir damit ein Codewort b ∈ C zu x ∈ B3 decodieren: x = b · I. x · G = b =⇒ x · G · I = b · I =⇒ x · E3 = b · I =⇒ Wir bestimmen nun eine solche Matrix I, indem wir zun¨ achst die drei Gleichungssysteme f¨ ur die drei Spalten gleichzeitig l¨ osen. Wenn wir die gleichen Zeilenumformungen wie zu (5.12) auf Seite 299 anwenden, dann ergibt sich ⎡ ⎤ ⎡ ⎤ 0 1 1 0 1 0 0 1 0 0 1 1 0 1 ⎢ ⎥ ⎢ ⎥ ⎢ 1 0 1 0 0 1 0 ⎥ ⇐⇒ ⎢ 0 1 0 1 0 1 1 ⎥ . (5.16) ⎣ ⎦ ⎣ ⎦ 1 1 1 1 0 0 1 0 0 1 1 1 1 1
5.4 Matrizen und Gleichungssysteme
315
Aufgabe 5.12 ¨ Uberpr¨ ufen Sie mittels Gauß’schen Zeilenumformungen dieses Ergebnis. Jetzt m¨ ussen wir noch I ablesen. Unabh¨ angig vom konkreten Beispiel sind die Zeilen jeder Generator-Matrix G als Basis eines k-dimensionalen Codes linear unabh¨ angig, so dass sich stets links wie im Beispiel alle Spalten der Matrix osungen Ek in einer Zeilenstufenform erzeugen lassen. Daher lassen sich stets L¨ ablesen. Die L¨ osungen b1 , b2 und b3 der einzelnen Gleichungssysteme in (5.16), also ⎛ ⎛ ⎞ ⎛ ⎞ ⎛ ⎞ ⎛ ⎞ ⎞ ⎛ ⎞ 1001 1001 1 1001 0 1 ⎜ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎟ ⎜ ⎟ ⎜ 0 1 0 1 ⎟·b1 = ⎜ 0 ⎟ , ⎜ 0 1 0 1 ⎟·b2 = ⎜ 1 ⎟ , ⎜ 0 1 0 1 ⎟·b3 = ⎜ 1 ⎟ , ⎝ ⎝ ⎠ ⎝ ⎠ ⎝ ⎠ ⎝ ⎠ ⎠ ⎝ ⎠ 0011 0011 1 1 0011 1 sind jetzt aber im Gegensatz zu quadratischen Matrizen nicht eindeutig. Es gibt also mehrere m¨ ogliche Rechtsinverse. Wenn wir die vierte Komponente ahlen, dann k¨ onnen wir der L¨ osungsvektoren b1 , b2 und b3 jeweils zu null w¨ aufgrund der Diagonalmatrix f¨ ur die u ¨ brigen Komponenten den Wert direkt an der entsprechenden Inhomogenit¨ at ablesen und erhalten I. Damit k¨ onnen wir ein Codewort b ∈ C zu x = b · I decodieren, wobei wir die Komponenten der Inhomogenit¨ aten unterschiedlich gesetzt haben (fett/unterstrichen/normal), damit wir sie in der Matrix I wiedererkennen: ⎞ ⎛ ⎞ ⎛ 1 0 1 1 0 1 ⎟ ⎜ ⎟ ! ⎜ ⎜ ⎟ ⎜0 1 1⎟ ⎟ , (x1 , x2 , x3 ) = (b1 , b2 , b3 , b4 ) · ⎜ 0 1 1 ⎟ . I = b1 b2 b3 = ⎜ ⎜ ⎟ ⎜ ⎟ ⎝1 1 1⎠ ⎝1 1 1⎠ 0 0 0
0 0 0
Beim Decodieren ignorieren wir bei dieser Wahl von I durch die Nullzeile das letzte Bit der Codew¨ orter. Als Pr¨ ufbit hat es aber dennoch Bedeutung. Das sehen wir uns im n¨ achsten Unterkapitel an. Satz 5.27 (Existenz von Rechts- und Linksinversen) F¨ ur eine Matrix A ∈ K m×n gilt: Ist Rang(A) = m, dann besitzt A eine Rechtsinverse I ∈ K n×m mit A · I = Em . Ist Rang(A) = n, so hat A eine Linksinverse I ∈ K n×m mit I · A = En . Rechts- oder Linksinverse sind nicht eindeutig, falls n = m ist. Von der Existenz der in der Regel nicht eindeutigen Rechtsinversen haben wir uns bereits u ¨ berzeugt. Mittels Transponieren erhalten wir daraus auch die Aussage zur Linksinversen mit der Regel aus Aufgabe 5.7.
316
5.5
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
Orthogonalit¨ at, Fehlererkennung und verlustbehaftete Kompression
Um Fehler in linearen Codes zu finden, benutzen wir den Begriff der Orthogonalit¨ at. Zwei Vektoren sind orthogonal zueinander, wenn sie senkrecht zueinander stehen, also einen Winkel von π2 (90◦ ) einschließen. Steht ein Wort senkrecht zu ¨ gewissen Vektoren, dann ist es kein Codewort, ein Ubertragungsfehler liegt vor. Um das zu verstehen, definieren wir zun¨ achst einen Winkelbegriff f¨ ur allgemeine Vektorr¨ aume, beginnen aber mit den anschaulichen Pfeilen in der Ebene, also mit dem Vektorraum (R2 , +; R, ·). Zu zwei Pfeilen a := (a1 , a2 ) und b := (b1 , b2 ) (die in der Ebene vom Nullpunkt zu den angegebenen Punkten f¨ uhren) betrachten wir das Produkt a • b := a · b = (a1 , a2 ) · (b1 , b2 ) = a1 · b1 + a2 · b2 und nennen es Skalarprodukt. Das Skalarprodukt wird also als Matrixprodukt eines Zeilen- mit einem Spaltenvektor ausgerechnet. Das ist eine Zahl und trotz des a ¨hnlichen Namens etwas Anderes als das Produkt mit einem Skalar, das wieder einen Vektor ergibt.
b
b2 a2
c=b−a a
γ b1
a1
Abb. 5.4 Zum Skalarprodukt von a und b
Die Vektoren a = ∅ und b = ∅ schließen einen Winkel 0 ≤ γ ≤ π ein (siehe Abbildung 5.4). Geben wir die Seitenl¨ angen u ¨ ber den Satz des Pythagoras an, @ @ a = a21 + a22 , b = b21 + b22 und c = (a1 − b1 )2 + (a2 − b2 )2 , dann gilt nach dem Kosinussatz a2 + b2 − 2ab cos(γ) = c2 (siehe Seite 185): @ @ (a21 + a22 ) + (b21 + b22 ) − 2 a21 + a22 b21 + b22 cos(γ) = (a1 − b1 )2 + (a2 − b2 )2
=a21 −2a1 b1 +b21 +a22 −2a2 b2 +b22
@ @ ⇐⇒ −2 a21 + a22 b21 + b22 cos(γ) = −2a1 b1 − 2a2 b2 −2·( a• b)
a • b ⇐⇒ cos(γ) = . 2 a1 + a22 b21 + b22
5.5 Orthogonalit¨ at, Fehlererkennung und verlustbehaftete Kompression
317
So k¨ onnen wir allgemein auch den Winkel zwischen zwei Vektoren aus Rn (in der Ebene dieser Vektoren) bestimmen. Jetzt wollen wir die Winkelberechnung u ¨ ber ein Skalarprodukt f¨ ur ganz allgemeine Vektorr¨ aume nutzen. Dazu definieren wir Skalarprodukte auf der Basis der Eigenschaften des Skalarprodukts im R2 : Definition 5.28 (Skalarprodukt) Eine f¨ ur einen Vektorraum (V, +; K, ·) definierte Abbildung ”
•“ :
V ×V →K
heißt ein Skalarprodukt genau dann, wenn f¨ ur beliebige Vektoren a, b, c ∈ V und Skalare s ∈ K die folgenden Regeln (Axiome) erf¨ ullt sind: a) Symmetrie: Es gilt das Kommutativgesetz a • b = b • a. b) Homogenit¨ at: (sa) • b = s(a • b ). c) Additivit¨ at (Distributivgesetz): (a + b ) • c = a • c + b • c. atzlich die positive Definitheit Ist K = R, und gilt zus¨ a • a ≥ 0 und aus a • a = 0 folgt bereits a = 0, dann heißt der Vektorraum mit Skalarprodukt ein Euklid’scher Raum. Formal m¨ ussten wir eigentlich einen Vektorraum mit Skalarprodukt als Paar (V, •) bzw. ((V, +; K, ·), •) angeben. Denn zu einem Vektorraum kann es viele verschiedene Skalarprodukte geben. Ist beispielsweise V ein Vektorraum u ¨ ber R mit dem Skalarprodukt •, dann ist f¨ ur jede Konstante c ∈ R auch ∗ : V × V → R,
a ∗ b := c · (a • b)
ein Skalarprodukt, wie Sie direkt mit der Definition u ufen k¨ onnen. F¨ ur ¨ berpr¨ c = 0 erhalten wir insbesondere ein Skalarprodukt, das immer null und damit nicht positiv definit ist. Ein reeller Vektorraum kann unter einem Skalarprodukt ein Euklid’scher Raum sein, unter einem anderen ist er es vielleicht nicht. Euklid’sche R¨ aume sind besonders, da man in ihnen L¨ angen und Winkel mit dem Skalarprodukt definieren kann, wie wir im Folgenden sehen werden. Die Homogenit¨ at und die Additivit¨ at f¨ uhren dazu, dass ein Skalarprodukt im ersten Argument linear ist: (ra + sb ) • c = r(a • c) + s(b • c). Wegen der Symmetrie gilt das aber auch f¨ ur das zweite Argument. Man beachte aber, dass (ra) • (rb ) = r2 (a • b ) ist. Wegen 0 · 0 = 0 f¨ ur 0 ∈ K und 0 ∈ V folgt aus der Definition des allgemeinen Skalarprodukts: a • 0 = 0 • a = (0 · 0) • a = 0 · (0 • a) = 0,
(5.17)
318
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
d. h., die zweite Regel zur positiven Definitheit in einem Euklid’schen Raum ¨ kann als Aquivalenz geschrieben werden: a • a = 0 ⇐⇒ a = 0. Die Folgerung von links nach rechts ist die positive Definitheit, die von rechts nach links ist (5.17). onnen wir das Standardskalarprodukt Auf dem Vektorraum (K n , +; K, ·) k¨ a • b :=
n
ak · bk
k=1
definieren. Bei der Multiplikation zweier Matrizen entstehen die Komponenten des Ergebnisses als Standardskalarprodukt einer Zeile der linken Matrix mit einer Spalte der rechten. Außerdem haben wir soeben gesehen, wie wir mit onnen. Aufdem Standardskalarprodukt in (R2 , +; R, ·) Winkel bestimmen k¨ grund dieser Eigenschaften ist dieses Skalarprodukt ausgezeichnet und bekommt den Zusatz Standard“. ” Die Axiome des Skalarproduks sind leicht zu verifizieren: a • b = (r · a) • b = (a + b ) • c =
n
ak · bk =
k=1 n
n
bk · ak = b • a,
k=1
r · ak · bk = r ·
n
ak · bk = r · (a • b ),
k=1 n
k=1 n
k=1
k=1
(ak + bk ) · ck =
ak · ck +
n
bk · ck = a • c + b • c.
k=1
Auf (B , ⊕; B, ) lautet das Standardskalarprodukt n
a • b := (a1 b1 ) ⊕ (a2 b2 ) ⊕ · · · ⊕ (an bn ), z. B. ist (0, 1, 0, 1) • (1, 1, 0, 1) = 0 ⊕ 1 ⊕ 0 ⊕ 1 = 0. Damit berechnen wir ein Parit¨ ats-Bit: 0 bei einer geraden Anzahl Einsen in a a • a = 1 bei einer ungeraden Anzahl Einsen in a. Betrachten wir speziell den Raum (Rn , +; R, ·), dann wird er unter dem Standardskalarprodukt sogar zu einem Euklid’schen Raum, da zus¨ atzlich gilt: a • a =
n
a2k ≥ 0 und a • a > 0 genau dann, wenn mindestens ein ak = 0 ist.
k=1
Beispielsweise erhalten wir f¨ ur a = (1, 2, 3, 4) ∈ R4 und b = (5, 6, 7, 8) ∈ R4 a • b =
4 k=1
ak · bk = 5 + 12 + 21 + 32 = 70.
5.5 Orthogonalit¨ at, Fehlererkennung und verlustbehaftete Kompression
319
F¨ ur die Standard-Einheitsvektoren aus (Rn , +; R, ·) gilt
ei • ek = δi,k :=
1, falls i = k, 0, falls i = k,
i, k = 1, . . . , n.
Das Symbol δi,k heißt das Kronecker-Delta, ist die Komponente in Zeile i urzende Schreibweise. und Spalte k der Einheitsmatrix En und dient als abk¨ orper B Der Vektorraum (Bn , ⊕; B, ) ist kein Euklid’scher Raum, da als K¨ und nicht R verwendet wird. Es gilt dar¨ uber hinaus b · b = 0 z. B. f¨ ur b = (1, 1, 0, . . . , 0), obwohl b = 0 ist. W¨ ahrend wir rechte Winkel bereits mit einem Skalarprodukt erkl¨ aren k¨ onnen, ben¨ otigen wir einen Euklid’schen Raum, um beliebige Winkel zwischen Vektoren zu definieren und zu berechnen. Als Vorbereitung dient: Definition 5.29 (Betrag, Norm, L¨ ange eines Vektors) Es sei V ein Euklid’scher Raum. Der Betrag (die Euklid’sche Norm √ oder die L¨ ange) von a ∈ V ist |a| := a • a. Ist |a| = 1, so heißt a ein Einheitsvektor. F¨ ur Vektoren in Rn erhalten wir u ¨ ber das Standardskalarprodukt den Betrag n √ √ 2 1 + 4 + 9 + 16 = 30. |a| = k=1 ak . Beispielsweise ist |(1, 2, 3, 4)| = Satz 5.30 (Eigenschaften des Skalarprodukts und des Betrags) F¨ ur Vektoren a und b eines Euklid’schen Raums V gilt a) |a| = 0 ⇐⇒ a = 0, c)
|r · a| |a • b|
d)
|a + b|
b)
f¨ ur alle r ∈ R,
≤
|r| · |a| |a| · |b|
≤
|a| + |b|
(Dreiecksungleichung).
=
(Cauchy-Schwarz’sche Ungleichung),
Beweis a) Dies ist eine Umformulierung der positiven Definitheit des Skalarprodukts (Definition 5.28), d. h. |a| = 0 =⇒ a • a = 0 =⇒ a = 0, zusammen mit (5.17), d. h. |0| = 0 • 0 = 0. b) |r · a| = (r · a) • (r · a) = r2 (a • a) = |r| · |a|. c) F¨ ur b = 0 ist |b| = 0, und wegen (5.17) gilt a • b = 0, und die Ungleichung ist erf¨ ullt: |a • b| = 0 ≤ 0 = |a| · |b|. Wir m¨ ussen zum Beweis der Ungleichung also nur noch b = 0 betrachten, d. h. |b| > 0. F¨ ur jedes r ∈ R gilt: 0 ≤ (a−rb )•(a−rb ) = a•a−r(b•a)−a•(rb )+r2 (b•b ) = |a|2 −2r(a•b )+r2 |b|2 .
320
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
ur die Zahl Da die Ungleichung f¨ ur alle r ∈ R gilt, ist sie insbesondere f¨ r := a•2b richtig, und wir erhalten damit |b|
0 ≤ |a|2 − 2
(a • b )2 (a • b )2 (a • b )2 + = |a|2 − , |b|2 |b|2 |b|2
also (a •b )2 /|b|2 ≤ |a|2 und damit |a •b|2 = (a •b)2 ≤ |a|2 |b|2 . Jetzt muss nur noch auf beiden Seiten die monotone Wurzelfunktion angewendet werden, die die Ungleichung erh¨ alt. d) Mit den Eigenschaften des Skalarprodukts und der Cauchy-Schwarz’schen Ungleichung erhalten wir: @ 2 (a + b ) • (a + b ) = a • a + 2a • b + b • b = |a|2 + 2a • b + |b|2 |a + b|2 = c)
≤ |a|2 + 2|a • b| + |b|2 ≤ |a|2 + 2 |a| |b| + |b|2 = (|a| + |b|)2 , so dass |a + b| ≤ |a| + |b| ist. Jetzt k¨ onnen wir einen (abstrakten) Winkelbegriff einf¨ uhren. Aus der CauchySchwarz’schen Ungleichung |a • b| ≤ |a| · |b| folgt f¨ ur alle a, b ∈ V \ {0 }, dass a • b |a • b| ≤ 1, also − 1 ≤ ≤ 1. |a| · |b| |a| · |b| Die Zahl
a• b | a|·| b|
wird als Kosinus eines Winkel ϕ ∈ [0, π] interpretiert:
Definition 5.31 (Winkel und Orthogonalit¨ at) Es sei (V, +; K, ·) ein Vektorraum mit Skalarprodukt •“. ” Zwei Vektoren a, b ∈ V heißen orthogonal (a ⊥ b ) genau dann, wenn a • b = 0 ist. In diesem Fall ist ϕ(a, b ) = π . 2
Ist zus¨ atzlich V ein Euklid’scher Raum (also insbesondere K = R), dann heißt f¨ ur a, b = 0 die Zahl ϕ = ϕ(a, b ) ∈ [0, π] mit a • b cos(ϕ) = |a| · |b|
bzw.
ϕ = arccos
a • b |a| · |b|
der Winkel zwischen a und b. Wir haben bereits eingangs des Abschnitts gesehen, dass dieser Winkelbegriff in der Ebene R2 nichts Neues ist. Im R3 mit Standardskalarprodukt lautet der Winkel zwischen den Vektoren (1, 1, 0) und (1, 0, 1) (vgl. Tabelle 3.6, Seite 184): π (1, 1, 0) • (1, 0, 1) 1 = arccos = . ϕ = arccos |(1, 1, 0)| · |(1, 0, 1)| 2 3
5.5 Orthogonalit¨ at, Fehlererkennung und verlustbehaftete Kompression
321
¨ zweier Suchmaschinen nutzen den Winkelbegriff im Rn , um die Ahnlichkeit Dokumente zu bestimmen. Dabei wird f¨ ur jedes Dokument ein Vektor gebildet, dessen Komponenten f¨ ur signifikante W¨ orter der jeweiligen Sprache stehen. Die Anzahl des Auftretens jedes dieser W¨ orter wird gez¨ ahlt und die Zahl ergibt den Wert der entsprechenden Komponente. Dokumente sind sehr ¨ ahnlich, wenn die wesentlichen W¨ orter im gleichen Verh¨ altnis vorkommen, d. h. wenn die Vektoren in die gleiche Richtung zeigen und der eingeschlossene Winkel klein ist. Sind a und b zueinander orthogonale Vektoren in einem Euklid’schen Raum, so gilt wegen a • b = 0: |a + b|2 = (a + b ) • (a + b ) = |a|2 + 2a • b + |b|2 = |a|2 + |b|2 . Der Satz des Pythagoras ist in allgemeinen Euklid’schen R¨ aumen bewiesen. Beispiel 5.32 (Steilster Anstieg) onnen wir als H¨ ohen Die Werte einer Funktion f : R2 → R, (x, y) → f (x, y) k¨ u ber der x-y-Ebene auffassen. In diesem Sinne beschreibt f ein Gebirgsprofil. ¨ Wenn wir uns an einem Punkt (x, y, f (x, y)) auf dem Gebirge befinden, dann stellt sich die Frage, wie steil es in welcher Richtung weitergeht. Die folgenden ¨ Uberlegungen sind auch f¨ ur Funktionen mit mehr als zwei Variablen richtig, aber dann k¨ onnen wir uns den Funktionsgraphen nicht mehr vorstellen. Die ahlen Steigung in Richtung der x-Achse erhalten wir, indem wir y = y0 fest w¨ und dann die Ableitung der Funktion g(x) := f (x, y0 ) an der Stelle x = x0 berechnen. Entsprechend bekommen wir die Steigung in y-Richtung als Ableitung von h(y) := f (x0 , y). Dies sind partielle Ableitungen, bei denen die klassische Ableitung nach einer Variable berechnet wird, w¨ ahrend alle u ¨brigen Variablen als Konstanten angesehen werden. Bei partiellen Ableitungen benutzt man statt d ∂ dx die Schreibweise ∂x , die signalisiert, dass es weitere Variablen gibt: ∂f (x0 , y0 ) := g (x0 ), ∂x
∂f (x0 , y0 ) := h (y0 ). ∂y
Schreiben wir an einer Stelle (x0 , y0 ) alle Steigungen in Richtung der Koordinatenachsen in einen Vektor, so heißt dieser der Gradient von f an der Stelle (x0 , y0 ) und wird mit ∂f ∂f grad f (x0 , y0 ) := (x0 , y0 ), (x0 , y0 ) ∂x ∂y bezeichnet. Beispielsweise ist f¨ ur f (x, y) := sin(x2 · y) + 2x + y ∂f (x, y) = cos(x2 y)2xy + 2 ∂x
und
∂f (x, y) = cos(x2 y)x2 + 1, ∂y
so dass z. B. grad f (1, π) = (−2π + 2, 0) ist. Bei Funktionen mit n Variablen ist der Gradient entsprechend ein Vektor aus Rn .
322
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
Eine Funktion mit einer Variable ist genau dann differenzierbar an einer Stelle, wenn es eine Tangente gibt (deren Steigung die Ableitung ist, siehe Seite 247). Dies l¨ asst sich auf Funktionen mit mehreren Variablen u ¨ bertragen. Eine Funktion mit zwei Variablen heißt differenzierbar in (x0 , y0 ), wenn es eine Tangentialebene gibt, bei mehr als zwei Variablen muss es eine entsprechende Hyperebene geben. Abbildung 5.5 zeigt die Ebene, die durch die Steigungen in x- und yRichtung definiert ist. Die Steigungen in allen Richtungen stimmen dann mit den entsprechenden Steigungen der Ebene u asst sich die Steigung in ¨berein. Dann l¨ Richtung e mit |e | = 1 (e muss also kein Standard-Einheitsvektor sein, sondern in irgend eine Richtung zeigen) aus dem Gradienten u ¨ ber das Standardskalarprodukt berechnen, bei zwei Variablen z. B. zu [grad f (x0 , y0 )]•e. Um das zu verstehen, berechnen wir die Steigung der Tangentialebene in Richtung e = (e1 , e2 ): Ausgehend von (x0 , y0 ) gehen wir um e1 in Richtung der positiven x-Achse. Da∂ f (x0 , y0 ) zur¨ uck, bei legen wir auf der Ebene den H¨ ohenzuwachs h1 mit he11 = ∂x '∂ & ohenzuwachs h1 durch also h1 = ∂x f (x0 , y0 ) · e1 . (Die Ableitung gibt den H¨ die Horizontaldifferenz e1 an.) Legen wir e2 in Richtung der positiven y-Achse '∂ & f (x0 , y0 ) · e2 . Kombinieren zur¨ uck, erhalten wir den H¨ ohenzuwachs h2 = ∂x wir beides, indem wir in der Ebene die zu e geh¨ orende Strecke gehen, so ist die ange von e eins gesamte H¨ ohendifferenz h1 + h2 = [grad f (x0 , y0 )] • e. Da die L¨ ist, ist dies zugleich die Steigung in Richtung von e. Wir erhalten die Steigung also u ¨ber das Skalarprodukt des Richtungsvektors mit dem Gradienten. Abb. 5.5 In der Tangentialebene zur eingezeichneten partielle Ableitung Stelle – hier durch das Dreieck y nach y angedeutet – liegen die TanAbleitung in eine Zwischenrichtung genten in x- und y-Richtung. Dadurch ist die Ebene festpartielle Ableitung gelegt, und u ¨ber die Ebene nach x kann die Steigung in jeder Richtung bestimmt werden 1 x – hier ¨ uber ein gestricheltes untersuchte Stelle Steigungsdreieck angedeutet.
Funktionsgraph z
In welcher Richtung liegt nun die gr¨ oßte (bzw. die kleinste) Steigung? Ist ϕ der Winkel zwischen grad f (x0 , y0 ) und e, dann wissen wir (grad f (x0 , y0 )) • e = | grad f (x0 , y0 )| · |e | · cos(ϕ) = | grad f (x0 , y0 )| · cos(ϕ). Wir erhalten also die gr¨ oßte Steigung | grad f (x0 , y0 )|, wenn cos(ϕ) = 1 ist, also bei ϕ = 0. Die kleinste Steigung liegt bei cos(ϕ) = −1, also in Gegenrichtung bei ϕ = π, vor. Damit zeigt der Vektor grad f (x0 , y0 ) in Richtung des steilsten Anstiegs, w¨ ahrend − grad f (x0 , y0 ) in Richtung des steilsten Abstiegs zeigt. Diese Eigenschaft des Gradienten nutzt man bei Optimierungsproblemen aus, um sich schrittweise einem lokalen Maximum oder Minimum
5.5 Orthogonalit¨ at, Fehlererkennung und verlustbehaftete Kompression
323
zu n¨ ahern (Gradientenverfahren). Ein solches Optimierungsproblem ergibt sich beispielsweise beim Backpropagation-Lernalgorithmus eines mehrschichtigen, vorw¨ artsgerichteten neuronalen Netzes, bei dem Gewichte so eingestellt werden m¨ ussen, dass der bei einer Berechnung durch das Netz gemachte Fehler minimal wird. Zur Fehlererkennung f¨ ur einen linearen Code werden wir eine Kontrollmatrix erstellen, deren Zeilen orthogonal zu den Zeilen der Generatormatrix sind. Damit sind alle zul¨ assigen Codew¨ orter (Linearkombinationen der Zeilen der Generatormatrix) ebenfalls orthogonal zu den Zeilen der Kontrollmatrix. Ist ein Wort zu einer Zeile nicht orthogonal, dann liegt ein Fehler vor. Zum Aufbau der Kontrollmatrix hilft der erste Teil des folgenden Satzes, bei dem es um Orthogonalr¨ aume geht: Haben wir im R3 eine Ebene U durch den Nullpunkt, dann ist klar, dass es zu dieser Ebene senkrecht stehende Vektoren gibt. Diese bilden den Orthogonalraum U ⊥ zu U . Allgemein gilt: Satz 5.33 (Orthogonalraum) Sei (K n , +; K, ·) ein n-dimensionaler Vektorraum mit Standardskalarprodukt und U ⊂ K n ein k-dimensionaler Unterraum, k ≤ n. a) Die Menge W aller Vektoren aus K n , die orthogonal zu allen Vektoren aus U stehen, ist ein n − k-dimensionaler Unterraum von K n , der Orthogonalraum von U . Dieser wird mit U ⊥ := W bezeichnet. b) Umgekehrt ist (U ⊥ )⊥ = U .
Beweis Die k Vektoren a1 = (a1,1 , a1,2 , . . . , a1,n ), . . . , ak = (ak,1 , ak,2 , . . . , ak,n ) ∈ K n m¨ ogen eine Basis des Unterraums U bilden. a) W = U ⊥ ist die Menge aller Vektoren x = (x1 , x2 , . . . , xn ), die hinsichtlich des Standardskalarprodukts orthogonal zu diesen Basisvektoren und damit zu allen Vektoren aus U sind, d. h., die die k Gleichungen a1,1 · x1 + a1,2 · x2 + · · · + a1,n · xn = 0 ∧
a2,1 · x1 + a2,2 · x2 + · · · + a2,n · xn = 0 .. .
∧
ak,1 · x1 + ak,2 · x2 + · · · + ak,n · xn = 0
erf¨ ullen. Die L¨ osungsmenge W dieses Gleichungssystems A x = 0, wobei A ∈ k×n die Matrix aus den k Basisvektoren ist, ist nach dem Dimensionssatz K (Satz 5.25) ein Unterraum der Dimension n−dim Z(A) = n−dim U = n−k.
324
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
osungsraum eines linearen Gleichungssystems b) (U ⊥ )⊥ ist wie zuvor der L¨ B x = 0, wobei jetzt die Zeilen von B Basisvektoren b1 , . . . , bn−k von U ⊥ sind. Die Dimension des L¨ osungsraums ist nun dim(U ⊥ )⊥ = n − dim U ⊥ = n − (n − k) = k. Damit hat (U ⊥ )⊥ die gleiche Dimension wie U . Da die Zeilen von B orthogonal zu den Vektoren von U sind, ist U ⊂ (U ⊥ )⊥ . Eine Basis von U ist also wegen der gleichen Dimension auch Basis von (U ⊥ )⊥ , daher sind beide Vektorr¨ aume gleich. Ohne die positive Definitheit eines Skalarproduktes k¨ onnen vom Nullvektor verschiedene Vektoren senkrecht zu sich selbst stehen. So ist das beispielsweise bei Codes, (1, 1) • (1, 1) = 1 ⊕ 1 = 0. Damit ist ohne positive Definitheit aume U und U ⊥ k¨ onnen nicht sichergestellt, dass U ∩ U ⊥ = {0 } ist, die R¨ n sich weitergehend u ¨berlappen. Im Euklid’schen Raum (R , +; R, ·) gilt dagegen ur a ∈ U ∩ U ⊥ gilt a · a = 0, und das ist wegen der U ∩ U ⊥ = {0 }, denn f¨ positiven Definitheit nur f¨ ur a = 0 erlaubt. Damit l¨ asst sich zeigen, dass sich n u+w mit u ∈ U und w ∈ U ⊥ schreiben jeder Vektor v ∈ R als Summe v = l¨ asst, wobei u und w eindeutig bestimmt sind. Das ist nicht schwierig, aber wir verzichten hier auf einen Beweis. Als Konsequenz ergeben eine Basis von U und eine Basis von U ⊥ zusammen eine Basis von Rn . Aus dem Beweis ergibt sich, wie wir aus einer Basis von U durch L¨ osen ⊥ eines linearen Gleichungssystems eine Basis von U erhalten. Gegeben sei beispielsweise eine Basis mit den drei Vektoren (1, 0, 0, a, d), (0, 1, 0, b, e) und (0, 0, 1, c, f ) eines dreidimensionalen Unterraums U des f¨ unfdimensionalen Vek5 torraums V = (K , +; K, ·), deren Vektoren wir als Zeilen in die Matrix G, ⎛ ⎞ ⎛ ⎞ 1 0 0 a d a d ⎜ ⎟ ⎜ ⎟ ⎟ ⎜ ⎟ G := ⎜ ⎝ 0 1 0 b e ⎠ = (E3 P) mit P = ⎝ b e ⎠ , 0 0 1 c f c f osungsraum des Gleieingetragen haben. Den Unterraum U ⊥ erhalten wir als L¨ chungssystems G · (x1 , x2 , x3 , x4 , x5 ) = (0, 0, 0) bzw. x1 = −ax4 − dx5
∧
x2 = −bx4 − ex5
∧
x3 = −cx4 − f x5 .
Da wir x4 und x5 beliebig w¨ ahlen k¨ onnen, besteht die L¨ osungsmenge aus den Vektoren (x1 , x2 , x3 , x4 , x5 ) = x4 · (−a, −b, −c, 1, 0) + x5 · (−d, −e, −f, 0, 1),
x4 , x5 ∈ K.
Daran k¨ onnen wir eine Basis von U ⊥ ablesen und als Zeilen in eine Matrix schreiben: −a −b −c 1 0 = (−P E2 ) = (−P Edim V −dim U ). H= −d −e −f 0 1
5.5 Orthogonalit¨ at, Fehlererkennung und verlustbehaftete Kompression
325
Mit Gauß-Umformungen k¨ onnen wir jede Basis von U so in eine andere Basis umformen, dass beim Eintragen der Vektoren als Zeilen in eine Matrix diese eine Zeilenstufenform hat (siehe Seite 310). Die Beispielmatrix G hat eine systematische Form, bei der die Spalten, die Standard-Einheitsvektoren entsprechen, alle links stehen. Im allgemeinen Fall k¨ onnten sie u ¨ber die Matrix verteilt sein. Dann kann man aber ebenfalls wie beschrieben eine Basis von U ⊥ finden, die Matrix H l¨ asst sich lediglich nicht so sch¨ on einfach u ¨ ber die Transponierte von P schreiben. ur den Ist ein linearer Code C als Unterraum des (Bn , ⊕, B, ) gegeben, f¨ eine Basis als Zeilen der Generatormatrix G vorliegt, dann heißt eine dazu konstruierte Matrix, deren Zeilen eine Basis von C ⊥ sind, eine Kontrollmatrix, Parit¨ atsmatrix oder Pr¨ ufmatrix. Hat G die systematische Form G = (En P), dann liegt mit H = (−P En−dim C ) = (P En−dim C ) eine Kontrollmatrix vor. Hier haben wir benutzt, dass in B gilt: −1 = 1. Wir betrachten den 3-Bit Bin¨ arcode C mit einem zus¨ atzlichen Parit¨ ats-Bit aus Beispiel 5.2, der insbesondere die mittels Gauß-Umformungen auf Seite 310 gewonnene Basis mit den Vektoren (1, 0, 0, 1), (0, 1, 0, 1) und (0, 0, 1, 1) hat. Damit erhalten wir eine Generator- und eine Kontrollmatrix: ⎛ ⎞ ⎛ ⎞ 1 1 0 0 1 ⎜ ⎟ ⎜ ⎟ ⎜ ⎟ ⎟ , H = (P E1 ) = (1 1 1 1), H = ⎜ 1 ⎟ . G = (E3 P) = ⎜ 0 1 0 1 ⎜ ⎟ ⎝ ⎠ ⎝1⎠ 0 0 1 1 1 Mit einer Kontrollmatrix k¨ onnen wir nun leicht u ufen, ob ein als Zeilen¨ berpr¨ vektor geschriebenes Codewort a zul¨ assig ist. Satz 5.34 (Fehlererkennung mittels Kontrollmatrix) F¨ ur einen linearen Code C mit Kontrollmatrix H gilt (mit einer Schreibweise ¨ uber Zeilenvektoren): a ∈ C ⇐⇒ a · H = (0, 0, . . . , 0) ⇐⇒ H · a = (0, . . . , 0) . Der Code ist also der Nullraum der Matrix H. Beweis Die Zeilen von H und damit die Spalten von H sind orthogonal zu allen Vektoren aus C. Damit gilt also a ∈ C =⇒ a · H = 0. Gilt andererseits a · H = 0, dann ist a orthogonal zu allen Vektoren aus C ⊥ , d. h. a ∈ (C ⊥ )⊥ = C (siehe Satz 5.33 b)).
326
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
¨ Damit k¨ onnen wir Ubertragungsfehler, die zu unzul¨ assigen Codew¨ ortern f¨ uhren, ganz leicht u ¨ ber das Produkt a · H erkennen, das Syndrom vom a heißt. Ist das Syndrom nicht der Nullvektor, dann liegt ein Fehler vor. Im Beispiel w¨ are (1, 0, 1, 1) kein zul¨ assiges Codewort, da eine gerade Parit¨ at vorliegt, aber das Parit¨ ats-Bit in der vierten Komponente eine ungerade Parit¨ at anzeigt: (1, 0, 1, 1) · H = (1, 0, 1, 1) · (1, 1, 1, 1) = (1 ⊕ 0 ⊕ 1 ⊕ 1) = (1) = 0. F¨ ur den linearen Code (5.2) entsteht zur Basis aus Aufgabe 5.4 (Seite 287) die folgende Generator- und Kontrollmatrix:
⎛
1 0 1 0
⎜ ⎜ 1 0 0 1 G=⎜ ⎜ E4 0 1 1 0 ⎝
⎞ ⎟ ⎟ ⎟ =: (E4 P), ⎟ ⎠
0 1 0 1
⎛
1 1 0 0
⎞
⎜ ⎟ ⎜0 0 1 1 ⎟ ⎟ H = (P E4 ) = ⎜ E 4⎟. ⎜ ⎝1 0 1 0 ⎠ 0 1 0 1
uft Durch Multiplikation eines Vektors a ∈ B8 mit H kann hier nicht nur gepr¨ werden, ob a ∈ C ist. Falls nicht der Nullvektor entsteht, dann erh¨ alt man ein Syndrom, in dem die Parit¨ ats-Bits, die nicht zur Parit¨ at der Zeile bzw. Spalte passen, in der Reihenfolge b1 , b2 , c1 , c2 (siehe Seite 277) durch eine eins angegeben sind. Damit kann bei maximal einem Bitfehler direkt das fehlerhafte Bit identifiziert und korrigiert werden. Ein korrektes Codewort a l¨ asst sich aufgrund der systematischen Form von G wieder ganz einfach decodieren: Wir lassen die letzten vier Bit weg. Das k¨ onnen wir durch Multiplikation mit einer Rechtsinversen I ∈ B8×4 zu G tun, deren obere H¨ alfte in diesem Beispiel gleich der Einheitsmatrix E4 und deren untere H¨ alfte gleich der (4 × 4)-Nullmatrix ist: a · I. onnen wir in Bei einem mit einem Bitfehler u ¨ bertragenen Codewort a ∈ B8 k¨ Abh¨ angigkeit vom Syndrom eine Korrektur vornehmen, indem wir entsprechend zur oben beschriebenen Reihenfolge der Parit¨ atsbits die folgenden Vektoren zu a addieren: Syndrom zu addierender Vektor
Syndrom zu addierender Vektor
(1, 0, 1, 0) (1, 0, 0, 0, 0, 0, 0, 0)
(1, 0, 0, 0) (0, 0, 0, 0, 1, 0, 0, 0)
(1, 0, 0, 1) (0, 1, 0, 0, 0, 0, 0, 0)
(0, 1, 0, 0) (0, 0, 0, 0, 0, 1, 0, 0)
(0, 1, 1, 0) (0, 0, 1, 0, 0, 0, 0, 0)
(0, 0, 1, 0) (0, 0, 0, 0, 0, 0, 1, 0)
(0, 1, 0, 1) (0, 0, 0, 1, 0, 0, 0, 0)
(0, 0, 0, 1) (0, 0, 0, 0, 0, 0, 0, 1).
(5.18)
Liegt ein anderes vom Nullvektor verschiedenes Syndrom vor, dann ist mehr als ¨ ein Bit falsch, und ein Ubertragungsfehler kann nicht korrigiert werden.
5.5 Orthogonalit¨ at, Fehlererkennung und verlustbehaftete Kompression
327
Wir haben bislang Unterr¨ aume betrachtet, die orthogonal zueinander sind. Jetzt betrachten wir Mengen von Vektoren, bei denen die Vektoren untereinander alle orthogonal sind. Solch eine Menge ben¨ otigt man z. B. f¨ ur die FourierReihen, die bei JPEG und MP3 zur Codierung eingesetzt werden. Darauf kommen wir im Anschluss zu sprechen. Definition 5.35 (Orthonormalsystem und Orthonormalbasis) Sei V zusammen mit einem Skalarprodukt ein Euklid’scher Raum. Sei O ⊂ V eine Menge von Einheitsvektoren (d. h. Vektoren mit Betrag eins, f¨ ur e ∈ O gilt: e • e = |e |2 = 1), die paarweise orthogonal sind, so heißt O ein Orthonormalsystem. Ein Orthonormalsystem O, das zugleich Basis von V ist, heißt Orthonormalbasis. ur i, k = 1, . . . , n: F¨ ur ein Orthonormalsystem O = {c1 , . . . , cn } gilt also f¨ 1, falls i = k, da ci ein Einheitsvektor ist, ci • ck = δi,k := 0, falls i = k, da ci , ck orthogonal zueinander sind. Im Euklid’schen Raum (R3 , +; R, ·) mit dem Standardskalarprodukt bilden die Standard-Einheitsvektoren (1, 0, 0), (0, 1, 0) und (0, 0, 1) eine Orthonormalbasis: Alle Vektoren sind Einheitsvektoren, und sie sind paarweise orthogonal, z. B. ist (1, 0, 0) • (0, 1, 0) = 1 · 0 + 0 · 1 + 0 · 0 = 0. Die Vektoren eines Orthonormalsystems O = {c1 , . . . , cn } sind automatisch linear unabh¨ angig, denn wenn wir das Skalarprodukt beider Seiten von x1c1 + x2c2 + · · · + xncn = 0 mit ck f¨ ur 1 ≤ k ≤ n bilden, dann erhalten wir 0+ · · ·+ 0 + xk · 1+0+ · · · + 0 = 0. Der Nullvektor l¨ asst sich also nur als triviale Linearkombination der Vektoren aus O schreiben – und das ist die Definition der linearen Unabh¨ angigkeit. Den großen Vorteil einer Orthonormalbasis {c1 , . . . , cn } erkennen wir, wenn wir einen Vektor a als Linearkombination a = x1c1 +· · ·+xncn der Basisvektoren schreiben. Denn die Faktoren xk erhalten wir direkt u ¨ ber das Skalarprodukt. F¨ ur 1 ≤ k ≤ n ist n¨ amlich n n n xici • ck = xi (ci • ck ) = xi δi,k = xk . a • ck = i=1
i=1
i=1
Jeder Vektor a hat also die (im Sinne von Satz 5.13 eindeutige) Basisdarstellung a =
n
(a • ck ) ck .
(5.19)
k=1
Wenn wir nur eine Orthonormalbasis f¨ ur einen Unterraum U haben, dann k¨ onnen wir diese Summe auch f¨ ur Vektoren bilden, die nicht in U liegen:
328
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
Definition 5.36 (Orthogonalprojektion) Sei U ⊂ V ein Unterraum mit Orthonormalbasis {c1 , . . . , cn }. F¨ ur jeden Vektor a ∈ V heißt n (a • ck ) ck ∈ U p := k=1
die orthogonale Projektion von a in den Unterraum U .
a a−p
(0, 0, 0)
p
π 2
U
Abb. 5.6 Orthogonale Projektion: Senkrecht von oben (und zur Ebene U ) einfallendes Licht l¨ asst a den Schatten p in der Ebene werfen.
Ist p die orthogonale Projektion von a in den Unterraum U , so steht a − p senkrecht zu allen Vektoren u aus U , siehe Abbildung 5.6, denn jedes u besitzt eine ci . Wegen der Eigenschaften des Skalarprodukts Basisdarstellung u= n i=1 ui · d¨ urfen wir ausmultiplizieren: n n (a • ck ) ck • ui · ci (a − p ) • u = a − i=1
k=1
=
n i=1
n n n n ui (a • ci ) − (a • ck ) ui (ck • ci ) = ui (a • ci ) − (a • ci ) ui = 0. k=1 i=1
δi,k
i=1
i=1
Damit k¨ onnen wir a zerlegen in einen Vektor a − p , der senkrecht zu U steht, und in die orthogonale Projektion p ∈ U: a =
a − p senkrecht zu U
+ p .
(5.20)
∈U
Wenn U eine Ebene durch den Nullpunkt im R3 beschreibt, dann erhalten wir die orthogonale Projektion p eines Vektors a auf U als Schatten von a, wenn Sonnenstrahlen senkrecht zur Ebene einfallen, vgl. Abbildung 5.6. ¨ F¨ ur die vorangehenden Uberlegungen haben wir ausgenutzt, dass f¨ ur U eine Orthonormalbasis bekannt ist. Diese k¨ onnen wir aber genau mit der hergeleiteten Zerlegung (5.20) konstruieren. Beim Gram-Schmidt’schen Orthonormierungsverfahren wird aus einer Basis a1 , . . . , an schrittweise eine Orthonoraren das Verfahren und berechnen gleichmalbasis {c1 , . . . , cn } erstellt. Wir erkl¨ zeitig eine Orthonormalbasis des (R3 , +; R, ·) aus (1, 1, 0), (0, 1, 1), (1, 0, 1). Das
5.5 Orthogonalit¨ at, Fehlererkennung und verlustbehaftete Kompression
329
Verfahren funktioniert f¨ ur beliebige Euklid’sche R¨ aume. Insbesondere folgt, dass jeder endlich-dimensionale Euklid’sche Raum eine Orthonormalbasis besitzt. Da die Vektoren a1 , . . . , an linear unabh¨ angig sind, sind sie vom Nullvektor verschieden und haben einen Betrag gr¨ oßer null. Damit k¨ onnen wir den ersten Vektor a1 zu einem Einheitsvektor normieren: c1 := |aa11 | . Im Beispiel erhalten ! wir so den Vektor c1 = √12 , √12 , 0 . Wir projizieren a2 auf den von c1 erzeugten Unterraum und erhalten (a2 • ahlen den c1 ) c1 . Damit steht d2 := a2 − (a2 • c1 ) c1 senkrecht zu c1 . Wir w¨ zweiten Vektor der Orthonormalbasis nicht unmittelbar als d2 , sondern wir m¨ ussen ihn noch auf die L¨ ange eins normieren: c2 := d2 /|d2 |. Da wir mit einer Basis gestartet sind, kann d2 als nicht-triviale Linearkombination (a2 • c1 ) 1 a2 − a1 d2 = a2 − (a2 • c1 ) c1 = |a1 |
=0
der linear unabh¨ angigen Basisvektoren a1 und a2 nicht gleich 0 sein, so dass wir bei der Normierung nicht durch null teilen. Entsprechend gelingt die Normierung auch in den folgenden Schritten. Im Beispiel gilt: $ % 1 1 1 1 1 1 √ , √ ,0 = − , ,1 , d2 = (0, 1, 1) − (0, 1, 1) • √ , √ , 0 2 2 2 2 2 2
A c2 =
=1/
√
2
1 1 2 2 . · d2 = − √ , √ , √ 3 6 6 6
Wenn die Vektoren c1 , . . . , cl bereits berechnet wurden, dann erhalten wir den n¨ achsten Vektor cl+1 der Orthonormalbasis wieder als normierte Differenz zur orthogonalen Projektion in den von den Vektoren c1 , . . . , cl erzeugten Unterraum: dl+1 := al+1 −
l
(al+1 • ck ) ck ,
cl+1 :=
k=1
dl+1 , |dl+1 |
l = 1, . . . , m − 1.
Damit steht dl+1 und auch cl+1 senkrecht zu allen zuvor konstruierten Vektoren. Im Beispiel erhalten wir $ % 1 1 1 1 √ , √ ,0 d3 = (1, 0, 1) − (1, 0, 1) • √ , √ , 0 2 2 2 2 % $ 1 2 1 1 2 1 − (1, 0, 1) • − √ , √ , √ −√ , √ , √ 6 6 6 6 6 6
= √1
6
1 1 1 1 1 2 2 2 = (1, 0, 1)− = , , ,0 − − , , ,− , 2 2 6 6 3 3 3 3
1 c3 = √ (1, −1, 1). 3
330
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
Orthonormalsysteme werden f¨ ur verlustbehaftete Kompressionsalgorithmen wie JPEG und MP3 eingesetzt. Dabei versucht man, umfangreiche Daten m¨ oglichst gut durch deutlich weniger Parameter zu beschreiben. Die Grundidee dabei ist, dass die orthogonale Projektion p die beste Approximation (beste Ann¨ aherung) eines Vektors a durch Vektoren u des Unterraums darstellt, d. h.: Lemma 5.37 (Beste Approximation) Zum Vektor a des Euklid’schen Raums V sei p die orthogonale Projektion in den Unterraum U wie in Definition 5.36. Dann gilt: |a − p | < |a − u| f¨ ur alle u ∈ U \ { p }.
Beweis F¨ ur alle u ∈ U gilt: p ) + ( p− u)|2 = [(a − p ) + ( p− u)] • [(a − p ) + ( p− u)] |a − u|2 = |(a − = (a − p ) • (a − p ) + ( p− u) • ( p− u) + 2(a − p )( p− u) p− u|2 + 2(a − p )( p− u). = |a − p |2 + | Da a − p senkrecht zu allen Vektoren aus U steht, also insbesondere zu p − u ∈ U, ist der letzte Summand null: |2 + | p− u|2 =⇒ |a − p | < |a − u| f¨ ur u = p . |a − u|2 = |a − p >0 f¨ ur u =p
Die Menge der 2π-periodischen, auf R stetigen Funktionen ist ein Vektorraum C2π u ¨ ber R. Die Bezeichnung C2π soll nun nicht an Code erinnern, sondern das C steht f¨ ur continuous“ wie stetig. ” Addition und Skalarmultiplikation sind dabei wie im Vektorraum der Polynome u art, siehe Seite 280. C2π wird zum Euklid’schen ¨ ber die Funktionswerte erkl¨ 2 2π Raum unter dem Skalarprodukt f • g := 0 f (x) · g(x) dx. Aufgabe 5.13 Zeigen Sie, dass • ein positiv definites Skalarprodukt auf C2π ist. Die Teilmenge " # 1 1 1 On := √ , √ cos(k · x), √ sin(k · x) : k ∈ N, 1 ≤ k ≤ n ⊂ C2π π π 2π besteht tats¨ achlich aus 2π-periodischen Funktionen. Insbesondere hat die konstante Funktion √12π jede beliebige Periode, und cos(kx) und cos(kx) haben die (kleinste) Periode
2π k ,
also insbesondere auch die Periode 2π.
5.5 Orthogonalit¨ at, Fehlererkennung und verlustbehaftete Kompression
331
ur jedes n ∈ N eine Orthonormalbasis des von den VektoDie Menge On ist f¨ ren aus On erzeugten 2n + 1-dimensionalen Unterraums Un von C2π . Um das zu zeigen, m¨ ussen wir nur“ nachrechnen, dass On ein Orthonormalsystem ist. ” Wie auf Seite 327 gezeigt, folgt daraus die lineare Unabh¨ angigkeit des Erzeugendensystems, so dass On eine Basis ist. Aufgabe 5.14 Berechnen Sie exemplarisch die Skalarprodukte der Funktionen aus On mit √12π . In der L¨ osung der Aufgabe wird auch gezeigt, wie wir mittels Additionstheoremen die u onnen. ¨brigen Skalarprodukte berechnen k¨ Als die beste Approximation an eine Funktion f ∈ C2π durch eine Funktion aus Un erhalten wir die Fourier-Partialsumme (siehe Abbildung 5.7) als orthogonale Projektion pn (x) := a0 +
n
(ak cos(kx) + bk sin(kx))
(5.21)
k=1
mit den Fourier-Koeffizienten $ % 3 2π 3 2π 1 1 1 1 1 f•√ = √ f (t) · √ dt = f (t) dt, a0 := √ 2π 0 2π 2π 2π 0 2π $3 2π % 3 1 1 1 2π ak := √ f (t) · √ cos(kt) dt = f (t) · cos(kt) dt, k ∈ N, π 0 π 0 π $3 2π % 3 1 1 1 2π bk := √ f (t) · √ sin(kt) dt = f (t) · sin(kt) dt, k ∈ N. π 0 π 0 π In (5.21) sind die Faktoren √12π bzw. √1π der Funktionen aus On nicht zu sehen. Diese Faktoren haben wir in die Fourier-Koeffizienten verschoben, die abgesehen davon den Skalarprodukten von f mit den Funktionen aus On entsprechen. Durch L¨ osen eines Gleichungssystems kann man zeigen, dass eine Funktion aus Un durch 2n + 1 Funktionswerte an den Stellen k · 2π n , 0 ≤ k ≤ 2n, eindeutig festgelegt ist. Diese Funktion k¨ onnen wir in der Orthonormalbasis des Un als Fourier-Partialsumme schreiben und damit eindeutig u ¨ ber die FourierKoeffizienten codieren. Ein Vektor mit 2n + 1 Zahlen, z. B. Grauwerte der Pixel eines Bildes, die wir als Funktionswerte einer Funktion aus Un interpretieren, l¨ asst sich also mit 2n + 1 Fourier-Koeffizienten verlustfrei codieren. Zur Berechnung der Koeffizienten m¨ ussen keine Integrale gel¨ ost werden, sondern sie k¨ onnen durch Multiplikation einer speziellen Matrix mit dem Vektor aus den 2n + 1 Zahlen gewonnen werden. Daf¨ ur gibt es einen effizienten Algorithmus: die schnelle Fourier-Transformation (FFT – Fast Fourier Transform). F¨ ur die spezielle Matrix lassen sich damit die i. A. bei der Matrix-Vektor-Multiplikation erforderlichen Θ(n2 ) Multiplikationen von Zahlen auf Θ(n log2 (n)) reduzieren.
332
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
Dass 2n + 1 Zahlen u onnen, ¨ber 2n + 1 Fourier-Koeffizienten codiert werden k¨ haut einen erst einmal nicht vom Hocker. Interessant wird es, wenn wir mehr Zahlen (z. B. 2m + 1 mit m > n) mit 2n + 1 Fourier-Koeffizienten codieren m¨ ochten. Durch diese Zahlen ist eine Funktion aus Um vorgegeben. Die beste Approximation an diese Funktion durch Funktionen aus Un ist die Orthogonalprojektion und damit die Fourier-Partialsumme pn . Die 2n + 1 Koeffizienten oglich beschriesind also dergestalt, dass mit ihnen die Funktion aus Um bestm¨ ben werden kann. Damit lassen sich mit diesen 2n + 1 Werten auch die 2m + 1 gegebenen Zahlen n¨ aherungsweise angeben. 50
30 0
0 0 50
10
20
0 0
10
20
−30 0 30 0 −30 0
5
10
5
10
Abb. 5.7 Die links oben dargestellte 2π-periodische Funktion hat die rechts oben aufgetragenen Fourier-Koeffizienten ak und P die rechts unten angegebenen FourierKoeffizienten bk . Links unten ist p4 (x) = a0 + 4k=1 ak cos(kx) + bk sin(kx) gezeichnet. Mit nur 9 Fourier-Koeffizienten k¨ onnen wir also die gegebene Funktion bereits recht gut beschreiben.
Es gibt einen weiteren Hinweis darauf, dass wir mit den Fourier-Koeffizienten Daten (verlustbehaftet) komprimieren k¨ onnen. Dazu betrachten wir zu einer ur k → ∞. Es beliebigen stetigen Funktion f ∈ C2π die Fourier-Koeffizienten f¨ l¨ asst sich beweisen, dass limk→∞ ak = limk→∞ bk = 0 gilt. Fourier-Koeffizienten werden also beliebig klein - und die Funktion f l¨ asst sich bereits recht gut durch wenige Fourier-Koeffizienten zu kleinen Indizes darstellen (vgl. Abbildung 5.7). JPEG und MP3 komprimieren Daten, indem sie eine durch die Daten be¨ schriebene Funktion mittels Fourier-Koeffizienten codieren. Uber die Genauigkeit, mit der man die Koeffizienten als Zahlen speichert, ergibt sich die Qualit¨ at des JPEG-Bildes oder MP3-Musikst¨ ucks. Bei MP3 wird die Genauigkeit vom psychoakustischen Modell bestimmt, das unser H¨ orverm¨ ogen ber¨ ucksichtigt.
5.6
Lineare Abbildungen und Vektorgrafik
Wir haben mit Vektorr¨ aumen jetzt eine Struktur, die wir f¨ ur vielf¨ altige Aufgaben nutzen k¨ onnen. Eine der sch¨ onsten ist vielleicht das Erstellen von Vektorgrafik, um 3D-Ansichten zu erzeugen. Die Punkte im Raum sind Elemente des onnen unter Verwendung von etwas Vektorraums (R3 , +; R, ·). Diese Punkte k¨
5.6 Lineare Abbildungen und Vektorgrafik
333
Geometrie auf eine zweidimensionale Betrachtungsebene wie einen Bildschirm abgebildet werden. Hier wollen wir uns u ¨ berlegen, wie man Punkte im R3 um eine Achse dreht. Mittels solcher Rotationen und zus¨ atzlicher Verschiebungen k¨ onnen wir uns durch 3D-Szenarien beliebig bewegen. Das braucht man nicht nur bei Computerspielen, sondern z. B. auch bei Simulatoren und in der medizinischen Bildverarbeitung. In diesem Abschnitt behandeln wir die entsprechenden Abbildungen, die Vektoren auf Vektoren abbilden, und beginnen mit der Abbildung ⎛ ⎞ ⎛ ⎞ x cos(ϕ) · x − sin(ϕ) · y ⎜ ⎟ ⎜ ⎟ ⎟ ⎜ ⎟ (5.22) L : R3 → R3 , ⎜ ⎝ y ⎠ → ⎝ sin(ϕ) · x + cos(ϕ) · y ⎠ . z z Die Abbildung ordnet jedem Vektor in R3 den um den Winkel ϕ in der x-yEbene gedrehten Vektor zu. Diese Drehung k¨ onnen wir u ¨ ber die Matrix ⎛ ⎞ cos(ϕ) − sin(ϕ) 0 ⎜ ⎟ ⎟ A = A(ϕ) = ⎜ ⎝ sin(ϕ) cos(ϕ) 0 ⎠ 0 0 1
als Matrix-Vektorprodukt darstellen: L (x, y, z) = A(ϕ) · (x, y, z) . Wir u achlich um den Winkel ϕ in ¨ berlegen uns kurz, dass die Matrix tats¨ mathematisch positiver Richtung, also entgegen des Uhrzeigersinns, dreht: Sei dazu (x, y) ein Punkt der x-y-Ebene (auf die sich nicht ¨ andernden z-Koordinaten verzichten wir hier), der um ϕ auf den Zielpunkt (˜ x, y˜) gedreht wird, siehe Abbildung 5.8. Ist (x, y) = (0, 0), dann ist auch (˜ x, y˜) = (0, 0), und es ist nichts x2 + y 2 zum Nullpunkt ungleich null. Zu zu zeigen. Sei also der Abstand (x, y) geh¨ ort ein Winkel ϕ0 zwischen der x-Achse und der Strecke von (0, 0) zum Punkt mit x y cos(ϕ0 ) = und sin(ϕ0 ) = . 2 2 2 x +y x + y2 Entsprechend hat (˜ x, y˜) den Winkel ϕ0 + ϕ und den gleichen Abstand zum Nullpunkt, so dass
x2 + y 2
x ˜ y˜ cos(ϕ0 + ϕ) = und sin(ϕ0 + ϕ) = . x2 + y 2 x2 + y 2 Jetzt wenden wir die Additionstheoreme (3.35) und (3.36) von Seite 186 an:
x ˜ x2
+
(3.35)
y2
= cos(ϕ0 + ϕ) = cos(ϕ) cos(ϕ0 ) − sin(ϕ) sin(ϕ0 ) x y = cos(ϕ) − sin(ϕ) , 2 2 2 x +y x + y2
334
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
(3.36) y˜ = sin(ϕ0 + ϕ) = sin(ϕ) cos(ϕ0 ) + cos(ϕ) sin(ϕ0 ) x2 + y 2 y x + cos(ϕ) . = sin(ϕ) 2 2 2 x +y x + y2 Multiplikation mit x2 + y 2 liefert die beiden ersten Komponenten in (5.22) und damit die Darstellung der Drehmatrix.
~ ~y) (x,
ϕ
(x, y) ϕ0
Abb. 5.8 Drehung von (x, y) um ϕ zum Punkt (˜ x, y˜) in der Ebene
V¨ ollig analog beschreiben wir mittels Multiplikation mit B eine Drehung in der x-z-Ebene und mittels Multiplikation mit C eine Drehung in der y-z-Ebene: ⎛ ⎞ ⎛ ⎞ cos(ϕ) 0 − sin(ϕ) 1 0 0 ⎜ ⎟ ⎜ ⎟ ⎟ , C(ϕ) = ⎜ 0 cos(ϕ) − sin(ϕ) ⎟ . B(ϕ) = ⎜ 0 1 0 ⎝ ⎠ ⎝ ⎠ sin(ϕ) 0 cos(ϕ) 0 sin(ϕ) cos(ϕ) Diese Abbildungen haben eine ganz wichtige Eigenschaft, die sich direkt aus ihrer Definition u ¨ ber das Produkt einer Matrix mit einem Vektor ergibt: Definition 5.38 (lineare Abbildung) Es seien (V, +; K, ·) und (W, +; K, ·) Vektorr¨ aume, deren Additionen und skalare Multiplikationen jeweils durchaus unterschiedlich definiert sein d¨ urfen (aber oft nicht sind). Eine Abbildung L : V → W , a → L(a ) heißt linear genau dann, wenn das Bild einer Linearkombination von Vektoren gleich der Linearkombination der Bildvektoren ist: L(r · a + s · b ) = r · L(a ) + s · L(b )
f¨ ur alle a, b ∈ V und r, s ∈ K.
Auf der linken Seite der Gleichung wird die Addition und Skalarmultiplikation des Vektorraums V verwendet, w¨ ahrend auf der rechten Seite die davon vielleicht abweichenden Verkn¨ upfungen in W gemeint sind. Lineare Abbildungen erhalten also die f¨ ur Vektorr¨ aume typischen Linearkombinationen und passen damit in besonders guter Weise zu den Vektorr¨ aumen. Insbesondere wird der Nullvektor aus V auf den Nullvektor aus W abgebildet: L(0 ) = L(0 · a ) = 0 · L(a ) = 0.
5.6 Lineare Abbildungen und Vektorgrafik
335
Wir k¨ onnen direkt mit den Rechenregeln f¨ ur Matrizen nachrechnen, dass die ur Spaltenvektoren L : K n → K m , u ¨ ber A ∈ K m×n definierte Abbildung f¨ a → L(a ) := A · a linear ist. Das gleiche gilt f¨ ur die Abbildung L : K m → K n , a → L(a ) := a · A, die Zeilenvektoren abbildet. Die Drehmatrizen sind eine solche Abbildung f¨ ur Spaltenvektoren. Beim Codieren haben wir auf Seite 298 die Generatormatrix G von links mit einem zu codierenden Zeilenvektor multipliziert. Die dar¨ uber definierte Codierung fG ist also ebenfalls linear. Auch f¨ ur die Berechnung des Syndroms bei einem linearen Code wird ein Zeilenvektor mit der Transponierten der Kontrollmatrix multipliziert, das Syndrom wird daher u ¨ ber eine lineare Abbildung berechnet. Wir betrachten einige weitere Beispiele f¨ ur lineare Abbildungen: a) Besonders einfach ist die identische Abbildung L : Rn → Rn mit a → L(a ) := a, die anscheinend gar nichts tut. Offensichtlich bleibt eine Linearkombination unter dieser Abbildung erhalten, sie ist linear. Wir k¨ onnen sie etwas aufw¨ andiger schreiben als Multiplikation mit der n × nEinheitsmatrix En . b) Mathematiker denken oft zuerst an Extremf¨ alle. Sie machen das, um ihre Voraussetzungen zu pr¨ ufen. Das kann durchaus auch beim Softwaretest sinnvoll sein. Einen Extremfall, n¨ amlich eine Abbildung, die nichts tut, hatten wir bereits. Der n¨ achste Extremfall ist die ebenfalls lineare Nullabbildung x → L( x ) := 0, die wir durch Multiplikation mit einer L : Rn → Rn , Matrix, deren Elemente alle 0 sind, beschreiben. c) L : R3 → R3 , a → L(a ) := −a ist eine Spiegelung im Ursprung, die wir auch durch Multiplikation mit (−1) · E3 erhalten. d) Eine dreidimensionale Szene l¨ asst sich leicht (nicht-perspektivisch, d. h. ohne Fluchtpunkt) auf die x-y-Ebene projizieren, indem wir die z-Koordinaten weglassen (Parallelprojektion). ⎛ ⎞ x ⎜ ⎟ x 3 2 ⎜ ⎟ P : R → R , ⎝ y ⎠ → y z ist eine lineare Abbildung, die das beschreibt. Wieder k¨ onnen wir das Verhalten mit einer Matrix darstellen: ⎛⎛ ⎞⎞ ⎛ ⎞ x x ⎜⎜ ⎟⎟ ⎜ ⎟ 1 0 0 ⎜ ⎟ ⎜ ⎟⎟ P⎜ ⎝⎝ y ⎠⎠ = 0 1 0 · ⎝ y ⎠. z z Die Beispiele sollen nicht suggerieren, dass jede Abbildung linear ist. Beispielsweise ist die Menge der linearen Abbildungen von (R, +; R, ·) nach (R, +; R, ·) sehr u ¨ bersichtlich. Jede hat eine Abbildungsvorschrift der Form f (x) = c · x
336
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
f¨ ur ein c ∈ R. Ihr Graph ist also eine Gerade durch den Koordinatenursprung. Bereits die Funktion g(x) = x + 1, deren Graph nicht durch den Koordinatenursprung geht, ist nicht linear: g(x1 + x2 ) = x1 + x2 + 1 = g(x1 ) + g(x2 ) = x1 + x2 + 2.
(5.23)
Aufgabe 5.15 Zeigen Sie, dass die in (5.18) auf Seite 326 vorgenommene Zuordnung von Syndromen zu Korrekturvektoren nicht Teil einer linearen Abbildung sein kann. Die Beispiele zeigen aber, dass sich lineare Abbildungen zwischen endlich dimensionalen Vektorr¨ aumen (K n , +; K, ·) und (K m , +; K, ·) durch Matrizen u ¨ bersichtlich schreiben lassen. Wir wissen bereits, dass eine u ¨ ber ein Produkt mit einer Matrix definierte Abbildung linear ist. Umgekehrt k¨ onnen wir aber n m auch zeigen, dass jede lineare Abbildung L : K → K durch eine Matrix x) = A · x darstellbar ist. Dazu schreiben wir die Vektoren A ∈ K m×n mit L( x des K n als Linearkombination der Standard-Basis e1 = (1, 0, 0, . . . ) , e2 = (0, 1, 0, . . . ) ,. . . , en = (0, 0, . . . , 1) : x = (x1 , . . . , xn ) = x1 · e1 + x2 · e2 + · · · + xn · en . Wenden wir nun die lineare Abbildung L auf diese Darstellung an, dann erhalten wir L( x ) = x1 · L(e1 ) + x2 · L(e2 ) + · · · + xn · L(en ) = A · x, wobei die n Spalten der Matrix A ∈ K m×n die Bilder L(e1 ), . . . , L(en ) der Basisvektoren sind. Die Multiplikation einer (n × n)-Matrix mit einem Vektor f¨ uhrt allgemein zur Multiplikation von n2 Zahlen. Bei speziellen Matrizen (z. B. schwach besetzte Matrizen mit vielen Nullen oder Matrizen, die bei der Fourier-Transformation eingesetzt werden, siehe Seite 331) geht das aber auch schneller. Mit der Basisdarstellung aus Satz 5.13 auf Seite 287 haben wir bereits gesehen, dass wir jeden n-dimensionalen Vektorraum u orper K als ¨ber einem K¨ onnen. Diese Abbildung auf K n ist sogar ebenfalls linear. DaK n codieren k¨ mit k¨ onnen wir auch lineare Abbildungen zwischen endlich-dimensionalen Vekuhren und mit torr¨ aumen auf lineare Abbildungen zwischen K n und K m u ¨ berf¨ Matrizen schreiben. Satz 5.39 (Hintereinanderausf¨ uhrung linearer Abbildungen) Es sei L : K l → K n eine lineare Abbildung mit (n × l)-Matrix A, d. h. L(a ) = A · a, und S : K n → K m eine lineare Abbildung mit (m × n)Matrix B. Dann entsteht durch Hintereinanderausf¨ uhren der Abbildungen (Verkettung) eine neue Abbildung S ◦ L : K l → K m mit (S ◦ L)(a ) = S(L(a )). Diese ist linear, und die zugeh¨ orige (m×l)-Matrix lautet C = B·A.
5.6 Lineare Abbildungen und Vektorgrafik
337
Beweis Die Linearit¨ at von L und S u agt sich auf S ◦ L. Denn f¨ ur a, b ∈ K l ¨ bertr¨ und r, s ∈ K ist (S ◦ L)(ra + sb ) = S(L(ra + sb )) = S(rL(a ) + sL(b )) = rS(L(a )) + sS(L(b )) = r(S ◦ L)(a ) + s(S ◦ L)(b ). Dass sich die Matrix f¨ ur S ◦ L als Produkt der einzelnen ergibt, ist fast trivial: (S ◦ L)(a ) = S(A · a ) = B · A · a. Aus dieser Darstellung ergibt sich auch sofort wieder die Linearit¨ at. Beim Nachrechnen der Linearit¨ at haben wir nicht ausgenutzt, dass die Vektorr¨ aume speziell K l und K n und die linearen Abbildungen u ¨ ber Matrizen darstellbar sind. Die Hintereinanderausf¨ uhrung linearer Abbildungen zwischen beliebigen (auch unendlich-dimensionalen) Vektorr¨ aumen ist linear. Wenn wir zun¨ achst eine Punktmenge im R3 in der x-y-Ebene um den Winkel α und dann das Ergebnis in der y-z-Ebene um den Winkel γ jeweils um den Nullpunkt drehen m¨ ochten, dann k¨ onnen wir zuerst die Vektoren der Menge mit der Matrix A(α) (siehe Seite 333) und dann das Ergebnis mit der Matrix C(γ) multiplizieren. Das entspricht insgesamt der Multiplikation mit ⎛ ⎞ cos(α) − sin(α) 0 ⎜ ⎟ ⎟. C(γ) · A(α) = ⎜ cos(γ) sin(α) cos(γ) cos(α) − sin(γ) ⎝ ⎠ sin(γ) sin(α) sin(γ) cos(α) cos(γ) ochten, dann f¨ uhren Wenn wir um einen anderen Punkt d = 0 ∈ R3 drehen m¨ wir das auf eine Drehung um den Nullpunkt zur¨ uck. Dazu m¨ ussen wir zun¨ achst −d zu allen Punkten addieren, so dass wir den Drehpunkt in den Nullpunkt verschieben, k¨ onnen dann um den Nullpunkt drehen und m¨ ussen anschließend wieder d addieren. Diese Verschiebungen sind aber keine linearen Abbildungen von R3 nach R3 (vgl. (5.23)). Damit wir sie aber dennoch als lineare Abbildung auffassen und u onnen, wenden wir einen Trick an: ¨ber eine Matrix darstellen k¨ ¨ der Ubergang zu homogenen Koordinaten. Dazu erweitern wir die Punkte ahlen. Wir aus dem R3 um eine vierte Komponente, die wir konstant als 1 w¨ ussen jetzt um eine Zeile und rechnen jetzt also im R4 . Die Drehmatrizen m¨ Spalte erweitert werden, deren Komponenten null bis auf die Diagonalkomponente sind, die eins ist. Die Drehung um α und anschließend um γ sieht jetzt also so aus: ⎛ ⎞ cos(α) − sin(α) 0 0 ⎜ ⎟ ⎜ cos(γ) sin(α) cos(γ) cos(α) − sin(γ) 0 ⎟ ⎜ ⎟. R(α, γ) := ⎜ ⎟ ⎝ sin(γ) sin(α) sin(γ) cos(α) cos(γ) 0 ⎠ 0
0
0 1
338
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
Mit der zus¨ atzlichen Komponente k¨ onnen wir aber nun auch Verschiebungen (Translationen) realisieren:
⎛
1 0 0 d1
⎞
⎜ ⎟ ⎜ 0 1 0 d2 ⎟ ⎟, T(d1 , d2 , d3 ) := ⎜ ⎜ ⎟ ⎝ 0 0 1 d3 ⎠ 0 0 0
⎛
x
⎞
⎛
x + d1
⎜ ⎟ ⎜ ⎜ y ⎟ ⎜ y + d2 ⎟ ⎜ T(d1 , d2 , d3 ) · ⎜ ⎜ ⎟=⎜ ⎝ z ⎠ ⎝ z + d3
1
1
⎞ ⎟ ⎟ ⎟. ⎟ ⎠
1
Im Grafik-Framework OpenGL (http://www.opengl.org/) kann man diese Matrizen in der Reihenfolge, wie sie im Produkt von links nach rechts stehen, angeben. In Listing 5.1 wird das Produkt E4 · T(d1 , d2 , d3 ) · R(α, γ) · T(−d1 , −d2 , −d3 ) ∈ R4×4 berechnet. Der Start mit der Einheitsmatrix E4 dient der Initialisierung und ist n¨ otig, da die u ¨brigen Befehle Matrizen hinzu multiplizieren. W¨ urden wir nach den Anweisungen 1–5 Punkte zeichnen, dann w¨ urden diese automatisch mit dem Produkt der Matrizen multipliziert. Diese Berechnungen werden in der Regel sehr effizient von der Grafikkarte durchgef¨ uhrt (siehe Abbildung 5.9). 1 2 3 4 5
g l L o a d I d e n t i t y (); g l T r a n s l a t e f ( d1 , d2 , d3 ); g l R o t a t e f ( gamma , 1.0 , 0.0 , 0.0); g l R o t a t e f ( alpha , 0.0 , 0.0 , 1.0); g l T r a n s l a t e f ( - d1 , -d2 , - d3 ); Listing 5.1 Lineare Abbildungen in OpenGL: In Zeile 1 wird die Einheitsmatrix geladen. Diese wird in Zeile 2 mit einer Translationsmatrix zur Verschiebung um (d1 , d2 , d3 ) multipliziert. Es folgen zwei Drehmatrizen. In Zeile 3 wird mit einer Matrix zur Drehachse (1, 0, 0) multipliziert, die eine Drehung in der y-z-Ebene beschreibt. Die in Zeile 4 verwendete Matrix hat die Drehachse (0, 0, 1) und f¨ uhrt eine Drehung in der x-y-Ebene aus. In der letzten Zeile wird schließlich noch mit einer Matrix multipliziert, die eine Verschiebung um (−d1 , −d2 , −d3 ) beschreibt.
Ist eine lineare Abbildung L : V → W bijektiv, so ist auch die Umkehrabbildung L−1 : W → V linear. Um das nachzurechnen, seien c, d ∈ W und r, s ∈ K. Da L bijektiv ist, gibt es zu c und d Vektoren a, b ∈ V mit c = L(a ) und d = L(b ). Wegen der Linearit¨ at von L ist rc + sd = L(ra + sb ). Damit k¨ onnen −1 wir die Linearit¨ at von L zeigen: L−1 (rc + sd ) = L−1 (L(ra + sb )) = ra + sb = rL−1 (c ) + sL−1 (d ). Ist L : K n → K n mit L(a ) = A ·a, wobei die Matrix A invertierbar ist, dann ist L umkehrbar zu L−1 : K n → K n mit L−1 (a ) = A−1 · a. Das ergibt sich durch Hintereinanderausf¨ uhren der Abbildungen, also durch Multiplikation der Matrizen: L−1 (L(a ) = A−1 · A · a = a.
5.6 Lineare Abbildungen und Vektorgrafik
339
Abb. 5.9 3D-Ansicht unserer Hochschule (im Vordergrund): Das Koordinatensystem ist so gew¨ ahlt, dass die x-Achse nach rechts, die y-Achse in den Raum und die zAchse nach oben zeigt. Die Szene wird um einen Punkt auf der Gr¨ unfl¨ ache zwischen Hochschule und Kirche um α = 22◦ in der x-y-Ebene (Ebene des Bodens) und dann achst der Drehpunkt in den Nullpunkt um 16◦ in der y-z-Ebene gedreht. Dazu wird zun¨ verschoben, und nach der Drehung wird die Verschiebung umgekehrt. Das erste Bild zeigt die Ausgangssituation, das zweite die Verschiebung zum Drehpunkt, das dritte das Ergebnis der beiden Drehungen und das letzte die R¨ uckverschiebung.
Aufgabe 5.16 Zeigen Sie, dass umgekehrt jede bijektive lineare Abbildung L : K n → K n auch uber eine invertierbare Matrix darstellbar ist. ¨ Die Drehmatrizen A, B und C von Seite 333 haben eine besonders einfache Inverse: ihre Transponierte. Das rechnen wir f¨ ur A nach: ⎛ ⎞ ⎛ ⎞ cos(ϕ) sin(ϕ) 0 cos(ϕ) − sin(ϕ) 0 ⎜ ⎟ ⎜ ⎟ ⎟ ⎜ ⎟ A · A = ⎜ ⎝ − sin(ϕ) cos(ϕ) 0 ⎠ · ⎝ sin(ϕ) cos(ϕ) 0 ⎠ 0 0 1 0 0 1 ⎛ ⎞ ⎛ ⎞ cos2 (ϕ) + sin2 (ϕ) 0 0 1 0 0 ⎜ ⎟ (3.33) ⎜ ⎟ ⎜ ⎟ = ⎜ 0 sin2 (ϕ) + cos2 (ϕ) 0 ⎟ ⎝ ⎠ = ⎝ 0 1 0 ⎠. 0 0 1 0 0 1
340
5 Ausgew¨ ahlte Kapitel der Linearen Algebra
Damit stehen f¨ ur jeden Wert von ϕ die Spalten (und auch die Zeilen) von A im Euklid’schen Raum R3 mit Standardskalarprodukt senkrecht zueinander und haben den Betrag eins. Matrizen A, f¨ ur die A−1 = A gilt, nennt man daher orthogonale Matrizen. Wir haben in Abschnitt 5.4.3 gesehen, wie wir eine Codierung f : Bk → C ⊂ Bn , f (x ) = x · G zu einer Generatormatrix G ∈ K k,n mit Rang k mittels einer onnen. Die Decodierung ist dann die inverse Rechtsinversen I ∈ Bn,k umkehren k¨ lineare Abbildung u) = u · I. (5.24) f −1 : C → Bk mit f −1 ( Die von den Matrizen bekannten Begriffe Nullraum und Spaltenraum heißen bei linearen Abbildungen Kern und Bild. Definition 5.40 (Kern und Bild) x ∈ V : L( x ) = 0 Sei L : V → W eine lineare Abbildung. Kern(L) := heißt der Kern von L. Das Bild von L ist die Menge Bild(L) := {L( x ) ∈ W : x ∈ V } . Handelt es sich um eine lineare Abbildung von V = K n nach W = K m , die u ¨ber eine Matrix A ∈ K m×n definiert ist mit L(a ) = A · a, dann ist N (A) = Kern(L) und S(A) = Bild(L). Der Dimensionssatz f¨ ur Matrizen (siehe Satz 5.24) liest sich dann so f¨ ur lineare Abbildungen: dim V = dim Bild(L) + dim Kern(L). Bei einer injektiven linearen Abbildung L : V → W besteht der Kern nur aus dem Nullvektor, da ja nur ein Vektor auf 0 abgebildet werden darf. Also ist dim Kern(L) = 0. Ist L surjektiv, dann muss dim Bild(L) = dim W gelten. Damit eine lineare Abbildung bijektiv sein kann, muss also notwendigerweise onnen also nur dim V = dim W gelten. Lineare Abbildungen L : K n → K m k¨ dann bijektiv und damit invertierbar sein, wenn n = m gilt. Eine Projektion von R3 auf R2 ist also nicht umkehrbar. Die Abbildungsvorschrift der Decodierung f −1 aus (5.24) ist nicht nur auf C, u) = u · I. sondern auf ganz Bn anwendbar. Sei also f˜−1 : Bn → Bk mit f˜−1 ( Wir u ufen an dieser Abbildung den Dimensionssatz: ¨berpr¨ n = dim Bn = dim Bild(f˜−1 ) + dim Kern(f˜−1 ) = dim Bk + dim N (I ) = k + (n − k). Naturgem¨ aß konnten wir in dieser Einf¨ uhrung nur einen kleinen Ausschnitt der Mathematik wiedergeben. Wir hoffen aber, dass wir die Themenauswahl so gestaltet haben, dass Sie f¨ ur die Anwendung der Mathematik in der Informatik gut ger¨ ustet sind.
Literaturverzeichnis Adams D. (1979) Hitchhiker’s Guide to the Galaxy. Pan Books, London. Ebbinghaus, H.-D. (2003) Einf¨ uhrung in die Mengenlehre. Spektrum Akademischer Verlag, Berlin Heidelberg. ¨ Gellrich R. und Gellrich C. (2003) Mathematik – Ein Lehr- und Ubungsbuch Band 1–4. Harri Deutsch, Frankfurt a. M. Goebbels St. und Ritter St. (2013) Mathematik verstehen und anwenden. SpringerSpektrum, Berlin Heidelberg. Krumke S. O. und Noltemeier H. (2012) Graphentheoretische Konzepte und Algorithmen. Springer Viewg, Wiesbaden. Sch¨ oning U. (2008) Ideen der Informatik: Grundlegende Modelle und Konzepte. Oldenbourg, M¨ unchen. Wolf J. (2009) C von A bis Z. Galileo Computing, Bonn.
S. Goebbels, J. Rethmann, Mathematik für Informatiker, DOI 10.1007/978-3-642-55340-0, © Springer-Verlag Berlin Heidelberg 2014
Index A Abbildung, 46 identische, 335 Abbildungsvorschrift, 47 Abel’sch, 117, 118 abgeschlossenes Intervall, 173 Ableitung, 247 Ableitungsfunktion, 247 absolut konvergent, 238 Absolutbetrag, 195 abz¨ ahlbar, 200 Additivit¨ at, 317 adjazent, 61, 62 Adjazenz-Liste, 65 Adjazenz-Matrix, 64 akzeptierte Sprache, 46 Algorithmus randomisierter, 156 allgemeing¨ ultig, 17 Allquantor, 19 Alphabet, 43 Anfangsknoten, 62, 63 antisymmetrisch, 50 ¨ Aquivalenz, 10, 22 ¨ Aquivalenzklasse, 51 ¨ Aquivalenzrelation, 50 Arcus-Funktionen, 186 Argument, 47 ASCII, 54 assoziativ, 117, 278 Assoziativgesetz, 8, 12, 165 aufspannen, 283 außenplanar, 104 Ausgangsgrad, 62 auslaufend, 62 Aussage, 16 aussagenlogische Formeln, 16 Austauschsatz, 289 Automat, 42 deterministischer, 42 endlicher, 44 nicht-deterministischer, 47
beschr¨ ankt, 206 nach oben, 206 nach unten, 206 bestimmt divergent, 235 Betrag, 319 Betragsfunktion, 195 Beweis direkter, 23 indirekter, 25 bijektiv, 53, 54 Bild, 46, 340 Bin¨ arbaum, 33 Binomialkoeffizient, 140 Binomialverteilung, 154 binomische Formel, 145 dritte, 162 bipartit, 97 Bit, 9 hidden, 200 Blatt, 33, 92 Blockcode, 275 Bruch, 165 Br¨ ucke, 109 Byte, 54
B Backtracking, 69 Basis, 195, 286 Baum, 90 Baumkanten, 69 bedingte Wahrscheinlichkeit, 150 Bedingung hinreichende, 21 notwendige, 21 Bellman/Ford-Algorithmus, 88
D Datenabh¨ angigkeitsgraph, 73 Datenabh¨ angigkeitskante, 74 De Morgan’sche Regeln, 9, 12 Definitionen, 20 Definitionsbereich, 46 Determinante, 313 deterministisch, 45 deterministischer Automat, 42 Diagonalmatrix, 295
C Cantor-Diagonalisierung, 201 Carmichael-Zahlen, 160 Cauchy-Bedingung, 237 Cauchy-Folge, 236 Cauchy-Kriterium, 236, 237 Cauchy-Schwarz’sche Ungleichung, 319 Chinesischer Restsatz, 137 CISCO IP Multicast, 93 Clique, 98 Code, 274 (n, k)-Code, 288 linearer, 277 Codetabelle, 53 Codierung, 53, 274 homomorphe, 274
S. Goebbels, J. Rethmann, Mathematik für Informatiker, DOI 10.1007/978-3-642-55340-0, © Springer-Verlag Berlin Heidelberg 2014
344
dicht, 202 dichter Graph, 65 Differenz, 6 differenzierbar, 247 Dijkstras Algorithmus, 80 Dimension, 290 Dimensionssatz, 309, 310 direkter Beweis, 23 disjunkt, 3 Disjunktion, 14 disjunktive Normalform, 13 Diskriminante, 178 Distributivgesetz, 9, 12, 122, 165, 279 divergent, 226 bestimmt, 235 Divide-and-Conquer-Algorithmus, 217 Dreiecksmatrix, 295 Dreiecksungleichung, 204, 265, 319 dritte binomische Formel, 162 dritte Normalform, 49 Dualsystem, 13 d¨ unn besetzter Graph, 65 Durchmesser, 109 E echte Teilmenge, 3 Einer-Komplement, 126 einfacher Graph, 64 einfacher Kreis, 62, 63 einfacher Weg, 62 Eingangsgrad, 62 Einheitsmatrix, 295 Einheitsvektor, 319 einlaufend, 62 Einselement, 122 Element, 1 inverses, 118 neutrales, 118 Elementarereignis, 147 Elementarereignisraum, 147 Elementarwahrscheinlichkeiten, 149 elementfremd, 3 Endknoten, 61–63 endlicher Automat, 44 Ereignis, 147 sicheres, 147 unm¨ ogliches, 147 erf¨ ullbar, 17 erste Normalform, 49 Erwartungswert, 151 erzeugen, 283 Erzeugendensystem, 283 Euklid’sche Norm, 319 Euklid’scher Raum, 317 Euler’sche Zahl, 175, 241 Euler-Tour, 105 Existenzquantor, 19
Index
Exponenten, 195 Exponentialfunktion, 178 Exzess-Darstellung, 199 F Fermat’sche Pseudo-Primzahlen, 160 Festkomma-Zahlen, 195 FFT, 331 Fibonacci-Zahlen, 234 Folge, 205 Folgenglied, 205 Folgerung, 11, 20, 21 Format, 295 Fourier-Koeffizienten, 331 Fourier-Partialsumme, 331 Fourier-Transformation schnelle, 331 Fraktal, 207 Fundamentalsatz der Algebra, 177 Funktion, 46 gerade, 183 ungerade, 183 G Gauß-Algorithmus, 300 Gauß-Klammer obere, 220 untere, 220 gebrochen-rationale Funktion, 235 Generatormatrix, 297 geometrische Reihe, 228 geometrische Summe, 34 geordnet total, 116 Gerade, 176 gerade Funktion, 183 gerichteter Graph, 59 gerichteter Weg, 62 Gesetz der großen Zahlen, 154 gewichteter Graph, 79 Gleichungssystem lineares, 299 Gleitpunktdarstellung, 195 Grad eines Polynoms, 176 Gradient, 321 Gradientenverfahren, 323 Gram-Schmidt’sches Orthonormierungsverfahren, 328 Graph dichter, 65 d¨ unn besetzter, 65 einfacher, 64 gerichteter, 59 gewichteter, 79 arer, 90 komplement¨ reverser, 73 ungerichteter, 59
Index
Graphisomorphie, 111 Grenzwert, 226 gr¨ oßter gemeinsamer Teiler, 131 Grundgesamtheit, 147 Gruppe, 118 H Halbgruppe, 116 Hamilton-Kreis, 105 Hamming-Abstand, 275 Hamming-Gewicht, 281 harmonische Reihe, 237 Hauptdiagonale, 295 Hauptsatz der Differenzial- und Integralrechnung, 268 Heap, 212 Heap-Sort, 211 hidden bit, 200 Hilbert-Hotel, 201 hinreichende Bedingung, 21 homogen, 299 homogene Koordinaten, 337 Homogenit¨ at, 317 Horner-Schema, 191 I identische Abbildung, 335 Implikation, 21 Index-Transformation, 28 indirekter Beweis, 25 Induktionsanfang, 30 Induktionsannahme, 31 Induktionsschluss, 31 Induktionsschritt, 31 Induktionsvoraussetzung, 31 induzierter Teilgraph, 74 inhomogen, 299 Inhomogenit¨ at, 299 injektiv, 54 Integral, 263 Integrand, 263 Interpolationspolynom, 178 Intervall abgeschlossenes, 173 offenes, 173 Intervallschachtelung, 173 inverse Matrix, 311 inverses Element, 118 invertierbar, 311 inzident, 61, 62 irrationale Zahlen, 173 K Kanten, 59 Karnaugh-Veitch-Diagramm, 15 kartesisches Produkt, 7
345
Kern, 340 Kettenregel, 252 Klausel, 36 Klauselmenge, 36 kleinstes gemeinsames Vielfaches, 136 Knoten, 59 Knotenf¨ arbung, 102 Knotengrad, 62 Koeffizienten, 176 Kombinationen, 140 mit Wiederholung, 143 ohne Wiederholung, 140 kommutativ, 6, 117, 118, 122 Kommutativgesetz, 8, 12, 165 Komplement, 3 komplement¨ arer Graph, 90 komplexe Zahlen, 177 Komponente, 294 kongruent, 51, 137 K¨ onigsberger Br¨ uckenproblem, 57 Konjunktion, 14 konjunktive Normalform, 17 Kontrollabh¨ angigkeitskante, 74 Kontrollmatrix, 325 konvergent, 226 Konvergenz, 226 absolute, 238 Koordinaten homogene, 337 K¨ orper, 165 Kosinus, 182 Kotangens, 182 Kreis, 62, 63 einfacher, 62, 63 kreisfrei, 71 Kreuzprodukt, 7 Kronecker-Delta, 319 Kruskals Algorithmus, 94 Kurvendiskussion, 261 L L¨ ange, 319 Landau-Symbole, 208 Las-Vegas-Algorithmen, 156 leere Menge, 2 Leitkoeffizient, 176 Lemma, 20 Limes, 226 linear, 334 linear abh¨ angig, 284 linear unabh¨ angig, 284 lineare Gleichungssysteme, 299 lineare H¨ ulle, 283 linearer Code, 277 Linearit¨ at, 264 Linearkombination, 282, 287 linkseindeutig, 54
346
linkstotal, 46 Literale, 13 Logarithmus nat¨ urlicher, 179 zur Basis a, 180 lokales Maximum, 249 lokales Minimum, 249 M M¨ achtigkeit, 3 Mandelbrot-Menge, 206 Mantisse, 195 Maschinengenauigkeit, 199 Master-Theorem, 222 Matrix, 294 inverse, 311 orthogonale, 340 transponierte, 296 Maximum, 211 lokales, 249 Mealy-Automat, 42 Mehrfachkanten, 61 Menge, 1 leere, 2 Miller-Rabin-Test, 161 minimaler Spannbaum, 93 Minimum lokales, 249 Minimum Spanning Tree Heuristic, 110 Mittelwertsatz, 261 modulo, 51, 120 Monom, 176 monoton, 208 fallend, 208, 262 wachsend, 207, 262 Monotonie, 264 Monte-Carlo-Algorithmen, 157 N n-te Wurzel, 174 n-Tupel, 7 nat¨ urliche Zahlen, 116 nat¨ urlicher Logarithmus, 179 neutrales Element, 118 nicht-deterministisch, 45 nicht-deterministischer Automat, 47 Normalform disjunktive, 13 dritte, 49 erste, 49 konjunktive, 17 zweite, 49 normalisiert, 195 normierte Zeilenstufenform, 300 normiertes Polynom, 176 notwendige Bedingung, 21 Nullabbildung, 335
Index
Nullfolge, 229 Nullraum, 307 O obere Gauß-Klammer, 220 obere Schranke, 206, 208 offenes Intervall, 173 Optimalit¨ atsprinzip von Bellmann, 79 Ordnung partielle, 50 totale, 50 orthogonal, 320 orthogonale Matrix, 340 orthogonale Projektion, 328 Orthogonalraum, 323 Orthonormalbasis, 327 Orthonormalsystem, 327 P p-q-Formel, 178 Paar, 2 Paare, 7 Parit¨ ats-Bit, 276 Parit¨ atsmatrix, 325 Partialsumme, 217 partielle Ableitungen, 321 partielle Integration, 271 partielle Ordnung, 50 Pascal’sches Dreieck, 141 Periode, 166 Permutationen, 139 Peterson-Graph, 110 Pivot-Element, 218, 304 planar, 99 Polynom normiertes, 176 Polynome, 176 positive Definitheit, 317 Potenzmenge, 3 Potenzreihe, 260 adikat, 18 Pr¨ Pr¨ adikatenlogik, 18 Primfaktoren, 135 Primfaktorzerlegung, 135 Primzahl, 131 Problem des Handlungsreisenden, 110 Produktregel, 250 Pr¨ ufmatrix, 325 Punkt-Steigungsform, 177 Q quadratisch, 295 quadratische Erg¨ anzung, 178 Quantoren, 19 Querkanten, 70 Quotientenregel, 251
Index
347
R randomisierter Algorithmus, 156 Rang, 309 rationale Zahlen, 165 rechtseindeutig, 46 reelle Zahlen, 173 reflexiv, 50 Reihe, 211, 217 geometrische, 228 harmonische, 237 Relation, 45 Resolutionskalk¨ ul, 38 Resolvente, 37 Restklassen, 52, 120 Restklassenring, 122 reverser Graph, 73 Ring, 122 RSA-Verschl¨ usselungsverfahren, 167 R¨ uckw¨ artskanten, 69
stark zusammenh¨ angend, 75 starke Pseudo-Primzahlen, 163 starke Zusammenhangskomponente, 75 Startknoten, 61 Steinerbaum, 112 stetig, 244 stochastisch unabh¨ angig, 150 streng monoton fallend, 208 wachsend, 179, 208 Struktur, 116 Substitutionsmethode, 222 Substitutionsregel, 271 Summenzeichen, 27 surjektiv, 54 Symmetrie, 317 symmetrisch, 50 Syndrom, 326 systematische Form, 310
S Satz, 20 Satz des Pythagoras, 186 Satz von L’Hospital, 257 Satz von Laplace, 149 Satz von Taylor, 259 Schatten, 75 Schleifeninvariante, 32 Schlingen, 60 schnelle Fourier-Transformation, 331 Schnittknoten, 109 Schnittmenge, 6 Schranke obere, 206 untere, 206 schwach zusammenh¨ angend, 76 selbst¨ ahnlich, 207 sicheres Ereignis, 147 Sieb des Eratosthenes, 156 Sinus, 182 Skalar, 278 Skalarprodukt, 297, 316, 317 Slice, 73 Spalten, 295 Spaltenindex, 295 Spaltenraum, 307 Spaltenvektor, 295 Spannbaum, 92 minimaler, 93 Spanning Tree Protocol, 93 Sprache, 43 akzeptierte, 46 Stabilit¨ at, 246 Stammfunktion, 267 Standard-Basis, 287 Standard-Einheitsvektoren, 287 Standardskalarprodukt, 318
T Tangens, 182 Tautologie, 17 Taylor-Polynom, 258 Teiler, 131 gr¨ oßter gemeinsamer, 131 teilerfremd, 131 Teilgraph, 74 induzierter, 74 Teilmenge, 3 echte, 3 teilt, 131 topologische Sortierung, 71 total geordnet, 116 totale Ordnung, 50 totale Wahrscheinlichkeit, 160 transitiv, 8, 21, 22, 50 transponierte Matrix, 296 U u ahlbar, 202 ¨ berabz¨ Umkehrabbildung, 55 Umkehrfunktion, 55 unerf¨ ullbar, 17 ungerade Funktion, 183 ungerichteter Graph, 59 ungerichteter Weg, 62 Ungleichung von Tschebycheff, 153 Unicode, 54 Unifikation, 39 Universal Character Set, 54 unm¨ ogliches Ereignis, 147 untere Gauß-Klammer, 220 untere Schranke, 206 Unterraum, 281 Urbild, 54 UTF, 54
348
V Variablen freie, 19 gebundene, 19 Varianz, 153 Variationen, 140 mit Wiederholung, 142 ohne Wiederholung, 140 Vektoren, 279 Vektorraum, 278 Venn-Diagramm, 8 Vereinigungsmenge, 6 Vergleichskriterium, 240 Versuch, 147 Vertreter, 120 Vielfaches kleinstes gemeinsames, 136 Volladdierer, 14 vollst¨ andig, 98 vollst¨ andig bipartit, 98 vollst¨ andige Induktion, 30 Vollst¨ andigkeitsaxiom, 173 Vorw¨ artskanten, 70 W Wahrheitswerte, 16 Wahrscheinlichkeit bedingte, 150 totale, 160 Wahrscheinlichkeitsmaß, 148 Wald, 90 Weg einfacher, 62, 63 gerichteter, 62 ungerichteter, 62
Index
Wertebereich, 46 Wertemenge, 46, 205 Wiederholungs-Codes, 275 Winkel, 320 Wort, 43 Wurzel, 33, 91 Z Zahlen irrationale, 173 komplexe, 177 nat¨ urliche, 116 rationale, 165 reelle, 173 Zahlengerade, 173 Zeilen, 295 Zeilenindex, 294 Zeilenraum, 307 Zeilenstufenform normierte, 300 Zeilenvektor, 295 Zielmenge, 46 Zufall, 146 Zufallsexperiment, 146 Zufallsvariable, 151 zusammenh¨ angend, 75, 90 schwach, 76 stark, 75 Zusammenhangskomponente, 90 starke, 75 Zwei-Punkte-Form, 177 Zweier-Komplement, 126 zweite Normalform, 49 Zwischenwertsatz, 245