日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

什么是洗牌算法

 長沙7喜 2019-05-15

作者: Great Eagle


問題

小E最近在設(shè)計一款斗地主小游戲,為了保證發(fā)到玩家手中的牌具有隨機性,小E必須對現(xiàn)實世界中的洗牌過程進行模擬。看似簡單的一個問題,卻難住了小E。

于是,小E向老師請教。

思路

點評:上面即為洗牌算法的思想,其本質(zhì)是對數(shù)組元素進行隨機重排。數(shù)組中每個元素經(jīng)過洗牌算法后落在數(shù)組某個位置上的概率是相等的,洗牌算法在牌類游戲中非常有用。我們最終將算法的時間復(fù)雜度優(yōu)化到了O(n),空間復(fù)雜度優(yōu)化到了O(1)。

代碼實現(xiàn)

下面是作者用JavaScript實現(xiàn)的代碼,僅供參考?。ńㄗh大家自己動手實現(xiàn)一遍)

//對數(shù)組中的元素進行隨機重新排列,并返回
//arr:數(shù)組
function shuffle(arr) {
    for(let i = arr.length - 1; i >= 0; i--) {
        //隨機從0-i中選擇一個下標
        let randomIndex = Math.floor(Math.random() * (i + 1));
        //將選中的元素與arr[i]交換
        let t = arr[randomIndex];
        arr[randomIndex] = arr[i];
        arr[i] = t;
    }
    //返回隨機重排后的數(shù)組
    //隨機重排過程發(fā)生在原數(shù)組上,并未產(chǎn)生新數(shù)組
    return arr;
}

溫馨提示:可左右滑動

復(fù)制代碼請前往https://blog.csdn.net/Great_Eagle/article/details/84839932

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多