• 随机生成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进行删除操作。

  • 相关阅读:
    windows 安装 python _ flask
    open-falcon 前端代码在windows上运行
    windows下 安装python_ldap MySQL-python
    rocketmq集群、配置详解和常用命令
    docker仓库管理(9)
    docker镜像管理和dockerfile详解(8)
    docker学习路线图
    docker组件如何协作(7)
    docker核心组件(6)
    docker镜像下载加速(5)
  • 原文地址:https://www.cnblogs.com/ledao/p/3197047.html
Copyright © 2020-2023  润新知