BuK/IIm20/Vorlesung 3 Thomas
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Python</language>
Seite 9
'''Beispiel 1: endliche Menge'''
$A^∗ = \{a, b\}^∗$ und $M \subset A^∗ = \{w | w \in A^∗$ und $|w| = 3\}$.
$M$ ist die Menge aller Wörter aus $A^*$, die die Länge 3 besitzen, d.h.
$M = \{aaa, aba, aab, baa, bab, abb, bba, bbb\}$.
<code id="606703bee3717">def chi(m):
if len(m) == 3:
return m in ['aaa', 'aba', 'aab', 'baa', 'bab', 'abb', 'bba', 'bbb']
return False</code>
<run id="606703bee3801">
print(chi("aaa"))
print(chi("aa"))
print(chi("bab"))
print(chi("bcb"))</run>
'''Beispiel 2: abzählbar unendliche Menge'''
<code id="606703bee3789">
def chi(m):
if len(m) > 0:
return m[0] == "a"
return False</code>
<run id="606703bee3871">
print(chi("abaaba"))
print(chi("babbaa"))</run>
----
Seite 15
Ü1: Zeigen Sie, dass die Menge der geraden Zahlen G eine aufzählbare Menge ist.
Ü2: Zeigen Sie, dass die Menge der Primzahlen P aufzählbar ist.
<code id="607001132c229">
def is_prime_number(x):
if x >= 2:
for y in range(2,x):
if not ( x % y ):
return False
else:
return False
return True</code>
<run id="607001132c2ae">for i in range(2,60):
if is_prime_number(i) == True:
print(i)</run>
Ü3: Wir wissen, dass $A^∗$ eine abzählbar unendliche Menge ist. Zeigen Sie, dass $A^∗$ auch aufzählbar ist. Hinweis: Hierzu ist es notwendig ein Aufbauschema für $A^∗$ zu entwerfen und anschließend eine Prozedur dafür zu implementieren.
----
Seite 16
Zeigen Sie, dass jede endliche Menge aufzählbar ist.
*$M = \{x_0, ..., x_n\}$ ist Wertebereich von $f$ mit $f(n) =
\begin{cases}
x_i & falls~i\geq n \\
x_0 & \, \text{sonst}
\end{cases}$
*$f$ ist primitiv rekursiv, also berechenbar
Die Menge $G$ der Gitterpunkte $(0, 0),(0, 1), ...$ einer x-y-Ebene ist aufzählbar.
<code id="60734e5d4581e">
def gitter(x):
list = []
startx = 0
while len(list) <= x:
list.append("(" + str(startx) + ", " + str(startx) + ")")
if len(list) == x: break
list.append("(" + str(startx) + ", " + str(startx+1) + ")")
if len(list) == x: break
list.append("(" + str(startx+1) + ", " + str(startx) + ")")
startx+=1
print(list)
</code>
<run id="60734e5d45ae2">
gitter(7)
gitter(20)
</run>
<code id="60734e5d458c3">
def find_gitter(y, x):
list = []
startx = 0
while True:
list.append("(" + str(startx) + ", " + str(startx) + ")")
if startx == y and startx == x: break
list.append("(" + str(startx) + ", " + str(startx+1) + ")")
if startx == y and (startx+1) == x: break
list.append("(" + str(startx+1) + ", " + str(startx) + ")")
if (startx+1) == y and startx == x: break
startx+=1
print(len(list))
</code>
<run id="60734e5d45b5a">
find_gitter(1, 2)
find_gitter(2, 1)
find_gitter(7, 8)
find_gitter(10, 10)
</run>
----
Seite 20
Ü1: Das Halteproblem ist semi-entscheidbar. Beweisen Sie diese Aussage.
Ü2: Geben Sie für die Menge $FIBS$ der Fibonacci-Zahlwörter eine Aufzählfunktion an und begründen Sie deren Berechenbarkeit. Weisen Sie nach, dass $FIBS$ eine semi-entscheidbare Menge ist. Zeigen Sie, dass FIBS sogar entscheidbar ist.
<code id="60734e5d45945">def FIBS(n):
if n == 0:
return 1
if n == 1:
return 1
if n == 2:
return 2
return FIBS(n-1) + FIBS(n-2)</code>
<run id="60734e5d45bca">for i in range(5):
print(FIBS(i))</run>
Ü3: Übertragen Sie die vorhergehende Übungsaufgabe sinngemäß auf die Menge der Quadratzahlen $QZ = \{n^2| n \in N\}$.
<code id="60734e5d459c0">
def q(x):
return x*x
</code>
<run id="60734e5d45c46">print(q(10))
print(q(105))
print(q(1078))</run>
Ü4: Weisen Sie nach, dass die Menge $M$ aller Wörter aus ${a, b}^∗$, die mit $a$ beginnen, semi-entscheidbar ist
----
Seite 23
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="60734e5d45a3f">def even(n):
return 2 * n
def odd(n):
return 2 * n + 1
def unite(i, f, g):
if i % 2 == 0:
return f(i / 2)
else:
return g((i-1) / 2)</code>
<run id="60734e5d45cb8">for i in range(30):
print(unite(i, even, odd))</run>