Prof. Dr. Gerhard Berendt SS 2005 Mathematische Grundlagen der Codierung / Endliche Strukturen Arbeitsblatt 0 / S. 1 von 4 Die ganzen Zahlen. Vorausgesetzt werden aus der Mathematik für Informatiker folgende Grundkenntnisse (bzw. Definitionen)1: Kenntnis der Mengen − der natürlichen Zahlen N , − der ganzen Zahlen Z , − der rationalen Zahlen Q , − der reellen Zahlen R und − der komplexen Zahlen C mit ihren jeweiligen elementaren algebraischen Strukturen − Gruppe, − Ring, − Integritätsbereich, − Körper, Abbildungen und Relationen (Äquivalenzrelation, Ordnungsrelation). Zahldarstellungen zu unterschiedlichen Basen (insbesondere zur Basis 2) und Umrechnung von Zahlen aus einer zu einer anderen Basis. Aus der Grundausbildung wird ferner vorausgesetzt, dass bekannt ist, wie der Rechenaufwand für einen Algorithmus mit Hilfe der O-Notation von LANDAU durch die Reduktion auf den für die grundlegenden Rechenoperationen in Digitalrechnern erforderlichen Aufwand abgeschätzt werden kann. Da diese Abschätzung in der Zahlentheorie - insbesondere wenn es sich um große Zahlen handelt – ein wesentliches Element der Beurteilung unterschiedlicher Algorithmen ist, wird hier noch einmal eine kurze Skizze des Vorgehens angefügt. Vgl. dazu z.B. Berendt, G.: Mathematik für Informatiker. BI-Wiss.-Verlag, Mannheim, Leipzig, Wien, Zürich, 1994 1 Prof. Dr. Gerhard Berendt SS 2005 Mathematische Grundlagen der Codierung / Endliche Strukturen Arbeitsblatt 0 / S. 2 von 4 Rechenaufwand für Algorithmen (Wdhlg). Zahlentheoretische Algorithmen, insbesondere solche, bei denen Schleifen oft durchlaufen werden, oder solche, die große ganze Zahlen enthalten, erfordern einen zeitlichen Aufwand, der stark variieren kann. Dieser Aufwand kann sogar so hoch sein, dass der Algorithmus in vertretbarer Zeit nicht zu Ende geführt werden kann. Grob betrachtet, ergibt sich dieser Rechenaufwand – wenn man von OverheadOperationen absieht – im wesentlichen aus der Anzahl der vorzunehmenden elementaren Rechenoperationen, wobei die dazu benötigte Zeit natürlich hauptsächlich proportional zur Taktrate des verwendeten Prozessors ist. Da diese Operationen in Digitalrechnern letztlich bitweise durchgeführt werden, und die zusammengesetzten Operationen in der Hauptsache auf die Addition von Binärzahlen reduziert werden können, kann der für den Ablauf eines Algorithmus erforderliche Zeitaufwand näherungsweise durch die Anzahl dieser elementaren Operationen abgeschätzt werden. In jeder Bit-Stelle sind dabei die folgenden Schritte durchzuführen: 1. Betrachte das oben stehende und das untenstehende Bit und stelle fest, ob ein Übertrags-Bit vorhanden ist. 2. Falls beide Bits gleich 0 sind und kein Übertrags-Bit vorhanden ist, dann gib 0 ein und setze die Operation fort. 3. Wenn entweder beide Bits gleich 0 sind und ein Übertrags-Bit vorhanden ist, oder eins der beiden Bits gleich 0 ist, das andere gleich 1 und es ist kein ÜbertragsBit vorhanden, dann gib 1 ein und setze die Operation fort. 4. Wenn entweder eins der beiden Bits gleich 0 ist, das andere gleich 1 und es ist ein ÜbertragsBit vorhanden, oder beide Bits gleich 1 sind, und es ist kein Übertrags-Bit vorhanden, dann gib 0 ein, setze in der nächsten Spalte ein Übertrags-Bit und setze die Operation fort. Prof. Dr. Gerhard Berendt SS 2005 5. Mathematische Grundlagen der Codierung / Endliche Strukturen Arbeitsblatt 0 / S. 3 von 4 Wenn beide Bits gleich 1 sind und es ist ein Übertrags-Bit vorhanden, dann gib 1 ein, setze in der nächsten Spalte ein Übertrags-Bit und setze die Operation fort. Die einmalige Durchführung dieser Schritte wird als Bit-Operation bezeichnet. Die Addition zweier k-Bit-Zahlen erfordert mithin k Bit-Operationen. Grundsätzlich lassen sich kompliziertere Rechnungen in Bit-Operationen aufgliedern, so dass die Anzahl der für die Durchführung eines Algorithmus erforderlichen BitOperationen – im folgenden kurz als "Aufwand" bezeichnet − als (angenähertes) Maß für den Zeitaufwand des Algorithmus verwendet werden kann. Mit der auf den Mathematiker LANDAU zurückgehenden "Gross-O"-Notation lässt sich der Rechenaufwand eines (ggf. aufwendigen) Algorithmus elegant nach oben abschätzen: Definition: Seien f(n): N → R+ und g(n): N →R+ Funktionen auf der Menge der natürlichen Zahlen und B, C N. Wenn dann für alle n > B gilt f(n) < C g(n), dann heißt f beschränkt durch g, geschrieben als f = O(g) . Beispiele hierzu sind: 1. Der Aufwand für die Addition zweier Binärzahlen mit k ≥ l Bits ist (maximal) O(k) . 2. Der Aufwand für die Multiplikation und die Division mit Rest zweier Binärzahlen mit k ≥ l Bits ist (maximal) O(kl). 3. Der Aufwand für die Multiplikation und die Division mit Rest zweier natürlicher Zahlen n und m mit n ≥ m ist (maximal) O( ln n ln m). Aufgabe: Berechnen Sie den Aufwand für die Konvertierung einer natürlichen Zahl n mit k Binärstellen aus der Basis 2 in die Basis 10. Lösung: Um die Dezimalstellen der vorgelegten Zahl zu erhalten, geht man wie folgt vor: 1. Teile die binär dargestellte Zahl n durch (10)2 = 1010 und bestimme den Quotienten q sowie den Rest r. Dieser Rest kann 0000, 0001, 0010, ... 1000, 1001 sein und ist – dargestellt als 0, 1, 2, ... 8, 9 die "Einer-Ziffer" der konvertierten Zahl n. Der Aufwand hierfür ist O(4k) = O(k). 2. Ersetze n durch q und wiederhole diesen Prozess für jede weitere Dezimalziffer der Zahl n. Das geschieht [log n / log 10] + 1 = O(k) mal. Insgesamt ist der Aufwand mithin O(4k) O(k) = O(k2) = O(log2 n). Prof. Dr. Gerhard Berendt SS 2005 Mathematische Grundlagen der Codierung / Endliche Strukturen Arbeitsblatt 0 / S. 4 von 4 Aufgabe: Berechnen Sie den Aufwand für die Berechnung von 3 n in Binärdarstellung mit einer natürlichen Zahl n. Lösung: Auszuführen sind n-1 Multiplikationen. Jedes Teilprodukt 3 j hat höchstens O(n) Ziffern, und 3 hat zwei Ziffern. Mithin ist der Aufwand für jede Multiplikation O(n) und damit der Gesamtaufwand O(n2). Aufgabe: Berechnen Sie den Aufwand für die Berechnung von n! . Lösung: als Übung.