Taxi - Problem
Initialisierungen:
> restart;
Minimale Anzahl an Taxis :
> minTaxis := 50;
Maximale Anzahl an Taxis:
> maxTaxis := 100;
Anzahl an Stichproben:
> n := 14;
Anzahl der Taxis zufällig bestimmen:
> Taxis := rand(minTaxis..maxTaxis)();
>
Eine Liste mit allen Taxinummern aufstellen
> taxiliste := {seq(i, i=1..Taxis)};
Ein Array für alle Taxis, die gesehen wurden:
> gesehen := array(1..n);
Bestimmung der Zufälligen Taxis:
Damit wir nicht zufällig doppelte Taxis bestimmen, müssen wir folgendes Verfahren anwenden:
Für alle Stichproben:
1. Zufällig ein Taxi aus der taxiliste bestimmen.
2. In das gesehen-Array eintragen
3. Taxi aus der Taxiliste entfernen
>
for i from 1 to n do:
gesehen[i] := taxiliste[rand(1..Taxis-i)()];
taxiliste := taxiliste minus {gesehen[i]};
od:
>
Taxi-Array in Liste umwandeln und sortieren:
> gesehen := sort(convert(gesehen, list));
>
>
Methode 1 (Median * 2 oder Median1 + Median2)
Falls n gerade, die beiden Mittleren nehmen, ansonsten die Mitte*2
>
if (n mod 2 = 0)
then gesehen[n/2] + gesehen[n/2+1]
else gesehen[(n-1)/2+1]*2
end if;
>
Methode 2 : Minimum + Maximum - 1
> gesehen[1] + gesehen[n] -1;
>
Methode 3 : Maximum + mittlerer Wert der Abstände benachbarter Daten
1. Intervall-Liste aufstellen
> intervall := [seq(gesehen[i+1]-gesehen[i], i=1..n-1)];
2. Intervall 1 bis Minimum hinzufügen
> intervall := [op(intervall), gesehen[1]-1];
3. Liste sortieren
> intervall := sort(intervall);
4. Falls n ungerade, Maximum + 2*Median ansonsten Maximum + Mitte1 + Mitte2 (siehe Methode 1)
>
if (n mod 2 = 0)
then gesehen[n] + intervall[n/2] + intervall[n/2+1]
else gesehen[n] + intervall[(n-1)/2+1]*2
end if;
>