Einzelnen Beitrag anzeigen

gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#15

AW: Nur random Zahlen ausgeben die durch 4 teilbar sind

  Alt 9. Okt 2017, 11:32
Das Laufzeit-Verhalten dieser Funktion ist vom Zufall abhängig. Die Terminiertheit kann für diese Funktion nicht bewiesen werden. Damit birgt sie die theoretische Gefahr eines Programm-Absturzes. In der Praxis wird sie meist in Sekundenbruchteilen ein korrektes Ergebnis liefern. In größeren Systemen sollten derartige Algorithmen vermieden werden. Stattdessen kann die Funktion auch mit konstantem Laufzeitverhalten (O(1)) implementiert werden:

Delphi-Quellcode:
funtion MyRand(Range: Integer): Integer;
var
  DividedRange: Integer;
begin
  DividedRange := Range div 4;
  Result := Random(DividedRange) * 4;
end;
Das mit dem Terminieren ist richtig, aber erstens war es nur ein Vorschlag, zweitens sollte man einen Basis-Generator, der keine durch 4 teilbaren Zahlen liefert, in die Tonne treten, drittens funktioniert mein Vorschalg in der Praxis, während Deiner total daneben sein kann. Beispiel: Für Range=22 wird bei Dir nie der Wert 20 geliefert.
  Mit Zitat antworten Zitat