Ein bekanntes, schweres Problem in der Informatik ist ”set cover“. Wir wollen dieses Problem hier mit rekursivem ”Exhaustive Search“ lösen (soweit man weiß, geht es im allgemeinen Fall auch nicht wesentlich besser, wenn man eine exakte Lösung sucht: Siehe hierzu https://en.wikipedia.org/wiki/Set_cover_problem). Nehmen wir ein konkretes Anwendungsszenario an: An der JGU gibt es Lehrkräfte, von denen jede Lehrkraft mehrere Fächer abdecken kann: Die Aufgabe ist nun, eine minimale Teilmenge der Lehrkräfte zu finden, die zusammen alle Fächer unterrichten können. Hierbei ist das Vorgehen ähnlich zum ”n-Damen-Problem“, das in der Vorlesung vorgestellt wurde.

  Fach 1 Fach 2 Fach 3 Fach 4 Fach 5 Fach 6
Lehrkraft 1       X       X         X       X  
Lehrkraft 2         X         X         X
Lehrkraft 3       X         X           X
Lehrkraft 4         X         X       X  
Lehrkraft 5       X         X      
Lehrkraft 6           X       X       X  

Schreiben Sie ein Unterprogramm ex_search(a), welchem die (rechteckige, nicht zwangsläufig quadratische) Tabelle in Form einer verschachtelten Liste a übergeben wird, welches eine Lösung in Form einer Liste zurück gibt (zum Beispiel [1,2,5] für Lehrkraft 1,2 und 5) und damit dieses Optimierungsproblem rekursiv löst. Hierbei können wie in der Vorlesung angedeutet neben der Rekursion noch Schleifen benutzt werden, aber der rekursive Aufruf ist ein wesentlicher Aspekt des Programms. Geben Sie die Lösung zu der obigen Tabelle auf der Konsole aus, indem Sie Ihrem Unterprogramm die entsprechende Liste übergeben:

a = [[True,  True,  False, True,  True,  False],
       [False, True,  False, True,  False, True],
       [True,  False, True,  False, False, True],
       [False, True,  False, True,  True,  False],
       [True,  True,  True,  False, False, False],
       [False, False, True,  True,  True,  True]]

Scaffold Head
Scaffold Foot
Start time:
Fr 08 Dez 2017 15:15:07
End time:
Do 14 Dez 2017 14:00:13
General test timeout:
10.0 seconds

Tests

Comment prefix #
Given input
Expected output
2