Ich bin ein bisschen ratlos, wie ich einen sauberen Algorithmus finde, der folgendes bewirkt:
Angenommen, ich habe ein Diktat k:
%Vor%Ich möchte nun einen dieser Schlüssel zufällig auswählen, basierend auf dem "Gewicht", das sie in der Summe (d. h. Summe) der Schlüssel haben.
%Vor%Damit gibt es ein
%Vor%24,81% Prozent ändern, dass A ausgewählt ist.
Wie würden Sie einen Algorithmus schreiben, der sich darum kümmert? Mit anderen Worten, das stellt sicher, dass bei 10.000 zufälligen Picks A 2.481 mal ausgewählt wird?
Der Algorithmus wäre das ..
Wählen Sie eine Zahl zufällig zwischen 1 und 274. Rufen Sie dazu eine rand () -Funktion auf (vorausgesetzt, sie gibt einen Wert zwischen 0 und 1 zurück), multiplizieren Sie rand () mit 274. Der resultierende Wert sollte nun in einem Bereich liegen . Wenn es zwischen 1 und 68 ist, wählen Sie A, wenn es zwischen 69 und 130 ist, wählen Sie B und so weiter. Auf diese Weise bleibt Ihre Wahrscheinlichkeit am Leben und Ihre Operation gelingt.
PS: Ich bin ein Java-Typ, kenne die Syntax von Python nicht.
Der einfachste Weg, dies zu tun, wenn Ihre Gewichte relativ kleine ganze Zahlen sind (wie in Ihrem Beispiel), besteht darin, eine lange Zeichenfolge mit allen Zeichen in den entsprechenden Gewichtungen zu erstellen und daraus zufällig ein Zeichen auszuwählen:
%Vor%Beachten Sie jedoch, dass diese Methode ziemlich viel Speicher verwendet, wenn Ihre Gewichte groß sind. In diesem Fall bevorzugen Sie möglicherweise eine andere Lösung.
sollte man sich auch ansehen dieser Link
Machen Sie zwei Listen für k, sagen wir xk
und yk
Ich habe vor ein paar Jahren einen Algorithmus entwickelt, mit Anwendung in Perl und SQL, Sie können darüber hier nachlesen , komplett mit Analyse und Tests, warum es (wahrscheinlich) korrekt ist.
Das Konzept ist einfach: Wählen Sie für jeden Gegenstand eine Zufallszahl, ziehen Sie ihn durch eine Funktion, die vom Gewicht der Gegenstände abhängt, und wählen Sie den Gegenstand mit dem niedrigsten Wert.
Diese Funktion ist:
%Vor%Tags und Links python