首先我們需要寫乙個 生成指定區間內的隨機數 的函式
因為陣列索引都是整數,所以我們需要對隨機的結果再向下取整
// 返回乙個(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,與第乙個元素互換,第二次抽牌...