Dies war die Frage eines Interviewers. Ich konnte nicht antworten.
Die Frage war, dass Sie eine Zufallszahl aus dem angegebenen Array auswählen möchten.
Bedingung ist, dass Sie nichts in sequentiellen und wählen sollten die eingebaute Zufallsfunktion nicht zu verwenden.
Ich habe keine Ahnung. Wie zu wissen, wie ist das Math.Random für uns?
Ich habe gegoogelt und die Implementierung / Logik dahinter nicht gefunden.
Jeder weiß es?
Bis jetzt haben drei Leute dir gesagt, du sollst die letzte Ziffer von Ticks benutzen. Das funktioniert nicht. Versuchen Sie es in einer engen Schleife und Sie werden schnell sehen, warum es eine schlechte Idee ist.
Die Frage ist nicht sehr gut gestellt. Ich mag es, in Interviews mehrdeutig gestellte Fragen zu stellen, weil man herausfinden muss, wie der Kandidat mit einer mehrdeutigen Situation umgeht. In diesem Fall würde ich sofort zurückschieben und herausfinden, was der Interviewer mit "zufällig" meint. Ist Pseudozufälligkeit gut genug? Gibt es eine Quelle für qualitativ hochwertige Entropie?
Sobald Sie eine geklärte Frage haben, sollte es einfacher sein zu antworten.
Das Problem liegt in der Verwaltung der Entropie. Wenn Sie eine sehr schwache Quelle der Entropie haben - wie der Wert von Ticks (nicht die letzte Ziffer, die wertlos ist, sondern den gesamten Wert), dann können Sie damit einen Pseudozufallszahlengenerator erzeugen. Wenn Sie eine hochqualitative Entropiequelle haben, können Sie damit einfach Zufallsbits erzeugen.
Hier ist eine Implementierung von Zufallszahlen in C. Sie könnten versuchen, sie in C # umzuschreiben.
Zufallszahlen für C: Endlich, endlich? Ссылка
Es scheint von sehr hoher Qualität zu sein.
Aber diesen Code in einem Interview zu schreiben ist nicht einfach, aber man könnte ihm definitiv die Ideen sagen.
Nur eine Idee: Sie könnten eine der letzten Ziffern in DateTime.Now.Ticks
verwenden, um eine Basis für die Auswahl des Index zu erhalten. Oder vielleicht eine Hash-Funktion für dieselbe Sache. Oder verwenden Sie einen Webservice, der Ihnen Zufallszahlen aus der Strahlung geben kann. Math.Random
wählt nur aus vordefinierten Tabellen (ja, es ist nicht wirklich zufällig).
Ich glaube, sie haben nur gesehen, ob Sie von LCG-Algorithmen (Linear Congruential Generator) wussten.
Die Mathematik hinter ihnen ist jedoch etwas schwierig, also bezweifle ich, dass sie erwarten können, dass du in der Lage bist, einen von deinem Kopf zu schreiben.
Aber scheitern Sie das, könnten Sie nicht einfach so schummeln, um einen zufälligen Index zu erzeugen?
int index = Guid.NewGuid().GetHashCode() % array.Length;
Erstens ist es bekannt als Pseudo-Random und nicht nur als Random, da Random-Reihen unmöglich in einer Computer-Form erzeugt werden können,
Die meisten Pseudo-Zufallszahlen-Generatoren PRNG haben folgende Form:
zur Zeit 0: R (0) = Random (Seed)
zur Zeit i: R (i) = Zufall (R (i-1));
Zweitens bedeutet Random nicht, dass Sie nicht wissen, was das i-te Ergebnis sein wird, aber dass die Serie robust ist & amp; Es ist sehr schwierig, die Formel oder die vorgegebene Kette von Ergebnissen zu erraten
Hoffe, das hilft