Ich bin gespannt, wie die beste Möglichkeit, eine zufällige Ganzzahl R, nicht in einer bereitgestellten Menge von ganzen Zahlen (R∉N) zu generieren. Ich kann mir verschiedene Möglichkeiten vorstellen, aber ich frage mich, was Sie alle denken.Optimal Algorithmus zum Generieren einer Zufallszahl R nicht in einer Reihe von Zahlen N
Antwort
N sei die Größe der Gesamtmenge, und sei K die Größe der ausgeschlossenen Menge.
Ich hängt von der Größe des Satzes ab, von dem Sie abtasten. Wenn die ausgeschlossene Menge viel kleiner als der Gesamtbereich ist, wählen Sie einfach eine Zufallszahl, und wenn sie in der ausgeschlossenen Menge ist, wählen Sie erneut. Wenn wir den ausgeschlossenen Satz in einer Hash-Tabelle behalten, kann jeder Versuch in O (1) -Zeit durchgeführt werden.
Wenn die ausgeschlossene Menge groß ist, wählen Sie eine Zufallszahl R in einer Menge (N - K) und geben Sie die Auswahl als Element der nicht ausgeschlossenen Elemente aus. Wenn wir nur die Löcher in einer Hash-Tabelle speichern, die mit dem Wert der Zufallszahl verknüpft sind, können wir dies in einer Stichprobe in Zeit O (1) erzeugen.
Der Cutoff-Punkt wird von der Größe von (N - K)/N abhängen, aber ich vermute, dass, wenn dies größer als 0,5 oder so ist, oder Sie sind sehr klein, nur Proben bis Sie einen Treffer bekommen in der Praxis schneller sein.
+1 - zeigten sowohl die selektiven als auch die restriktiven Fälle. – aperkins
wow sehr gute Lösungen – Alan
Gute Antwort im Prinzip, aber ich würde nicht sicher sein, dass 0.9 Schwelle --- Ich denke, es könnte in vielen Fällen deutlich niedriger sein und würde sich bei etwa 0,5 ziemlich unbehaglich fühlen. Ich denke, Sie können es nur in Ihrer Anwendung testen, aber im Zweifelsfall würde ich die deterministische Laufzeit bevorzugen. – Svante
Generieren Sie eine Zufallszahl R in der gesamten Domäne (subtrahieren Sie die Größe von N vom Maximalwert), die Sie verwenden möchten. Dann Schleife durch alle N kleiner als R und für jede addiere 1 bis R. Dies wird eine zufällige Zahl in der Domäne geben, die nicht in N.
Das ist keine zufällige Zufallsgenerierung, weil es auf Kantenzahlen gewichtet wird - Zahlen, die nahe den Elementen in N sind. – aperkins
Nein, weil es 1 zu R addiert, ob ein Konflikt vorliegt oder nicht. – murgatroid99
Ja, weshalb es an den Rändern enden wird - Ihr R wird eher derjenige sein, der über einem in der Menge von N liegt als dies nicht der Fall ist - doppelt so wahrscheinlich. Eine Zahl direkt über der anderen zu treffen, würde 2/P werden, wobei P die gesamte verfügbare Menge an Zahlen ist und alle anderen Zahlen 1/P wären. Wenn Sie Zahlen in einer Reihe - sagen wir 2,3,4 - in der Menge hatten, dann steigt für jede Zahl in einer Reihe die Wahrscheinlichkeit, die darüber liegende zu treffen (4 in diesem Beispiel) um 1/P pro Zahl in eine Reihe nach der ersten (4/P in meinem Beispiel). – aperkins
Angesichts Ihrer begrenzten Beschreibung? Finde den maximalen Wert der Elemente in N. Erzeuge nur Zufallszahlen, die größer sind.
- 1. Excel Zufallszahl aus einer Reihe von Optionen
- 2. Generieren einer Zufallszahl mit einer ungleichmäßigen Verteilung
- 3. Optimal Algorithmus
- 4. Algorithmus zum Generieren einer Klammermodellliste in Python
- 5. Algorithmus zum Generieren von Zufallszahlen aus einer diskreten Verteilung?
- 6. Generieren einer Zufallszahl ohne Bereich
- 7. Generieren einer Zufallszahl unter super.ViewDidLoad
- 8. C#: Numerischer Algorithmus zum Generieren von Zahlen aus der Binomialverteilung
- 9. Generieren einer Reihe von Daten
- 10. Skalierung einer Reihe von Zahlen in PHP?
- 11. Rechnen Langlebigkeit zahlen - Zahlen in einer Reihe von Bereichen nachschlagen
- 12. Überprüfen einer Reihe von Zahlen auf Konsistenz
- 13. Schwierigkeiten beim Platzieren einer Reihe von Zahlen in einer Funktion
- 14. Backtracking-Algorithmus zum Generieren aller Kombinationen
- 15. php Wichtigkeit einer Zahl in einer Reihe von Zahlen
- 16. Algorithmus zum Generieren einer zufälligen Zeichenfolge mit strengen Einschränkungen - Java
- 17. Generieren von Fixtures aus einer Liste von n
- 18. Wie LINQ verwenden, um alle Kombinationen von n Elementen aus einer Reihe von Zahlen zu finden?
- 19. eine Funktion Generieren einer Matrix in R
- 20. generieren eine Reihe von zufälligen eindeutigen Zahlen aus einem Intervall
- 21. Bester Algorithmus zur Bestimmung von hoch und niedrig in einer Reihe von Zahlen?
- 22. Generierung einer Zufallszahl von 0 bis 9 basierend auf einer Reihe von Münzwürfen
- 23. Suchen von kontinuierlichen Bereichen in einer Reihe von Zahlen
- 24. Zahlen hinzufügen in einer Reihe zusammen
- 25. Algorithmus zum Generieren von Random-Netzwerk
- 26. Algorithmus zum Generieren von Partitionen der Nummer
- 27. Zufallszahl generieren
- 28. Reihe Binden einer Reihe von Datensätzen?
- 29. Algorithmus zum Generieren einer 'Top-Liste' mit Worthäufigkeit
- 30. Generieren Sie zwei Zahlen aus einer angegebenen Liste von Zahlen
Es hängt davon ab, wie diskret Ihre Sets sind. Was ist mehr wie das, was Sie wollen ?: (1) Generieren Sie eine zufällige Ganzzahl zwischen 1 und 50, aber nicht 4,5 oder 6 oder (2) Generieren Sie ein zufälliges Doppelt zwischen 0,0 und 1,0, aber nicht zwischen 0,1 und 0,2 – Justin
I Tut mir leid, das habe ich nicht geklärt. R ist eine ganze Zahl und jede Zahl in N ist eine ganze Zahl. – Alan