Arbeitsblatt 0

Werbung
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(kl).
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(4k) = 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(4k)  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.
Herunterladen