当前位置:   article > 正文

有序序列的随机化_给定一挚有序序列,用随机化二挘挕挗的方法挕挗某元素x。 提示:随机化二挘挕挗方法

给定一挚有序序列,用随机化二挘挕挗的方法挕挗某元素x。 提示:随机化二挘挕挗方法

目录

 

一、引子

(1)问题

(2)问题抽象:

二、一种随机化的方法(原理如下图演示)

(1)说明:

(2)特点:

三、使用C++生成随机序列(该序列为自然数序列,且序列内不含重复元素)


 

一、引子

(1)问题

  1. 将一副排好的扑克进行洗牌。
  2. 由序列3,8,2,5,9,4重新随机排列后得到另一个序列 

(2)问题抽象:

  1. 将一个有序序列随机化
  2. 将一个序列A关联到一个有序计数序列B,使用随机化后的计数序列B’去重排序列A

二、一种随机化的方法(原理如下图演示)

(1)说明:

  1. 在Excel表中对选中区域排序时,同一行相当于绑定在一起

(2)特点:

  1. 可以对指定序列重排
  2. 可以很容易地生成没有重复元素的随机序列
  3. 随机序列中的随机数只用于排序,而不参加结果的计算
  4. 对应算法性能分析:时间复杂度取决于排序算法的时间复杂度。是比较高效的。

三、使用C++生成随机序列(该序列为自然数序列,且序列内不含重复元素)

  1. #include<vector>
  2. #include<random>
  3. struct Pair
  4. {
  5. unsigned int_num;//对应计数序列
  6. unsigned rand_num;//对应辅助序列
  7. };
  8. bool isSmall_randnum(const Pair& s1, const Pair& s2)
  9. {
  10. return s1.rand_num < s2.rand_num;
  11. }
  12. int get_randseqlist(vector<unsigned>& randseqlist,int num)
  13. {
  14. /*
  15. 函数功能:生成由0到num-1的num个整数构成的一个随机序列。随机序列通过randseqlist传出
  16. */
  17. randseqlist.clear();
  18. Pair pair;
  19. vector<Pair> pairs;
  20. //生成随机数
  21. static default_random_engine e;
  22. static uniform_int_distribution<unsigned> u(0, num);
  23. for (unsigned i = 0; i < num; i++)
  24. {
  25. pair.int_num = i;
  26. pair.rand_num = u(e);
  27. pairs.push_back(pair);
  28. }
  29. sort(pairs.begin(), pairs.end(), isSmall_randnum);//以rand_num为“关键字”排序
  30. for (size_t i = 0; i < num; i++)
  31. {
  32. randseqlist.push_back(pairs[i].int_num);
  33. }
  34. return 0;
  35. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/977665
推荐阅读
相关标签
  

闽ICP备14008679号