Wie führt man eine gewichtete Zufallsauswahl mit Ersetzung effizient durch?

Barbara Streisand
Freigeben: 2024-10-27 08:06:02
Original
229 Leute haben es durchsucht

How to Perform Weighted Random Selection with Replacement Efficiently?

Gewichtete Zufallsauswahl mit und ohne Ersetzung

Die Auswahl zufälliger Elemente aus einer Liste mit oder ohne Ersetzung ist eine häufige Aufgabe in der Programmierung. Während es etablierte Methoden für die ungewichtete Auswahl und die gewichtete Auswahl ohne Ersetzung gibt, stellt die Auswahl gewichteter Elemente mit Ersetzung eine einzigartige Herausforderung dar.

Aliasmethode für die gewichtete Auswahl mit Ersetzung

Eine Einer der effizientesten Ansätze für dieses Szenario ist die Alias-Methode. Dabei geht es darum, gleich große Bins zu erstellen, die die gewichtete Liste effizient darstellen.

Implementierungsschritte:

  1. Gewichte normalisieren: Gewichte entsprechend anpassen Sie summieren sich zu 1,0 und stellen Auswahlwahrscheinlichkeiten dar.
  2. Partitionen erstellen: Bestimmen Sie die kleinste Potenz von 2, die größer als die Anzahl der Elemente ist, und erstellen Sie so viele Partitionen.
  3. Gewichte zuweisen: Platzieren Sie das Element mit dem kleinsten Gewicht in einer leeren Partition und füllen Sie diese so weit wie möglich aus.
  4. Partitionen füllen: Wenn eine Partition nicht voll ist, fügen Sie die hinzu Element mit dem höchsten Gewicht, um den verbleibenden Platz zu füllen.
  5. Wiederholen: Weisen Sie weiterhin Gewichtungen zu, bis alle Elemente berücksichtigt sind.

Laufzeitauswahl:

  1. Generieren Sie eine Zufallszahl zwischen 0 und 1.
  2. Bitverschieben Sie die Zahl um den Logarithmus der Anzahl der Partitionen (vorausgesetzt, die Bitverschiebung geht auf Ihrer Plattform schnell). ).
  3. Wenn die Partition geteilt ist, verwenden Sie den Dezimalteil der verschobenen Zahl, um zu entscheiden, welches Element ausgewählt werden soll.

Vorteile der Alias-Methode:

  • Schnelle und effiziente Auswahl mit Austausch.
  • Vermeidet die Reservoir-Methode für große Auswahlen.
  • Einfach zu implementieren und speichereffizient.

Das obige ist der detaillierte Inhalt vonWie führt man eine gewichtete Zufallsauswahl mit Ersetzung effizient durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!