BuK/IIm14/Studenten/s3rozoek/Uebung3
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Javascript</language>
Vereinigung mit Streams
= Übung 3 =
== Entscheidbarkeit einfacher Mengen ==
Zu zeigen ist die Entscheidbarkeit der beiden Mengen $M1$ und $M2$. Dazu reicht es eine entsprechende Charaktersitische Funktion $\chi_{M_x}(w)$ zu finden.
=== Bsp1 ===
$A^*={a,b}^*$ und $M_1 \subset A^* = \{w | w \in A^* \text{ und } |w| = 3\}$
$M_1$ ist die Menge aller Wörter aus $A^*$, die die Länge 3 beseitzen, d.h. $M_1 = \{aaa, aba, aab, baa, bab, abb, bba, bbb\}$
Da die Menge endlich ist, können einfach alle Elemente überprüft werden. Somit ergibt sich $\chi_{M_1}(w)$.
$$
\chi_{M_1}(w) = \begin{cases}
wahr, & \text{wenn } w==aaa || w==aba || w==aab || w==baa || w==bab || w==abb || w==bba || w==bbb;\\
falsch, & \text{sonst}
\end{cases}
$$
<code id="552e54cde090f">
function chiM1(wort){
if(wort=="aaa"||wort=="aba"||wort=="aab"||wort=="baa"||wort=="bab"||wort=="abb"||wort=="bbb"){return true;}
else{return false;}
}
</code>
<run id="552e54cde0985">
chiM1("aaa")
</run>
=== Bsp 2 ===
Abzählbar unendliche Menge.
$M_2$ ist die Menge aller Wörter, die aus beliebig vielen a's und b's bestehen und mit a beginnen. $A^* = {a, b}^*$ und $M1 \subset A^* = {w = aw' | w' \in A^*}$
Da es reicht das erste Element zu überprüfen, ist die Menge entscheidbar. Dazu sei $w \in M_1 = w_1 \circ w_2 \circ ... \circ w_n | w_1,...w_n \in A$
$$
\chi_{M_2}(w) = \begin{cases}
wahr, & \text{wenn } w_1 == a;\\
falsch, & \text{sonst}
\end{cases}
$$
<code id="552e554c46082">
function chiM2(wort){
if(wort.charAt(0)=="a"){return true;}
else{return false;}
}
</code>
<run id="552e554c460f9">
chiM2("abbbbabababababba")
</run>
== Anzahl berechenbarer charakteristischer Funktionen ==
Da die Potenzmenge von $A^*$ überabzählbar unendlich ist, gibt es überabzählbar unendlich viele charakteristische Funktionen (eine für jede Teilmenge). Davon sind nicht alle berechenbar (ein Gegenbeispiel reicht).
== Aufzählbarkeit ==
Eine Menge $M \subseteq A^*$ heißt aufzählbar, wenn es entweder eine total berechenbare surjektive Funktion $f : \N \rightarrow M$ gibt, oder es gilt $M=\emptyset$
Man nennt f eine Aufzählprozedur oder ein Aufzählverfahren von M.
Sehr vereinfacht : aufzählbar = abzählbar + berechenbar
Somit muss für den Beweis der Aufzählbarkeit eine entsprechende Funktion $f$ gefunden werden.
=== Menge der geraden Zahlen G ===
z.z. Die Menge $G = \{g | g=2n , n \in \N\}$ ist aufzählbar.
Das Aufzählverfahren ergibt sich bereits aus der Definition von $G$.
$f(n) = 2n$
=== Menge der Primzahlen ===
$ f(n) = \begin{cases}
n, & \text{wenn x eine Primzahl ist} ;\\
2, & \text{sonst}
\end{cases} $
=== $A^*$ ===
Aufbauschema:
[[Bild:Rzoeke_ASternAufbauschema.png]]
Aufbauprozedur:
<code id="552e6ccc7c06e">
function aStern(n,alphabet){
if(n==0){
return "";
}
var array = [];
while(array.length<n){
array=createNextSet(array,alphabet);
}
return array[n-1];
}
function createNextSet(array,alphabet){
var result = [];
if(array.length==0){
result = ["a","b","c"];
return result;
}
for(i=0;i<array.length;i++){
for(j=0;j<alphabet.length;j++){
result.push(array[i].concat(alphabet[j]));
}
}
return array.concat(result);
}
</code>
<run id="552e6ccc7c1a3">
aStern(12,["a","b","c"])
</run>
=== jede endliche Menge ===
Per Definition ist jede endliche Menge abzählbar. Weiterhin gibt es für jede endliche Menge M eine surjektive total berechenbare Funktion f, mit f : N -> M.
=== Menge G der Gitterpunkte ===
????
(0,0),(0,1),...
Geben Sie eine Funktion f an, die N bijektiv auf G abbildet.
2 Definieren Sie eine Ordnungsrelation p < in G .
3 Geben Sie eine Funktion k zur Berechnung der Platznummer
k(x, y ) des betrachteten Gitterpunktes (x, y ) an.
4 Geben Sie eine Aufz ̈ahlprozedur f ̈
ur G an und begr ̈
unden Sie
deren Berechenbarkeit.
== Semi Entscheidbarkeit ==
=== Halteproblem ===
Sei $A$ die Menge aller Algorithmen, dann gibt es eine Funktion $\chi'_A$ die wahr zurückgibt, wenn ein Algorithmus terminiert.
$$
\chi'_{A}(a) = \begin{cases}
wahr, & \text{wenn a terminiert};\\
\bot, & \text{sonst}
\end{cases}
$$
=== FIBS ===
Aufzählfunktion $\fib(n) = \begin{cases}
1, & \text{wenn n==1 oder n==0};\\
fib(n-1)*fib(n-2), & \text{sonst}
\end{cases}
$
FIBS Entscheidbar?
$$
\chi'_{FIBS}(f) = \begin{cases}
wahr, & \text{wenn f in FIBS};\\
falsch, & \text{sonst}
\end{cases}
$$
Die Menge ist entscheidbar, da die Charakteristische Funktion berechenbar ist.
<code id="552e62e47c4bd">
function fib(n){
if(n==0||n==1){return 1;}
else{return fib(n-1)+fib(n-2);}
}
function chiFIBS(zahl){
var count = 0;
var running = true;
while(running){
if(fib(count)==zahl){return true;}
if(fib(count)>zahl){return false;} //Abbruchbedingung. zahl kann in diesem Fall nicht mehr gefunden werden.
count = count +1;
}
}
</code>
<run id="552e62e47c55b">
//ACHTUNG rekursive quick&dirty Implementierung von fib. Keine großen Zahlen nehmen!
chiFIBS(10)
</run>
Aus der Entscheidbarkeit folgt die semi Entscheidbarkeit.
=== Quadratzahlen ===
Aufzählfunktion
$f(n)=n^2$
$
\chi_{QZ}(n) = \begin{cases}
wahr, & \text{wenn } sqrt(n) \in \N;\\
falsch, & \text{sonst}
\end{cases}
$
=== Wörter, die mit a beginnen ===
Aus Entscheidbarkeit folgt die Semi Entscheidbarkeit.
== Vereinigung ==
Definieren Sie die Menge der geraden Zahlen (Zahlwörter) und die der ungeraden Zahlen (Zahlwörter) und veranlassen Sie das ProgrammingWiki 30 Elemente der Vereinigungsmenge auszugeben.
<code id="552e6ccc7c0e0">
function even(n){
return 2*n;
}
function unEven(n){
return 3*n;
}
function printSet(numberOfItems,buildFunction){
var result = [];
for (i = 0; i < numberOfItems; i++){
result.push(buildFunction(i));
}
return result;
}
</code>
<run id="552e6ccc7c237">
printSet(15,even);
printSet(15,unEven);
</run>