Taxi - Problem

Initialisierungen:

> restart;

Minimale Anzahl an Taxis :

> minTaxis := 50;

minTaxis := 50

Maximale Anzahl an Taxis:

> maxTaxis := 100;

maxTaxis := 100

Anzahl an Stichproben:

> n := 14;

n := 14

Anzahl der Taxis zufällig bestimmen:

> Taxis := rand(minTaxis..maxTaxis)();

Taxis := 56

>

Eine Liste mit allen Taxinummern aufstellen

> taxiliste := {seq(i, i=1..Taxis)};

taxiliste := {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12...
taxiliste := {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12...

Ein Array für alle Taxis, die gesehen wurden:

> gesehen := array(1..n);

gesehen := array(1 .. 14,[])

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));

gesehen := [2, 11, 14, 16, 17, 19, 24, 26, 30, 35, ...

>

>

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;

50

>

Methode 2 : Minimum + Maximum - 1

> gesehen[1] + gesehen[n] -1;

48

>

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)];

intervall := [9, 3, 2, 1, 2, 5, 2, 4, 5, 4, 5, 2, 1...

2. Intervall 1 bis Minimum hinzufügen

> intervall := [op(intervall), gesehen[1]-1];

intervall := [9, 3, 2, 1, 2, 5, 2, 4, 5, 4, 5, 2, 1...

3. Liste sortieren

> intervall := sort(intervall);

intervall := [1, 1, 1, 2, 2, 2, 2, 3, 4, 4, 5, 5, 5...

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;

52

>