首页 > 其他分享 >STL应用之随机化全排列

STL应用之随机化全排列

时间:2022-12-01 18:04:11浏览次数:42  
标签:排列 end cout Iterator STL beg 随机化 序列 include


输入:一个序列,可以是一组数字,如1,2,3,4....,也可以是一组字符串"111","222",....

输出:原序列的随机化序列

要求:每种随机的序列出现的概率相等,如输入{1,2,3},那么有6种随机化序列,要求输出一种即可,但每种随机序列输出的概率是六分之一

 

主要方法:

对于{1,2,3},先将3固定,交换1,2,有{1,2,3},{2,1,3},再将每组的3与这组数据任意一个交换,最终可得六种序列,根据概率乘法公式,每种

序列出现的概率是六分之一

对于{1,2,3,4},将4固定,前面的{1,2,3}已经随机化6种序列,那么按照前面的方法,将4与每组所有数据交换,最终可得24种随机序列,每种

序列出现的概率是二十四分之一。

其余类推

 

编程需要考虑程序的通用性,采用泛型编程技术

 

代码:

 

#include <iostream>
#include <vector>
#include <algorithm>
#include <ctime>
#include <Iterator>


using namespace std;
const int n=10;

template<class Iterator>
void Myrandom_shuffle(Iterator beg,Iterator end) {
Iterator it;
srand(unsigned(time(0)));
int diff;
Iterator swp;

for(it=beg+1;it!=end;it++) {
diff=rand()%(it-beg+1);
swp=beg+diff;
swap(*it,*swp);
}
}

typedef int Type;

template<class Iterator>
inline static void Output(Iterator beg,Iterator end) {
copy(beg,end,ostream_iterator<Type>(cout," "));
}

void main() {
vector<Type>v;
int i;
cout<<"Written by Wangzhicheng "<<endl;
cout<<"原先序列:"<<endl;
for(i=0;i<n;i++) {
v.push_back(i+1);
}
Output(v.begin(),v.end());
cout<<endl;
Myrandom_shuffle(v.begin(),v.end());
cout<<"混洗后的序列:"<<endl;
Output(v.begin(),v.end());
cout<<endl;
}

测试:

 

 

 

 

 

标签:排列,end,cout,Iterator,STL,beg,随机化,序列,include
From: https://blog.51cto.com/u_15899033/5903539

相关文章

  • 一种粗糙的全排列算法
    /*ThisisafreeProgram,YoucanmodifyorredistributeitunderthetermsofGNU*Description:给定一个字符串,输出它的全排列,如给定字符串abc,输出abc,bac,......
  • 14 STL-常用算法
    ​ 重新系统学习c++语言,并将学习过程中的知识在这里抄录、总结、沉淀。同时希望对刷到的朋友有所帮助,一起加油哦! 每一次学习都是为了追求智慧!写在前面,本篇章主要介......
  • jstl一些标签 中timestamp类型在页面去掉时分秒!
    <fmt:formatDatevalue='${vo.updateDate}'pattern='yyyy-MM-dd'/>  JSTL的ifelse:有c:if没有else的处理分类:JSP/JAVA/J2EE(11)作者同类文章X jstl的......
  • C++基础语法学习:STL
    基础语法学习,少点比较,多些谦虚1.容器:常见的容器有以下几类:1.vector:向量2.deque:双端队列3.list:列表4.set:集合5:multiset:多重集合6.map:映射7:multimap:多重映射2.......
  • 手把手教你如何实现大量图片的自适应图片页面的排列
    前言最近在开发一个批量展示图片的页面,图片的自适应排列是一个无法避免的问题在付出了许多头发的代价之后,终于完成了图片排列,并封装成组件,最终效果如下:1、设计思路为了使结......
  • JSTL c标签,fn标签,fmt标签 - 生活在爪洼岛上
    jstl是sun定义的标准,由apache实现,所以要下载jar包的话去apache,要看api文档的话,去sun,API文档在此:​​http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html​......
  • 奇偶的神奇排列
    题目:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分分析:1、首先输入一个整数数组,然后对数组内......
  • 13 STL-函数对象
    ​ 重新系统学习c++语言,并将学习过程中的知识在这里抄录、总结、沉淀。同时希望对刷到的朋友有所帮助,一起加油哦! 每一次学习都是为了追求智慧!写在前面,本篇章主要介......
  • 排列(permutation)
    排列(permutation)      用1,2,3,...,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3。按照“abcdefghi”的格式输出所有解,每行一个解。【......
  • 技术沙龙.:主题为《代码解析Castle(IOC)应用实例 -开源CMS 系统Cuyahoga》
    深圳.net俱乐部的第一次活动,我讲了Castle介绍性的一个主题,当时在场的很多人都是听得一头雾水,时隔一年后,IOC(Castle)的资料在中已经很丰富。我再次和大家一......