Chinaunix首页 | 论坛 | 博客
  • 博客访问: 345367
  • 博文数量: 88
  • 博客积分: 2011
  • 博客等级: 大尉
  • 技术积分: 885
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-21 14:50
文章分类

全部博文(88)

文章存档

2010年(88)

我的朋友

分类: C/C++

2010-10-08 20:16:23

算法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) |
给主人留下些什么吧!~~