Gruppenbildung-Software



  • Hallo,
    ich habe eine Algorithmus-Frage.
    Folgendes Szenario:
    Eine Anzahl von Personen, 22 Themen. Jede Person wählt mindestens 5 Themen aus, mindestens zwei davon müssen mit der Priorität "1" angegeben werden, die anderen können mit der Priorität "2" oder "0" angegeben werden.

    Also könnte die SQL-Tabelle etwas so aussehen:
    |ID|Name|#1|#2|#3|#4|#5|...|#22| //Kopf
    |1 |Hans | |1 |2 |1 |0 | |2 | //Prioritäten,

    | | = Thema nicht gewählt
    |1| = erste Priorität
    |2| = zweite Priorität
    |0| = gewählt ohne Priorität

    Nun geht es darum, die Personen möglichst so auf die Themen augzuteilen, dass:
    -in allen Themen 16-22 Personen sind
    -möglichst viele 1-en berücksichtigt werden
    -möglichst keine Themen Personen zugeordnet werden, die dieses Thema überhaupt nicht oder nur mit 0 gewählt haben.

    Ich habe mir folgenes Überlegt:
    Zuerst wird von allen Themen die 1-en Anzahl gezählt, dann habe ich wie eine "Beliebtheitsfolge". Sollte es ein Fach mit gar keinen 1-en geben, werden in diesem Fach die 2-en gezählt und gerade fest zugeordnet. Die dann zugeordneten Personen werden in der Tabelle als "fest" gesetzt und alle Daten neu in das Skript geholt, es beginnt wieder von vorne...

    Und wies weiter gehen soll weiss ich eben nicht 🙂 Wie würdet ihr das machen? Ich wäre sehr froh um Denkanstösse und möglichst auf dieses Szenario bezogene Algorithmen! (Sprache egal, ich werde es in SQL/php realisieren)

    Liebe Grüsse und vielen Dank,
    michi



  • das ist schwierig, vor allem weil es keine gerechte lösung gibt. höchstwahrscheinlich können einige leute ihr lieblingsthema nicht bekommen, wie du schon erkannt hast. wie wärs wenn du einfach eine liste der studenten anlegst, diese dann zufällig durchpermurtierst und den leuten dann von oben nach unten ihr maximal bewertetes noch freies thema zuordest.


Anmelden zum Antworten