Berechenbarkeitstheorie/Entscheidbarkeit und Aufzählbarkeit/Gitterpunkte
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Javascript</language>
== Aufzählbarkeit der Menge der Gitterpunkte ==
Die Menge $G$ der Gitterpunkte (0,0),(0,1), ... einer x-y-Ebene ist ''aufzählbar''.
1. Geben Sie eine Funktion $f$ an, die $\NN$ bijektiv auf $G$ abbildet.
'''Cantorsche Paarungsfunktion''', s. auch [https://de.wikipedia.org/wiki/Cantorsche_Paarungsfunktion Wikipedia]
<code id="576a564d03150">
var f = function (z) {
var w = Math.floor((Math.sqrt(8*z+1)-1)/2);
var t = w*(w+1)/2;
var y = z-t;
var x = w-y;
return [x,y];
};
</code>
Da $f$ eine bijektive und total berechenbare Funktion ist, kann man die Menge $G$ aufzählen:
<run id="576a564d031ba">
for (z=0; z<10; z++) {
console.log("(" + f(z) + ")");
};
</run>
2. Geben Sie eine Funktion $k$ zur Berechnung der Platznummer $k(x,y)$ des betrachteten Gitterpunktes $(x,y)$ an.
<code id="576a590266188">
var k = function (x, y) {
return (x+y)*(x+y+1)/2+y;
};
</code>
<run id="576a5902662d1">
console.log("Platznummer von (1,2): " + k(1,2));
console.log("Platznummer von (2,0): " + k(2,0));
</run>
3. Definieren Sie eine Ordnungsrelation $p_<$ in $G$.
Die folgende Prozedur gibt eine ganze Zahl zurück, die man gemäß Vorzeichen als <nowiki>true</nowiki> bzw. <nowiki>false</nowiki> deutet.
<code id="576a5902661f8">
var p_kleiner = function (a,b) {
return k(b[0],b[1])-k(a[0],a[1]);
};
</code>
<run id="576a590266333">
console.log(p_kleiner([1,2],[2,0]));
</run>
Für das folgende Beispiel einer endlichen Gitterpunktmenge
<code id="576a59026625e">
var gps = [[ 0, 0 ],[ 2, 0 ],[ 3, 0 ],[ 1, 0 ],[ 0, 3 ],[2, 1],[ 0, 2 ],[ 1, 1 ],[ 1, 2 ],[ 0, 1 ]];
</code>
kann eine aufsteigende Sortierung mit $p_<$ vorgenommen werden:
<run id="576a590266391">
gps.sort(p_kleiner);
gps.reverse();
for (i=0; i<gps.length; i++ ) {
console.log("(" + gps[i] +")");
};
</run>
4. Geben Sie eine Aufzählprozedur für $G$ an und begründen Sie deren Berechenbarkeit.
$f$ erfüllt die geforderten Eigenschaften und kann als Prozedur (s.o.) implementiert werden.