BuK/IIm20/Vorlesung 2 Seidl

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Python</language>
=== Prinzipiell Unlösbares S. 5 ===

Nicht formalisierbare "Fragestellungen", also etwas das sich nicht in eine Abfolge von Berechnungen fassen lässt:<br/>
- Wie ist die Stimmung einer Person (fehlen von Informationen um das herauszufinden)<br/><br/>

Praktisch Unmögliches (wg. Effizienz):<br/>
- Alle Primzahlen zu "berechnen" (da unendlich viele, Algorithmus würde nie terminieren)<br/>
- Wie wird das Wetter am heutigen Tag in 100 Jahren<br/>

<br/><br/>
In Arbeit...

<language>Python</language>
=== S. 7 ===
<code id="605f695e0a6c7">
def f(n):
    if n == 1:
        return 1
    
    if n % 2 == 0:
        return f(n / 2) + 1
    else:
        return 1 / (f(n - 1))
</code>
<run id="605f695e0a750">
print(f(3))
</run>

Mit memoizing:
<code id="605f70abeb6cf">
saved_function_values = {}

def f(n):
    if n == 1:
        return 1
    
    if n % 2 == 0:
        if n / 2 in saved_function_values:
            value = saved_function_values.get(n / 2)
            print("benutze gecachten wert!")
        else:
            value = f(n / 2)
        saved_function_values[n / 2] = value
        return value + 1
    else:
        if n - 1 in saved_function_values:
            value = saved_function_values.get(n - 1)
            print("benutze gecachten wert!")
        else:
            value = f(n - 1)
        saved_function_values[n - 1] = value
        return 1 / value
</code>

<run id="605f70abeb731">
max_n = 7
for n in range(1, max_n + 1):
    print(f(n))
</run>

=== Kreativaufgabe: Der Hilbertbus S. 17 ===
<run id="605f4f4ec9f2b">
def add_gast(person, bus):
    pb_list.append([person, bus])
    #book_gast("MH" + str(bus), [person, bus])
    gaeste = len(pb_list) - 1
    raum_gast_macrohard[gaeste] = [person, bus]

def kleingruppenbuchung(bus):
    for i in range(0, max(raum_gast) + len(bus) + 1, 1):
        if i > len(bus) - 1:
            break

        if i in raum_gast:
            try_kleingruppenbuchung_bis_freie_stelle_gefunden(i, raum_gast, bus, i)
        else:
            raum_gast[i] = bus[i]

def try_kleingruppenbuchung_bis_freie_stelle_gefunden(i, raum_gast, bus, bus_i):
    if i in raum_gast:
        i += 1
        try_kleingruppenbuchung_bis_freie_stelle_gefunden(i, raum_gast, bus, bus_i)
    else:
        raum_gast[i] = bus[bus_i]

def move_gaeste_n_2n(raum_gast):
    zwei_n_raum_gast = {}
    for zimmer in raum_gast:
        zwei_n_raum_gast[2*zimmer] = raum_gast.get(zimmer)
    
    return zwei_n_raum_gast

def diag(pb):
    # Person + 1
    pb[0] = pb[0] + 1
    add_gast(pb[0], pb[1])

    # Herunterzählen der Person bis 1
    for person_neu in range(pb[0] - 1, 0, -1):
        pb[1] = pb[1] + 1
        pb[0] = person_neu
        add_gast(pb[0], pb[1])
        
    pb[1] = pb[1] + 1
    add_gast(pb[0], pb[1])

    # Hochzählen
    for person_neu in range(pb[0] + 1, pb[1] + 1):
        pb[1] = pb[1] - 1
        pb[0] = person_neu
        add_gast(pb[0], pb[1])
    
    if len(pb_list) >= max_gaeste:
        return

    diag(pb)

def book_gast(zimmer_nr, attribut):
    if zimmer_nr in raum_gast:
        print("Zimmer bereits gebucht!")
        return
    
    raum_gast[zimmer_nr] = attribut
    print(str(attribut) + " in Zimmer " + str(zimmer_nr) + " gebucht!")

def baue_kleinbus(bus_nr, anzahl_personen):
    kleinbus = []
    for person in range(0, anzahl_personen + 1, 1):
        kleinbus.append([bus_nr, person])
    
    return kleinbus


raum_gast = {}

book_gast(3, "Herr Grundmann")
book_gast(2, "Frau Milkel")
book_gast(3, "Herr Wuischke")
book_gast(7, "Herr Wuischke")

kleinbus = baue_kleinbus(815, 8)
kleingruppenbuchung(kleinbus)

bus_3813 = baue_kleinbus(3813, 300) # Unendlich, hier begrenzt auf 300 Personen
kleingruppenbuchung(bus_3813)

raum_gast = move_gaeste_n_2n(raum_gast)

bus_33 = baue_kleinbus(33, 300) # Unendlich, hier begrenzt auf 300 Personen
kleingruppenbuchung(bus_33)

raum_gast = move_gaeste_n_2n(raum_gast)

# Macrohard
raum_gast_macrohard = {}
pb_list = []
max_gaeste = 300
# Erste Runde
# pb = [person, bus]
pb = [1, 1]
add_gast(pb[0], pb[1])

diag(pb)

kleingruppenbuchung(list(raum_gast_macrohard.values()))

print(raum_gast.get(234))
</run>