Was imo aus dem Artikel nicht ganz klar wird: deine Lösung benachteiligt ja nicht die Schüler, die sich oft gemeldet haben, sondern die, die sich vor kurzem gemeldet haben.
Ich denke einmal, dass es so auch gedacht war; um jedenfalls Ersteres zu erreichen, müsste jedem Schüler nur eine Auswahl-Wahrscheinlichkeit
p zugeordnet werden, die bei
n Schülern anfangs
1 / n beträgt. Wenn er dann nach einer Meldung z.B. nur noch halb so oft aufgerufen werden soll, muss natürlich erst einmal seine eigene Wahrscheinlichkeit
p1 um 50% gesenkt und zusätzlich die Wahrscheinlichkeiten aller anderen Schüler um
.5 * p1 / (n - 1) erhöht werden. Die Auswahlfunktion könnte dann so aussehen:
Delphi-Quellcode:
// Rückgabewert: Index des gewählten Eintrags
// Summe der Wahrscheinlichkeiten sollte 1 betragen
function RandomItem(aProbabilities:
array of Real): Integer;
var
r: Real;
begin
r := Random;
Result := 0;
while Result < Length(aProbabilities)
do
begin
r := r - aProbabilities[Result];
if r < 0
then
begin
Dec(Result);
Exit;
end;
Inc(Result);
end;
Dec(Result);
// im Zweifelsfall der letzte Eintrag
end;
[add]
Zitat von
Nikolas:
In der Aufgabenstellung wird aber verlangt, dass nur derjenige, der als letzter geantwortet hat, eine kleinere Wahrscheinlichkeit hat als alle anderen. Das ist somit nicht gegeben.
Könnte man so verstehen, aber die Aufgabenstellung ist unklar:
Zitat:
dass ein Schüler, der gerade dran gewesen ist, mit einer geringeren Wahrscheinlichkeit noch mal von dem programm ausgewählt wird, als ein Schüler, der noch keine Frage beantworten musste.
Es wird nichts über die Schüler ausgesagt, die schon einmal früher dran waren. Deshalb würde ich die Aufgabenstellung auch nicht zu wörtlich nehmen, es bleibt also ein ziemlicher Spielraum für Deutungen.
[/add]