国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

淺析Knuth高效洗牌算法

算法與數(shù)據(jù)結(jié)構(gòu) ? 來源:ACM算法日常 ? 作者:ACM算法日常 ? 2021-04-26 15:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

今天在做一個(gè)游戲需求的時(shí)候碰到一個(gè)問題,問題很簡單,給定75個(gè)球,編號1-75,需要保證初始化的時(shí)候位置是隨機(jī)的。

顯然,我們可以初始化一個(gè)數(shù)組A,把75個(gè)數(shù)放進(jìn)去,然后做一個(gè)shuffle函數(shù)隨機(jī)交換其中的元素,這樣就是隨機(jī)的。

我準(zhǔn)備這樣做一個(gè)shuffle,但同時(shí)也想看看golang里面是否有這樣的接口直接得到結(jié)果,看了下還真有,這個(gè)函數(shù)是rand.Perm(n),這個(gè)函數(shù)會(huì)返回一個(gè)數(shù)組,比如我傳入75,會(huì)返回一個(gè)0-74的隨機(jī)數(shù)組。

arr := rand.Perm(75)

好奇心驅(qū)使我一探究竟,golang會(huì)用什么樣的方式實(shí)現(xiàn)Perm函數(shù)呢?

打開golang的源代碼,在rand.go文件中找到這個(gè)函數(shù):

8722762c-a4b3-11eb-aece-12bb97331649.png

實(shí)現(xiàn)很簡單,然而初一看有點(diǎn)懵,因?yàn)闆]有用到shuffle,而是一次遍歷就把事情給解決了,到底是怎么回事?

仔細(xì)分析發(fā)現(xiàn),這個(gè)算法非常精巧,每次遍歷都是將當(dāng)前的數(shù)i和已經(jīng)在數(shù)組中的隨機(jī)一個(gè)數(shù)m[j]進(jìn)行交換,最終達(dá)到了公平隨機(jī)整個(gè)數(shù)組的作用。雖然只有短短3行代碼,卻讓人有種震撼的感覺。

頓時(shí)覺得golang很NB,確實(shí)很高效。

上面這段代碼寫了4行的注釋,大概意思是說不能省去0那一次,看起來沒啥用處,但是為了照顧r隨機(jī)器中的隨機(jī)序列,還是要加上,不然可能會(huì)造成負(fù)作用,這里面和隨機(jī)種子以及此后隨機(jī)的序列有關(guān),為了對隨機(jī)序列不產(chǎn)生影響保證公平性,不能省略0。

網(wǎng)上搜索了一下高效洗牌算法,又發(fā)現(xiàn)python里面也有這樣的函數(shù),這樣寫的:

for(int i = N - 1; i 》= 0 ; i -- )

swap(arr[i], arr[rand(0, i)]) // rand(0, i) 生成 [0, i] 之間的隨機(jī)整數(shù)

而這個(gè)算法的出處竟然來自于TAOCP!算法就是大名鼎鼎的 Knuth-Shuffle,即 Knuth 洗牌算法。

看似簡單的問題,竟然又扯出Knuth,大意了。

能把一件小事情做到極致的人,可以稱之為藝術(shù)家。Knuth名副其實(shí)。

最后以Knuth的一句話共勉:

A programmer who subconsciously views himself as an artist will enjoy what he does and will do it better.

Donald E. Knuth 1978
編輯:lyn

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4784

    瀏覽量

    98044
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4968

    瀏覽量

    73960
  • Shuffle
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    1917

原文標(biāo)題:Knuth高效洗牌算法

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    小華半導(dǎo)體數(shù)字電源算法配置工具DPACT介紹

    參考設(shè)計(jì)算法基礎(chǔ)上完成定制化開發(fā),高效生成符合項(xiàng)目需求的算法程序;用戶幾乎不需要懂電力電子算法、顯著降低開發(fā)門檻、縮短產(chǎn)品上市周期、既提升開發(fā)效率又提升電源轉(zhuǎn)換效率。
    的頭像 發(fā)表于 02-11 11:28 ?297次閱讀
    小華半導(dǎo)體數(shù)字電源<b class='flag-5'>算法</b>配置工具DPACT介紹

    GMSSL:國密算法SM2、SM3、SM4的高效實(shí)現(xiàn)

    GMSSL是一個(gè)支持國家密碼算法(國密算法)的開源密碼工具庫,它提供了與OpenSSL類似的功能,但特別強(qiáng)化了國密算法支持,主要包括: 國密算法實(shí)現(xiàn)(SM2/SM3/SM4等); 證書
    的頭像 發(fā)表于 01-05 20:59 ?380次閱讀
    GMSSL:國密<b class='flag-5'>算法</b>SM2、SM3、SM4的<b class='flag-5'>高效</b>實(shí)現(xiàn)

    深入淺出GMSSL:掌握SM2、SM3、SM4國密算法高效實(shí)踐

    將帶你從零開始,深入理解這三大核心算法在GMSSL中的高效使用方式,幫助你在實(shí)際項(xiàng)目中快速落地國密安全方案。 本文將以通信定位二合一系列Air780EGH核心板為例,帶你快速上手GMSSL國密算法SM2、SM3、SM4相關(guān)示例。
    的頭像 發(fā)表于 12-12 18:20 ?606次閱讀
    深入淺出GMSSL:掌握SM2、SM3、SM4國密<b class='flag-5'>算法</b>的<b class='flag-5'>高效</b>實(shí)踐

    C語言的常見算法

    # C語言常見算法 C語言中常用的算法可以分為以下幾大類: ## 1. 排序算法 ### 冒泡排序 (Bubble Sort) ```c void bubbleSort(int arr
    發(fā)表于 11-24 08:29

    SM4算法實(shí)現(xiàn)分享(一)算法原理

    SM4分組加密算法采用的是非線性迭代結(jié)構(gòu),以字為單位進(jìn)行加密、解密運(yùn)算,每次迭代稱為一輪變換,每輪變換包括S盒變換、非線性變換、線性變換、合成變換。加解密算法與密鑰擴(kuò)展都是采用32輪非線性迭代結(jié)構(gòu)
    發(fā)表于 10-30 08:10

    Camellia算法的實(shí)現(xiàn)(基于開源蜂鳥E203協(xié)處理器)

    項(xiàng)目構(gòu)想 我們一開始就選擇信息安全作為芯來杯比賽方向,并以Camellia算法作為算法原型。借助蜂鳥E203的協(xié)處理,能加速Camellia算法的運(yùn)算,并通過比較軟件實(shí)現(xiàn)和硬件實(shí)現(xiàn)的效果,體現(xiàn)
    發(fā)表于 10-30 07:04

    SM4算法原理及分享1

    SM4算法是一種分組密碼算法。其分組長度為128bit,密鑰長度也為128bit。加密算法與密鑰擴(kuò)展算法均采用32輪非線性迭代結(jié)構(gòu),以字(32位)為單位進(jìn)行加密運(yùn)算,每一次迭代運(yùn)算均
    發(fā)表于 10-30 06:54

    國密系列算法簡介及SM4算法原理介紹

    一、 國密系列算法簡介 國家商用密碼算法(簡稱國密/商密算法),是由我國國家密碼管理局制定并公布的密碼算法標(biāo)準(zhǔn)。其分類1所示: 圖1 國家商用密碼
    發(fā)表于 10-24 08:25

    加密算法的應(yīng)用

    加密是一種保護(hù)信息安全的重要手段,近年來隨著信息技術(shù)的發(fā)展,加密技術(shù)的應(yīng)用越來越廣泛。本文將介紹加密算法的發(fā)展、含義、分類及應(yīng)用場景。 1. 加密算法的發(fā)展 加密算法的歷史可以追溯到古代。在
    發(fā)表于 10-24 08:03

    AI的核心操控:從算法到硬件的協(xié)同進(jìn)化

    到頂層的應(yīng)用算法,共同構(gòu)成AI的“智能引擎”。 算法層:模型架構(gòu)與訓(xùn)練控制 現(xiàn)代AI的核心是深度學(xué)習(xí)算法,其操控依賴于神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)設(shè)計(jì)和訓(xùn)練過程的精細(xì)化調(diào)控。例如,Transformer架構(gòu)通過自注意力機(jī)制實(shí)現(xiàn)對長序列數(shù)據(jù)的
    的頭像 發(fā)表于 09-08 17:51 ?985次閱讀

    DFT算法與FFT算法的優(yōu)劣分析

    一概述 在諧波分析儀中,我們常常提到的兩個(gè)詞語,就是DFT算法與FFT算法,那么一款功率分析儀/諧波分析儀采用DFT算法或者FFT算法,用戶往往關(guān)注的是能否達(dá)到所要分析諧波次數(shù)的目的,
    的頭像 發(fā)表于 08-04 09:30 ?1396次閱讀

    【HarmonyOS next】ArkUI-X休閑益智猜字謎【基礎(chǔ)】

    ) { // 類似題目隨機(jī)算法 } 通過Fisher-Yates洗牌算法實(shí)現(xiàn)高效隨機(jī),避免題目重復(fù)。 3. 跨端UI構(gòu)建 build() { Column() { // 得分&am
    發(fā)表于 06-26 20:01

    同步電機(jī)失步淺析

    純分享帖,需要者可點(diǎn)擊附件免費(fèi)獲取完整資料~~~*附件:同步電機(jī)失步淺析.pdf【免責(zé)聲明】本文系網(wǎng)絡(luò)轉(zhuǎn)載,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請第一時(shí)間告知,刪除內(nèi)容!
    發(fā)表于 06-20 17:42

    首獲CCC認(rèn)證,千億充電樁市場加速洗牌

    誰能在洗牌中握緊入場券,將成為下半場競爭的關(guān)鍵懸念。
    的頭像 發(fā)表于 05-30 17:15 ?1021次閱讀

    智慧路燈智能控制算法優(yōu)化的探討

    ,能夠高效應(yīng)對復(fù)雜且存在不確定性的環(huán)境條件。以采用 Python 語言編寫的模糊控制算法為例,該算法能夠?qū)崟r(shí)采集環(huán)境光強(qiáng)以及車流量數(shù)據(jù),在此基礎(chǔ)上動(dòng)態(tài)調(diào)控路燈亮度。這一舉措不僅顯著提升了能源利用效率,還能確保照明效果在舒適性
    的頭像 發(fā)表于 03-07 11:39 ?869次閱讀
    智慧路燈智能控制<b class='flag-5'>算法</b>優(yōu)化的探討