Effizientes Auswählen einer zufälligen Teilmenge von Größe $ M $ aus einem Satz von Größe $ n $
-
29-09-2020 - |
Frage
Dies ist ein Cross-Post meiner Frage hier auf math.se .
Ich habe eine Liste von $ N $ Elemente und möchte einen zufällig einer
für Werte von $ M $ In der Nähe von $ N / 2 $ , eine bessere Lösung, denke ich wäre es, jeden der
Ich bin jedoch besorgt, dass dies nicht dazu führen kann, dass jede Teilmenge mit gleicher Wahrscheinlichkeit ausgewählt wird.
Ich habe zwei Fragen. Zunächst nimmt dieser Algorithmus-Subsets mit gleicher Wahrscheinlichkeit aus (wenn ja, möchte ich einen Beweis dafür, dass es tut, und wenn nicht, würde ich auch einen Beweis dafür, dass dies nicht der Fall ist). Zweitens, breiter, würde ich gerne wissen, welche guten Lösungen für dieses Problem vorhanden sind. Wenn
Lösung
die Wahrscheinlichkeit, dass das Element $ 1 $ zu einem zufälligen
Wenn Sie $ 1 $ in Ihrer Subset setzen, bleiben Sie mit der Wahl eines
Wenn Sie nicht $ 1 $ in Ihrer Teilmenge eingesetzt haben, bleiben Sie mit der Auswahl eines
Dies bedeutet, dass Sie Ihren Algorithmus leicht aktualisieren müssen, den
Der resultierende Algorithmus ist etwas ähnlich zu Reservoir-Probenahme .
Ein dritter Ansatz mit einigen Ähnlichkeiten erzeugt eine zufällige Permutation von $ 1, \ ldots, n $ und wählt den ersten
Der Nachteil von all diesen Ansätzen besteht darin, dass sie in der Zeit $ \ theta (n) $ laufen, während für $ m \ ll \ sqrt {n} $ , Ihr erster Algorithmus läuft in (erwarteter) Zeit $ \ tilde \ theta (m) $ .
Wir können die
Um die Beschreibung des Algorithmus abzuschließen, müssen wir das folgende Problem lösen: Gegeben $ S \ Subseteq \ {1, \ ldots, n \} $ und $ i $ , Finden Sie den $ i $ 'ter kleines Element in $ \ Overline {S} $ . Wir können davon ausgehen, dass $ s $ in einer Struktur gespeichert ist (z. B. ein Burven-Binärbaum), der den folgenden Typ der Abfrage effizient beantworten kann: Angegebene
Insgesamt läuft dieser Algorithmus in $ \ tilde \ theta (m) $ für alle Werte von $ M $ < / span>, wo der Tilde die Faktoren logarithmisch in $ n $ versteckt. (Wenn $ m \ ll \ sqrt {n} $ Wir können Ihren ersten Ansatz verwenden, wodurch diese Abhängigkeit von loswerden> $ n $ .)