擅长:python、mysql、java
<p>使用<code>O(n)</code>算法R<a href="https://en.wikipedia.org/wiki/Reservoir_sampling" rel="nofollow noreferrer">https://en.wikipedia.org/wiki/Reservoir_sampling</a>,从<code>iterable</code>中选择<code>k</code>随机元素:</p>
<pre><code>import itertools
import random
def reservoir_sample(iterable, k):
it = iter(iterable)
if not (k > 0):
raise ValueError("sample size must be positive")
sample = list(itertools.islice(it, k)) # fill the reservoir
random.shuffle(sample) # if number of items less then *k* then
# return all items in random order.
for i, item in enumerate(it, start=k+1):
j = random.randrange(i) # random [0..i)
if j < k:
sample[j] = item # replace item with gradually decreasing probability
return sample
</code></pre>
<p>示例:</p>
^{pr2}$
<p>{cd4{2}来自^代码。在</p>