使用random_shuffle()算法随机化序列元素

原创 2007年09月26日 17:33:00

      以前只知道产生随机数用rand()。今天在修改别人程序时无意看到这么一个函数 random_shuffle(()。上网一查原来还可以这么产生随机数列。采用rand()产生一定范围内的随机数是并不是绝对的平均,可能有些数多有些shus产生指定范围内的随机元素集的最佳方法是创建一个顺序序列(也就是向量或者内置数组),在这个顺序序列中含有指定范围的所有值。例如,如何你需要产生100个0-99之间的数,那么就创建一个向量并用100个按升序排列的数填充向量.
 std::vector<int> vectorList;
 for (int i=0; i<10; i++)
 {
  vectorList.push_back(i);
 }

    填充完向量之后,用random_shuffle()算法打乱元素排列顺序。random_shuffle()定义在标准的头文件<algorithm.h>中。random_shuffle()有两个参数,第一个参数是指向序列首元素的迭代器,第二个参数则指向序列最后一个元素的下一个位置。
 random_shuffle(vectorList.begin(), vectorList.end());

对于数组也可以采用这种方法:
 
int a[10];
 for (int i=0; i<10; i++)
 {
  a[i] = i;
 }
 random_shuffle(a, a+10);

 for (int i=0; i<10;i++)
 {
  cout<<a[i];
 }

注意: 

1、是个完全通用的算法-适用于内建的数据类型和用户自定义类型。
 2、必须是向量或数组,不能使list等序列。说明此函数可能是对连续内存进行的随机排序(猜测),
  所以内存不连续的不行。
 

0049算法笔记——【随机化算法】蒙特卡罗算法,主元素问题,素数测试问题

1、蒙特卡罗算法       基本概述        蒙特卡罗(Monte Carlo)方法,又称随机抽样或统计试验方法。传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方...
  • liufeng_king
  • liufeng_king
  • 2013年07月05日 13:59
  • 8045

C++ 11中的随机排列函数shuffle

在Python中我们会经常看到shuffle的随机排列函数,其可以将列表中的内容进行随机排列,但在C++中却需要自己去实现这样功能的函数(c++0x之前)。在c++0x之后这样的功能函数在标准库中已有...
  • cywosp
  • cywosp
  • 2014年01月07日 14:44
  • 11914

快速排序 与 随机快速排序 算法分析

快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n l...
  • hustyangju
  • hustyangju
  • 2014年05月09日 10:33
  • 1519

使用random_shuffle()算法随机化序列元素

假设你需要指定范围内的随机数,传统的方法是使用ANSI C的函数random(),然后格式化结果以便结果是落在指定的范围内。但是,使用这个方法至少有两个缺点。     首先,做格式化时,结果常常是扭...
  • playboy1
  • playboy1
  • 2011年10月18日 17:02
  • 323

使用 random_shuffle() 算法随机化序列元素

假设你需要指定范围内的随机数,传统的方法是使用ANSI C的函数random(),然后格式化结果以便结果是落在指定的范围内。但是,使用这个方法至少有两个缺点。     首先,做格式化时,结果常常是扭曲...
  • Super_Level
  • Super_Level
  • 2014年03月18日 15:17
  • 857

使用random_shuffle()算法随机化序列元素

摘自:http://www.vckbase.com/document/viewdoc/?id=1699 使用random_shuffle()算法随机化序列元素 作者:赵湘宁   假设你需要指定范围...
  • zhaofuguang
  • zhaofuguang
  • 2013年10月18日 14:52
  • 687

使用random_shuffle()算法随机化序列元素

假设你需要指定范围内的随机数,传统的方法是使用ANSI C的函数random(),然后格式化结果以便结果是落在指定的范围内。但是,使用这个方法至少有两个缺点。首先,做格式化时,结果常常是扭曲的,所以得...
  • yangxkl
  • yangxkl
  • 2012年06月14日 11:27
  • 868

【随机化算法】蒙特卡罗算法,主元素问题,素数测试问题

0049算法笔记——【随机化算法】蒙特卡罗算法,主元素问题,素数测试问题 分类: 算法2013-07-05 13:59 215人阅读 评论(0) 收藏 举报 蒙特卡罗算法主元素问题...
  • pi9nc
  • pi9nc
  • 2013年08月03日 21:13
  • 2300

从一个数组中找出第k小元素的随机化算法 c语言实现 算法导论第九章

//Randomized_select,select a particular number from an array in linear time #include #include void...
  • liubaoli1989
  • liubaoli1989
  • 2013年08月05日 21:45
  • 910

0049算法笔记——【随机化算法】蒙特卡罗算法,主元素问题,素数测试问题

1、蒙特卡罗算法       基本概述        蒙特卡罗(Monte Carlo)方法,又称随机抽样或统计试验方法。传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方...
  • liufeng_king
  • liufeng_king
  • 2013年07月05日 13:59
  • 8045
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用random_shuffle()算法随机化序列元素
举报原因:
原因补充:

(最多只允许输入30个字)