Oder du machst es ganz stupide. Es sind ja nicht so viele Eingabe-Werte. Du könntest natürlich auch ganz stumpf
alle möglichen validen Kombinationen berechnen, dann nach und nach die mit den größten Lücken entfernen und zum Schluss hast du dann 3-4 Ergebnisse (im Optimalfall natürlich nur 1, aber gehen wir mal nicht vom best-case aus) die gleich gut bzw. gleich schlecht sind.
Dann kannst du dem User diese anzeigen und er kann sich dann den Plan auswählen, der am Besten zu ihm passt, weil er (wie ich
) z.B. niemals um halb 7 Morgens aus dem Bett kommt und lieber erst Vorlesungen ab 10 haben will.
Die Methode von oben hat nämlich einen entscheidenden Nachteil: Man berechnet nur 1 Lösung und ich kann dir mit Sicherheit sagen, dass das Ergebnis auch völlig daneben sein kann oder das Programm gar kein Ergebnis findet.
Bsp:
Das Ergebnis ist _fast_ fertig berechnet. Es gibt fehlt noch 1x "Fach A" und 1x "Fach B". "Fach A" ist noch 2x in den Quelldaten: Mo 8-10 und Fr 14-16 Uhr. "Fach B": Mo 8-18 und Di 10-12 (schon belegt). Jetzt stößt das Programm auf "Fach A" und probiert als erstes "Montag 8-10", das passt lückenlos in den aktuellen Plan -> Einfügen. Danach sieht es "Fach B" und kann es nirgends mehr einfügen.
Solch ein Fehler kann an allen möglichen Stellen auftreten und einen korrekten Algorithmus für dieses Problem zu schreiben ist kein Kinderspiel. Deshalb sollte man gleich _alle_ validen Kombinationsmöglichkeiten berechnen und fertig. Da muss man sich keine großartigen Gedanken machen und hat am Ende auf jeden Fall das optimale Ergebnis.
EDIT: Wenn man bei Google nach dem Problem sucht findet man genau das!
"Our current implementation works great, and uses brute force"
http://stackoverflow.com/a/210700/1321564
Und die letzte Antwort da, ist natürlich perfekt: Prolog! (Eine Programmiersprache, die genau für solch eine Problemstellung geschaffen wurde)
http://stackoverflow.com/a/2920941/1321564
Oder hier: "This problem is
NP-Complete! In a nutshell one needs to explore all possible combinations"
http://stackoverflow.com/questions/2177836/algorithm-for-creating-a-school-timetable
(die NP-Vollständigkeit musst dir nicht ansehen, ganz ganz ganz einfach ausgedrückt heißt das: Der Algorithmus, um das Problem zu lösen, kann nicht effizient arbeiten, also sollte/muss brute force benutzt werden)
Fazit: Prolog oder Brute-Force! Wobei Prolog natürlich auch nur ein hübscheres Brute-Force ist, aber dann bräuchtest du auch kein Java Programm mehr und müsstest eine neue Sprache lernen