随机生成n个不相等的随机数
在计算机视觉中,(例如8点算法)经常用到RANSAC算法在N个数据中找到最合适的一组n(n<N)个数据对,使某项指标达到最大。解决这个问题需要随机的在N个数据对中采样。本文实现一种线性的,复杂度为O(n)的方法完成这个功能。
原理很简单,将N个随机数对排列,只要得到n个不相等的下标,就可以得到n个随机数对。
下面就是获取下标的程序:
#include <iostream>
#include <vector>
#include <time.h>
using namespace std; using namespace std; vector<int> get_random(int n, int N)
{
vector<int> vec(N);
vector<int> out_vec;
for(int i=0;i<N;++i)
{
vec[i]=i;
}
for (int i=0;i<n;++i)
{
int rand_value=rand()%N;
out_vec.push_back(vec[rand_value]);
vec[rand_value]=vec[N-1];
N--;
}
return out_vec;
} int main()
{
srand((unsigned int)time(0)); vector<int> randsample=get_random(8,100);
for (size_t i=0;i<randsample.size();++i)
{
cout<<randsample[i]<<endl;
}
}
获得n个下标之后,就能方便的索引到N个排列好的数据对,我们的问题就解决了。
该方法的优点在于:1 不需要排斥重复的随机数。2 不需要对vector进行删除操作。
随机生成n个不相等的随机数的更多相关文章
- Java数组实现随机生成N-M之间不重复的随机数
接收一个整形数组,使用Math.Random每次在规定的数字范围内随机产生数字,然后嵌套for循环依次判断是否有重复值,如果有既外循环变量减一,直到把数组装满为止. /** * 随机生成 N--M的不 ...
- C#在一段数字区间内随机生成若干个互不相同的随机数
/// <summary> /// Random ra=new Random(); 系统自动选取当前时前作随机种子: /// Random ra=new Ra ...
- Java的ArrayList实现随机生成N-M之间N个不重复的随机数
在此之前我使用Java的数组实现了产生N-M之间的不重复的随机数,下面是使用数列ArrayList实现同样的功能,代码如下: /** * 随机生成 N--M,N个不重复随机数 使用ArrayList ...
- 【转载】随机生成k个范围为1-n的随机数,其中有多少个不同的随机数?
来源:http://www.cnblogs.com/haolujun/archive/2012/11/11/2765102.html 假如现在让你随机生成k个范围在1-n内的随机数,那么你能得到多少个 ...
- java 随机生成4位随机数
java 随机生成4位的随机数测试类 @org.junit.Testpublic void testRandom(){ String msg="您的注册码为%s,谢谢注册!"; S ...
- JAVA中随机生成确定范围内的随机数
最近工作中的一个业务需要再确定范围内取出一个随机数,网上到时搜出来一堆可以实现的方法,但是鄙人仍是理解不了,虽说已经copy方法直接完成工作了.今天抽时间整理下,希望能够帮助大家更好的理解随机数的实现 ...
- Java实现随机生成由字母、数字组合的N位随机数
通过Math.random函数生成所需的字符所有序列,通过判断当前字符是否属于大小写.数字,符合者加入数组内,直到数组存储N位为止,最后把当前数组转为字符串返回调用处. /** * 随机生成由数字.字 ...
- 在一定[min,max]区间,生成n个不重复的随机数的封装函数
引:生成一个[min,max]区间的一个随机数,随机数生成相关问题参考→链接 var ran=parseInt(Math.random()*(max-min+1)+min); //生成一个[min,m ...
- C# Random生成多个不重复的随机数万能接口
C#,Radom.Next()提供了在一定范围生成一个随机数的方法,我现在有个业务场景是给其他部门推送一些数据供他们做抽样检查处理,假设我的数据库里面有N条数据,现在要定期给其随机推送数据,我需要先拿 ...
随机推荐
- 矿Mac必备软件
1.Svn工具: Cornerstone_v2.7.10 2.iPhone配置文件管理 iPhoneConfigUtility.dmg 3.有道 for mac http://cidian.youda ...
- Swift中文教程(二)--简单值
原文:Swift中文教程(二)--简单值 Swift使用let关键字声明常量,var关键字声明变量.常量无需在编译时指定,但至少要被赋值一次.也就是说,赋值一次多次使用: var myVariable ...
- C#5.0新特性
C#5.0新特性 C#5.0最大的新特性,莫过于Async和Parallel. 以往我们为了让用户界面保持相应,我们可以直接使用异步委托或是System.Threading命名空间中的成员,但Syst ...
- C--运算符,表达式和语句实例
//第五章 运算符,表达式和语句 #include<stdio.h> //引入头文件 #include<math.h> #define ADJUST 7.64 //定义常量 # ...
- 使用Webbrowser的一点心得体会
原文:使用Webbrowser的一点心得体会 自从用上VS2005后,发现多了个WebBrowser控件(.net 2003中不带),为图方便吧,有好多小工具就用这个写的,慢慢也有点体会了,总结一下, ...
- Google Summer of Code 建议被接收的5个技巧
Google Summer of Code 建议被接收的5个技巧 本文翻译自:http://www.di.ens.fr/~baghdadi/TXT_blog/5_advices_to_get_your ...
- mongodb group包(最具体的、最受欢迎、最容易理解的解释)
和数据库一样group经常常使用于统计.MongoDB的group还有非常多限制,如:返回结果集不能超过16M, group操作不会处理超过10000个唯一键.好像还不能利用索引[不非常确定]. Gr ...
- WebApi 插件式构建方案
WebApi 插件式构建方案 WebApi 插件式构建方案 公司要推行服务化,不可能都整合在一个解决方案内,因而想到了插件式的构建方案.最终定型选择基于 WebApi 构建服务化,之所以不使用 WCF ...
- Grunt使用入门
Grunt使用入门 (by vczero) 一.前言 项目中一直在使用Grunt,只是对Grunt的基本使用,却未系统的总结过.为什么要构建工具?一句话:自动化.对于需要反复重复的任务,例如压缩(mi ...
- SQL Server 复制 - 发布订阅(SQL Server 数据同步)
原文:SQL Server 复制 - 发布订阅(SQL Server 数据同步) SQL Server的同步是通过SQL Server自带的复制工具来实现的,分发布和订阅2大步. A,复制-发布 发布 ...