乙個簡單的洗牌演算法

2022-06-25 18:00:16 字數 531 閱讀 6991

首先我們需要寫乙個 生成指定區間內的隨機數 的函式

因為陣列索引都是整數,所以我們需要對隨機的結果再向下取整

// 返回乙個(min,max]之間的隨機數

function getrandomint(min, max)

math.random( )會生成乙個(0,1)之間的number

然後我們需要遍歷陣列,對每個元素

令其與乙個索引為隨機數的元素進行交換

export function shuffle(arr) 

return arr

}

在js中,這樣會直接修改arr指向的記憶體位址中的陣列內容

如果需要儲存原來的陣列,可以對這個函式稍作修改

export function shuffle(arr) 

return __arr

}

設計乙個公平的洗牌演算法

洗牌的基本邏輯,是乙個已知陣列重排序的問題,所以簡單的做法是遍歷k次,每次交換兩張牌,但是這個演算法公平嗎?如何確定乙個演算法公平,假設有n張牌,那麼就有n 中排序方法,而我們應該從這n 次中隨機1個,這樣才能保證公平性 但是這個演算法複雜度太高了!那麼怎麼簡單呢?換一種思維,每個位置都能等概率的存...

一天乙個演算法 隨機洗牌演算法

洗牌演算法是我們常見的隨機問題,在玩遊戲 隨機排序時經常會碰到。它可以抽象成這樣 得到乙個m以內的所有自然數的隨機順序陣列。洗牌演算法大多都是建立在隨機數的基礎上的,現在介紹幾種隨機數基礎上的隨機洗牌演算法 1 第一種可以簡單描述成 隨機抽牌,放在另一組 再次抽取,抽到空牌則重複抽。抽到空牌則重新抽...

c 面試高頻3 設計乙個洗牌演算法

給定n張撲克牌和乙個隨機函式,設計乙個洗牌演算法 我們有乙個隨機函式發生器,能夠產生1 54之間的隨機數,如何保證抽第一張牌是54中可能,抽第二張牌是53中可能 需要實每次取完元素後,我們就不會讓這個元素參與下一次的選取。那麼第一次抽牌在初始54張牌中,將隨機產生的牌x,與第乙個元素互換,第二次抽牌...