洗牌演算法的隨機性簡單證明。

2021-08-18 01:21:23 字數 724 閱讀 1561

所謂洗牌演算法,就是產生乙個包含指定範圍的所有數的隨機序列。主流的洗牌演算法的實現如下:

對於n張牌,用大小為n的陣列a[n];

for(i=0;i我們總是擔心他的隨機性是否能保證,這裡有乙個很簡單的理解。

可以先達成乙個共識:

如果: 1. 一張牌出現在任何位置的概率是相等的。

2. 乙個位置出現任何牌的概率是相等的。

那麼:我們可以認為他的隨機性是可以保證的。

下面就來證明這兩點。

洗牌演算法的過程可以簡單的看做:先對n張牌中隨機的抽取一張作為第一張牌,然後在n-1張牌中抽取一張作為第二張牌,以此類推...

1很明顯任何一張牌出現在第乙個位置的概率都是相等的。p=1/n;

那任何一張牌出現在第二張的概率如何計算呢?首先該張牌不能出現在第一張,p=(n-1)/n; 而後需要從n-1張牌中被選中,概率 p=((n-1)/n)*(1/(n-1))=1/n;

以此類推可以知道,任何一張牌出現在任何位置的概率是相等的。條件1證明完畢。

2同樣的道理:

位置1出現任何牌的概率是1/n;

位置2出現任何牌的概率同樣也是((n-1)/n)*(1/(n-1))=1/n;

。。。條件2證明完畢。

資訊與隨機性洗牌作業

主要考慮了兩種主要的洗牌方式,第一種是將牌隨機分成4堆然後打亂重排,這樣經過幾次重排就能得到打亂的牌。第二種是將牌隨機分成兩堆,然後將其中一堆每張間隔乙個塞進另一堆中形成打亂的牌。方法一 首先我們用1到52這組整數代表一副撲克牌,以其整除4的餘數代表四種花色。用runstest函式檢測陣列是否已經可...

隨機性的控制

無論是平時的工作還是比賽,進行測試的時候一定要把隨機性控制住,使用seed everything的函式基本可以控制住常見的資料探勘過程中的隨機性了,如果涉及到tensorflow keras或pytorch,還需要針對器進行額外的隨機性控制。import os import random def s...

生成有足夠隨機性的隨機數

大致思路是使用足夠的運算和網路傳輸產生隨機性 1 迴圈若干次,做一組運算 因為即使同一臺計算機 每次執行的時間也不會相同,求運算消耗的時間 因此產生了初步的隨機性 2 重複步驟1 若干次 將得到的值乘上乙個較大的數字 如10000 作為運算的迴圈次數 進一步放大隨機性 3 多次重複步驟2 得到一些隨...