算法1:利用随机洗牌算法,洗好前m张牌
伪码:
for (i = 0; i < m; i++)
{
swap(A[i], A[random() % (n - i) + i]);
}
return A[0..(m-1)];
算法2:扫描整个数组,利用概率的方法选择其中一些元素
伪码:
select = m;
remaining = n;
for (i = 0; i < n; i++)
{
if (random() % ramaining) < select)
{
print i;
select--;
}
remaining++;
}
分析:两个算法都保证了算法
阅读(1193) | 评论(0) | 转发(0) |