Die Cantorsche Paarungsfunktion (manchmal auch Nummerierungsfunktion) ist eine in der theoretischen Informatik verwendete Abbildung. Ihre Verallgemeinerung von Paaren auf Tupel wird als Cantorsche Tupelfunktion bezeichnet.
Mit ihr kann man ein beliebiges Paar (i, j) natürlicher Zahlen durch eine einzige natürliche Zahl k darstellen. Man nummeriert damit alle Zahlenpaare. Diese Nummerierung ist sogar eindeutig umkehrbar. Das heißt, man kann aus der Zahl k das ursprüngliche Zahlenpaar (i, j) wieder ermitteln. Die Idee der diagonalen Abzählung der Menge aller Paare natürlicher Zahlen geht auf Georg Cantor zurück.
Mathematisch gesprochen heißt das: Die Cantorsche Paarungsfunktion ist eine bijektive totale Funktion, die jedem 2-Tupel (i, j) natürlicher Zahlen eine natürliche Zahl k zuordnet.
In der theoretischen Informatik wird die Cantorsche Paarungsfunktion benutzt, um Funktionen, die mehr als einen Parameter haben, auf Funktionen zurückführen, die nur genau einen Parameter haben, was viele Beweise deutlich erleichtert.
Die Zurückführung eines Problems auf ein (evtl. einfacheres) bereits bekanntes Problem, ist eine bewährte Beweistechnik, die man als Reduktion bezeichnet.
Mit der Cantorschen Paarungsfunktion lässt sich die Berechenbarkeit von k-stelligen Zahlenfunktionen auf die Berechenbarkeit von 1-stelligen Zahlenfunktionen reduzieren. D.h. man kann sich bei der Untersuchung der Berechenbarkeit von Zahlenfunktionen auf die Untersuchung von einstelligen beschränken und weiß, dass die gewonnenen Ergebnisse für alle, also auch für die mehrstelligen Zahlenfunktionen gelten.
Es ist vielleicht nicht unmittelbar einsichtig, dass es möglich ist, alle beliebigen Kombinationen von zwei Zahlen durch eine Zahl zu verschlüsseln: Die Menge aller Zahlenpaare scheint viel größer zu sein als die Menge aller Zahlen .
^ | . . . . . . . . . . . . x x x x x x x x x x x x . x x x x x x x x x x x x . x x x x x x x x x x x x . ~ -x-x-x-x-x-x-x-x-x-x-x-x-> = -x-x-x-x-x-x-x-x-x-x-x-x-> | 0 |N x |N als zweidimensionales |N als Menge von Punkten Gitter auf dem Zahlenstrahl 1
Die Cantorsche Paarungsfunktion zeigt jedoch, dass beide Mengen gleich groß sind, denn sie stellt eine 1:1 Beziehung her, sie ist eine Bijektion.
Eine Menge, die man bijektiv auf die natürlichen Zahlen abbilden kann, nennt man abzählbar unendlich (insbesondere haben die natürlichen Zahlen selbst diese Eigenschaft). Die Cantorsche Paarungsfunktion zeigt dann, dass auch die Menge der Paare natürlicher Zahlen abzählbar unendlich ist.
Die Cantorsche Paarungsfunktion definiert man als
wobei man die natürlichen Zahlen bei 0 beginnen lässt.
Kurzschreibweise:
Hier ist eine Skizze der Diagonal-Abzählung:
| 0 1 2 3 4 y --+
Auf den Achsen sind die beiden Werte aufgetragen, wie in einer Entfernungstabelle schlägt man den Wert der Cantorschen Paarungsfunktion im Schnittpunkt nach, zum Beispiel .
Die Nummerierung ist denkbar einfach: Man zählt diagonal mit Null beginnend die Paare ab: (0,0), (1,0), (0,1), (2,0), (1,1), (0,2) usw.
Man kann das obige Bildungsgesetz direkt ablesen, wenn man sich die Summation jeweils über eine Spalte verdeutlicht.
Kurzschreibweise:
Umkehrbar heißt, man kann aus einer Zahl n auf die beiden Zahlen x und y schließen, für die gilt: . Die Umkehrfunktion setzt sich aus zwei Hilfsfunktionen f und q zusammen. Diese Funktionen werden weiter unten formal definiert.
Welches Zahlenpaar repräsentiert die Zahl 17?
Dazu bestimmt man zunächst eine Zahl j, die die größte Zahl ist, für die gilt . Das lässt sich am einfachsten durch Ausprobieren ermitteln. Dabei hilft die Wertetabelle von f(j):
j 1 2 3 4 5 6 f(j) 1 3 6 10 15 21
Damit ergibt sich j zu 5. Dann ist y = 17 - f(j) = 17 - f(5) = 17 - 15 = 2. Und x = j - y = 5 - 2 = 3.
Also ist <3,2> = 17. Das lässt sich einfach anhand der Skizze oben verifizieren.
Man schreibt ihre Inverse komponentenweise als , wobei gilt:
Bei Paaren (der Fall ) schreibt man kurz und , so dass man die Inverse der Paarungsfunktion als schreiben kann.
Mit den Hilfsfunktionen
Vielleicht etwas zeitgemäßer als Pascal ist folgende Klasse in Java. Bei großen Werten von z steigt der Zeitbedarf durch die WHILE-Schleife enorm, daher wurde darauf verzichtet, Schleifen zu verwenden.
import java.math.*; public class Cantor { public long compute( int x , int y ) { return this.compute( (long) x , (long) y ); } public long computeX( int z ) { return this.computeX( (long) z ); } public long computeY( int z ) { return this.computeY( (long) z ); } public long compute( long x , long y ) { return (long) (0.5 * (x + y) * (x + y + 1) + y); } public long computeX( long z ) { long j = (long) Math.floor( -0.5 + Math.sqrt( 0.25 + 2.0 * z ) ); return j - this.computeY( z ); } public long computeY( long z ) { long j = (long) Math.floor( -0.5 + Math.sqrt( 0.25 + 2.0 * z ) ); return z - (long) ( 0.5 * j * (j + 1)); } }
Die Methode compute berechnet die dem übergebenen Zahlenpaar x und y zugeordnete Zahl, mit computeX und computeY lässt sich das jeweilige Element des Paares aus der dem Paar zugeordneten Zahl errechnen.
procedure CantorPair( I : Integer; Var X,Y : Integer); { Gibt das i-te Paar (X,Y) in Diagonalabzaehlung zurueck } var J : Integer; function F(Z : Integer) : Integer; begin F := Z * (Z + 1) div 2 end; function Q(Z : Integer) : Integer; var V : Integer; begin V := 0; while F(V) <= Z do V := V + 1; Q := V - 1 end; begin J := Q(I); Y := I - F(J); X := J - Y; end;
Hinweis: Wird das Pascal-Programm auf realen Rechnern übersetzt, muss es mit den Einschränkungen realer Rechner leben. Das heißt insbesondere, dass Speicherplatzbegrenzungen und Rundungsungenauigkeiten das Ergebnis verfälschen können. Das ist allerdings erst bei sehr großen Werten von z bzw. x und y relevant. Für die Anschauung ist ein Pascal-Programm jedoch verständlicher als eine Registermaschine.
Dieser Maschine muss man im Register R1 den Funktionsparameter x und im Register R2 y übergeben. Man erhält dann im Ausgaberegister R0 den Wert von an der Stelle (x,y).
Die folgende 2-stellige Maschine berechnet die Cantorsche Paarungsfunktion :
R4 = R1 + R2; R5 = R1 + R2 + 1; R4 = R4 * R5; R0 = R4 + R2;
Auf einen formalen Beweis, dass die Registermaschine tatsächlich die Funktion berechnet, wird verzichtet: Das ist offensichtlich erkennbar, wenn man die Funktionsvorschrift zur Berechnung der Cantorschen Paarungsfunktion mit der Maschine vergleicht.
Diese Registermaschine nutzt jedoch Befehle, die die einfache Registermaschine nicht kennt. Die einfache Registermaschine kennt nur die Operationen R+1, R-1 und den einfachen Test.
Durch Verfeinerung lässt sich diese Registermaschine aber auf eine einfache Registermaschine zurückführen.
Damit gibt es eine Registermaschine, die die Cantorsche Paarungsfunktion berechnet. Somit ist die Cantorsche Paarungsfunktion berechenbar.
Eine Funktion ist berechenbar, genau dann, wenn ein WHILE-Programm existiert, das diese Funktion berechnet.
Das oben angegebene Pascal-Programm lässt sich zu einem WHILE-Programm verfeinern. Also gibt es ein WHILE-Programm, das die Umkehrfunktion berechnet. Somit ist auch die Umkehrung berechenbar.
Dadurch, dass die Cantorsche Paarungsfunktion und ihre Umkehrung berechenbar sind, folgt, dass es für die Theorie der Berechenbarkeit ausreichend ist, sich mit einstelligen Funktionen von zu befassen. Für Funktionen von folgt die Berechenbarkeit dann durch die Anwendung der Cantorschen Paarungsfunktion und ihrer Umkehrfunktion:
berechenbar, genau dann wenn es eine Funktion g gibt, mit , gilt und g ist berechenbar.
Man kann zum Beispiel zeigen, dass sich alle rationalen Zahlen durch ein 3-Tupel i,j,k darstellen lassen. Damit kann man die Berechenbarkeit leicht von den natürlichen Zahlen auf die Menge der rationalen Zahlen erweitern.
Es gibt viele andere Möglichkeiten Paare natürlicher Zahlen bijektiv durch eine natürliche Zahl zu kodieren, z.B. kann man ein wenig anders abzählen:
| 0 1 2 3 4 y --+
Auch die einfache Formel liefert eine Bijektion zwischen und :
| 0 1 2 3 4 y --+
Beweis der Umkehrbarkeit: Faktorisiere z. x ist die Anzahl der 2 als Primfaktor. Sei R das Produkt der anderen Primfaktoren. Dann ist y=(R-1)/2.
Die Primfaktorzerlegung gibt eine Möglichkeit an, beliebige Tupel natürlicher Zahlen durch natürliche Zahlen zu kodieren:
This article is licensed under the GNU Free Documentation License.
It uses material from the
"Cantorsche Paarungsfunktion".
Home Page • arts • business • computers • games • health • hospitals • home • kids & teens • news • physicians • recreation• reference • regional • science • shopping • society • sports • world