问题描述从一个数组【0,n-1】中等概率随机抽取m(m<n)个数。
假设抽取到数i,由概率知识知道p(i) = m/n;
代码:
// chapter12_2_eqPGETnum.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <time.h>
using namespace std;
/************************************************************************/
/*
从【0,n-1】随机等概率抽取m个不重复的数:
抽到数i的概率记为p(i):
又概率知识知p(i)=m/n。
*/
/************************************************************************/
void swap(int* p ,int* q)
{
if (p != q)
{
*p = *p ^ *q;
*q = *p ^ *q;
*p = *p ^ *q;
}
}
void getShutf(int* data,int n) //随机打乱数组data
{
srand((int)time(0));
for (int i = 0; i< n ;i++)
{
int j = rand()%(n-i)+i;
swap(&data[i],&data[j]);
}
}
void getMnum(int m,int n)
{
if (m > n)
{
return;
}
int* data