Fisher-Yates 演算法生成有限序列的無偏隨機排列。運行時間與被洗牌的元素數量成正比。
我想用大量零元素混洗一些非零元素。
使用串列實作 Fisher-Yates 演算法會導致洗牌程序花費太長時間并需要太多存盤。Fisher--Yates 演算法中的大多數步驟將簡單地切換重復零元素的位置。
是否存在隨機洗牌(或替代)演算法:
- 導致無偏排列
- 不需要對所有重復元素進行改組和存盤
uj5u.com熱心網友回復:
由于 Fisher-Yates shuffle 會產生隨機排列,因此它的逆也是隨機排列:
- 對于 i=1 到 n-1:
- 在 [0,i] 中選擇一個亂數 j
- 交換元素 i 和 j
但是,在此演算法中,如果您有 m 個非零元素,并且在最后從所有元素開始,那么前 nm 次迭代肯定會交換零,因此您可以跳過這些。
如果您想避免存盤所有零元素,請使用哈希映射而不是陣列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/340397.html
上一篇:找出矩陣中水平/垂直對齊的標記
下一篇:函式以擴展形式回傳陣列中的數字?
