最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

實現一個random?shuffle算法示例

 更新時間:2022年05月18日 12:24:07   作者:Concyclics  
這篇文章主要為大家介紹了實現一個random?shuffle算法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

引言

你是否有過類似的煩惱?想從一個列表中取出若干個不重復的元素,但是不知道要如何去重? 這里提供一種叫random shuffle的方法。

random shuffle

原理

shuffle有洗牌的意思,該方法也類似洗牌,從一個列表的前綴中隨機取一個位置,和前綴的末尾做交換,這樣對于每一位,都類似洗牌把它隨機插進前面某個位置,就能實現把整個列表打亂成隨機的分布,最后我們只需要取打亂后列表的前iii位,即是不重復的了。

實現

template <typename T>
vector<T> my_random_shuffle(vector<T> input)
{
	static mt19937 rnd(time(NULL));
	for(uint64_t i=1; i<input.size(); i++)
	{
		swap(input[i], input[rnd()%i]);
	}
	return input;
}

測試

對1−1001-1001−100進行random shuffle,統(tǒng)計每個位置出現的值的期望,一共隨機1e5次,觀察每個位置的期望值。

測試方式

int main(int argc, char *argv[])
{
	int n=100;
	int t=1e5;
	vector<double> input(n);
	vector<double> ans(n,0);
	for(int i=0;i<n;i++)
	{
		input[i]=i+1;
	}
	for(int i=0;i<t;i++)
	{
		int j=0;
		for(auto x:my_random_shuffle(input))
		{
			ans[j]+=x;
			j++;
		}
	}
	for(auto &x:ans)
	{
		x/=t;
	}
	for(int i=0;i<n;i++)
	{
		cout<<ans[i]<<"\t\t";
		if(i%4==3)cout<<"\n";
	}
}

測試結果

50.9806        50.9978        50.9801        50.9618        
50.9662        50.9486        50.9348        50.9374        
50.9013        50.8675        50.9274        50.8882        
50.8748        50.8656        50.8555        50.8352        
50.8218        50.833        50.7876        50.8293        
50.8174        50.7475        50.7833        50.7234        
50.7935        50.7652        50.7787        50.6877        
50.7578        50.7193        50.694        50.6374        
50.7106        50.6737        50.6511        50.643        
50.6365        50.6079        50.6261        50.5958        
50.5886        50.5561        50.5837        50.602        
50.5241        50.559        50.5806        50.5683        
50.4943        50.5168        50.4743        50.4901        
50.479        50.4729        50.4745        50.4282        
50.4521        50.3626        50.4005        50.4381        
50.3373        50.3543        50.3738        50.4259        
50.3071        50.3403        50.2773        50.2991        
50.3485        50.3301        50.3087        50.2954        
50.2216        50.2597        50.2882        50.2848        
50.2375        50.2224        50.214        50.2504        
50.1656        50.14        50.1304        50.1726        
50.2319        50.1579        50.1599        50.1223        
50.1396        50.029        50.0759        50.1079        
50.0573        50.0219        50.0716        50.0642        
49.9957        50.0364        50.0604        49.9931    

可以觀察到結果的期望分布十分均勻,都在50上下。

以上就是實現一個random shuffle算法示例的詳細內容,更多關于random shuffle算法的資料請關注腳本之家其它相關文章!

相關文章

  • VS2019 更新MSDN并創(chuàng)建快捷方式的實現

    VS2019 更新MSDN并創(chuàng)建快捷方式的實現

    這篇文章主要介紹了VS2019 更新MSDN并創(chuàng)建快捷方式的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • C++基礎教程之指針拷貝詳解

    C++基礎教程之指針拷貝詳解

    這篇文章主要介紹了C++基礎教程之指針拷貝詳解的相關資料,需要的朋友可以參考下
    2017-01-01
  • C++通過msxml調用webservice示例分享

    C++通過msxml調用webservice示例分享

    這篇文章主要介紹了C++通過msxml調用webservice示例分享,需要的朋友可以參考下
    2014-03-03
  • C語言基礎知識分享續(xù)篇

    C語言基礎知識分享續(xù)篇

    這篇文章主要介紹了C語言基礎知識分享續(xù)篇的相關資料,需要的朋友可以參考下
    2023-01-01
  • C++?OpenCV紅綠燈檢測Demo實現詳解

    C++?OpenCV紅綠燈檢測Demo實現詳解

    OpenCV(Open Source Computer Vision Library)是開源的計算機視覺和機器學習庫,提供了C++、 C、 Python、 Java接口,并支持Windows、 Linux、 Android、 Mac OS平臺,下面這篇文章主要給大家介紹了關于C++?OpenCV紅綠燈檢測Demo實現的相關資料,需要的朋友可以參考下
    2022-11-11
  • C語言實現簡單的三子棋項目

    C語言實現簡單的三子棋項目

    這篇文章主要為大家詳細介紹了C語言實現簡單的三子棋項目,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 使用ShellClass獲取文件屬性詳細信息的實現方法

    使用ShellClass獲取文件屬性詳細信息的實現方法

    本篇文章是對ShellClass獲取文件屬性詳細信息的實現方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C++之類和對象課后習題簡單實例

    C++之類和對象課后習題簡單實例

    下面小編就為大家?guī)硪黄狢++之類和對象課后習題簡單實例。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • C語言深入講解棧與堆和靜態(tài)存儲區(qū)的使用

    C語言深入講解棧與堆和靜態(tài)存儲區(qū)的使用

    對大多數C 語言初學者來說,堆棧卻是一個很模糊的概念。堆棧是一種數據結構,一個在程序運行時用于存放的地方,相信這可能是很多初學者共同的認識,靜態(tài)存儲區(qū)即內存在程序編譯的時候就已經分配好,這塊內存在程序的整個運行期間都存在
    2022-04-04
  • C++函數參數取默認值的深入詳解

    C++函數參數取默認值的深入詳解

    本篇文章是對C++中函數參數取默認值進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05

最新評論

邢台市| 东海县| 昂仁县| 呼和浩特市| 肥城市| 洪雅县| 宜丰县| 西林县| 洛宁县| 诸城市| 云和县| 峡江县| 龙海市| 固始县| 新竹县| 镇安县| 赤水市| 宽城| 承德市| 宣威市| 鱼台县| 东光县| 郸城县| 卫辉市| 开远市| 双鸭山市| 正蓝旗| 堆龙德庆县| 衡水市| 三明市| 永定县| 陆川县| 汝州市| 巴塘县| 门源| 固阳县| 建平县| 鄂托克前旗| 横山县| 蛟河市| 昌黎县|