欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

實(shí)現(xiàn)一個(gè)random?shuffle算法示例

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

引言

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

random shuffle

原理

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

實(shí)現(xiàn)

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;
}

測(cè)試

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

測(cè)試方式

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";
	}
}

測(cè)試結(jié)果

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    

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

以上就是實(shí)現(xiàn)一個(gè)random shuffle算法示例的詳細(xì)內(nèi)容,更多關(guān)于random shuffle算法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++中fork函數(shù)的使用及原理

    C++中fork函數(shù)的使用及原理

    這篇文章主要介紹了C++中fork函數(shù)的使用及原理,在C++中,fork函數(shù)用于創(chuàng)建一個(gè)新的進(jìn)程稱為子進(jìn)程,該進(jìn)程與原始進(jìn)程幾乎完全相同,需要的朋友可以參考下
    2023-05-05
  • C++中static和const的作用和用法

    C++中static和const的作用和用法

    在C++中,"static"和"const"都是用于修飾變量的關(guān)鍵字,它們具有不同的作用,本文通過(guò)代碼示例給大家詳細(xì)的介紹static和const的作用和用法,,需要的朋友可以參考下
    2023-06-06
  • 詳解C語(yǔ)言基礎(chǔ)的類型轉(zhuǎn)換

    詳解C語(yǔ)言基礎(chǔ)的類型轉(zhuǎn)換

    這篇文章主要為大家介紹了C語(yǔ)言基礎(chǔ)的類型轉(zhuǎn)換,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • 關(guān)于C++11中限定作用域的枚舉類型的問(wèn)題

    關(guān)于C++11中限定作用域的枚舉類型的問(wèn)題

    C++中有兩種類型的枚舉:不限定作用域的枚舉類型和限定作用域的枚舉類型。限定作用域的枚舉類型是C++11標(biāo)準(zhǔn)引入的新類型,對(duì)C++11中限定作用域的枚舉類型相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-01-01
  • C語(yǔ)言使用ffmpeg實(shí)現(xiàn)單線程異步的視頻播放器

    C語(yǔ)言使用ffmpeg實(shí)現(xiàn)單線程異步的視頻播放器

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言如何使用ffmpeg實(shí)現(xiàn)單線程異步的視頻播放器功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下
    2022-12-12
  • C語(yǔ)言獲取文件長(zhǎng)度的方法

    C語(yǔ)言獲取文件長(zhǎng)度的方法

    這篇文章主要介紹了C語(yǔ)言獲取文件長(zhǎng)度的相關(guān)知識(shí),包括使用標(biāo)準(zhǔn)庫(kù)方法和使用Linux系統(tǒng)調(diào)用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • 數(shù)組和指針的區(qū)別深入剖析

    數(shù)組和指針的區(qū)別深入剖析

    在C/C++中,指針和數(shù)組在很多地方可以互換使用,這使得我們產(chǎn)生一種錯(cuò)覺(jué),感覺(jué)數(shù)組和指針兩者是完全等價(jià)的,事實(shí)上數(shù)組和指針是有很大的區(qū)別的
    2012-11-11
  • C語(yǔ)言音樂(lè)播放器實(shí)例代碼

    C語(yǔ)言音樂(lè)播放器實(shí)例代碼

    文章給大家分享了用C語(yǔ)言音樂(lè)播放器的實(shí)例代碼,對(duì)此有需要的朋友參考學(xué)習(xí)下。
    2018-07-07
  • 使用C++實(shí)現(xiàn)順序鏈表

    使用C++實(shí)現(xiàn)順序鏈表

    今天小編就為大家分享一篇關(guān)于使用C++實(shí)現(xiàn)順序鏈表,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • C++11-20 常量表達(dá)式的使用

    C++11-20 常量表達(dá)式的使用

    本文主要介紹了C++11-20常量表達(dá)式,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10

最新評(píng)論