(Python) Algorithmus zur zufälligen Auswahl eines Schlüssels basierend auf Proportionalität / Gewicht

8

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?

    
LaundroMat 03.04.2010, 08:41
quelle

6 Antworten

10

Hier ist eine gewichtete Auswahlfunktion, mit etwas Code, der es ausübt.

%Vor%     
user97370 03.04.2010, 09:40
quelle
9

Dies sollte den Trick machen:

%Vor%     
Dave Kirby 03.04.2010 09:39
quelle
2

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.

    
bragboy 03.04.2010 08:52
quelle
2

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.

    
Mark Byers 03.04.2010 08:52
quelle
2

sollte man sich auch ansehen dieser Link

Machen Sie zwei Listen für k, sagen wir xk und yk

%Vor%     
Vedsar Kushwaha 22.01.2015 06:58
quelle
-1

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%     
bart 03.04.2010 11:28
quelle

Tags und Links