中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么實現一個random?shuffle算法

發布時間:2022-05-18 14:03:23 來源:億速云 閱讀:160 作者:iii 欄目:開發技術

這篇文章主要介紹“怎么實現一個random shuffle算法”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“怎么實現一個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&minus;1001-1001&minus;100進行random shuffle,統計每個位置出現的值的期望,一共隨機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    

怎么實現一個random?shuffle算法

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

關于“怎么實現一個random shuffle算法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

陆丰市| 车险| 漾濞| 南丰县| 通州区| 黑河市| 阳信县| 诏安县| 长宁区| 通辽市| 都兰县| 平安县| 天等县| 郴州市| 淳安县| 榆树市| 剑川县| 定陶县| 汉沽区| 潼南县| 岳西县| 五指山市| 怀安县| 玉林市| 汉沽区| 休宁县| 道孚县| 南靖县| 安陆市| 盘山县| 平原县| 西充县| 元谋县| 南川市| 措勤县| 曲水县| 汉阴县| 九寨沟县| 新化县| 旌德县| 桑日县|