蓄水池抽样
def reservoir_sampling(vec, k):
if k >= len(vec):
return vec
arr = vec[:k]
for i, e in enumerate(vec[k:]):
r = np.random.randint(0, k + i + 1)
if r <= k-1:
arr[r] = e
return sorted(arr)
def reservoir_sampling(vec, k):
if k >= len(vec):
return vec
arr = vec[:k]
for i, e in enumerate(vec[k:]):
r = np.random.randint(0, k + i + 1)
if r <= k-1:
arr[r] = e
return sorted(arr)