I had the same problem: https://stats.stackexchange.com/questions/178991/sampling-from-a-probability-list-set-efficiently. In other words: Given a set where each item has a probability and whose items' probabilities sum up to one. I want to draw a series of items efficiently, i.e. without sorting anything and without repeatedly iterating over the set. The following function draws the lowest of $N$ uniformly distributed random numbers within the interval $[a,1)$. Let $r$ be a random number from $[0,1)$. \begin{equation} \text{next}(N, a) = 1 - (1 - a) \cdot \sqrt[N]{r} \end{equation} You can use this function to draw an **ascending** series $(a_i)$ of $N$ uniformly distributed random numbers in [0,1). Here is an example with $N = 10$: $a_1 = \text{next}(10, 0)$ $a_2 = \text{next}(9, a_1)$ $a_3 = \text{next}(8, a_2)$ $\dots$ $a_{10} = \text{next}(1, a_9)$ Now while drawing that ascending series, parallel iterate over your set. For each drawn ascending random number, add the corresponding set item to your result. ---- If you are interested in the $\text{next}$ function: It is the inverse of the probability that one of $N$ uniformly distributed random numbers lies within the interval $[a, x)$ with $x \leq 1$.