zoukankan      html  css  js  c++  java
  • 随机生成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进行删除操作。

  • 相关阅读:
    MySQL临时表
    git开发常用命令
    PHP资源列表
    Golang学习--平滑重启
    Golang学习--TOML配置处理
    Golang学习--包管理工具glide
    Golang学习--开篇
    构建自己的PHP框架--构建模版引擎(3)
    构建自己的PHP框架--构建模版引擎(2)
    Laravel Session 遇到的坑
  • 原文地址:https://www.cnblogs.com/ledao/p/3197047.html
Copyright © 2011-2022 走看看