chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

淺析Knuth高效洗牌算法

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

掃碼添加小助手

加入工程師交流群

今天在做一個(gè)游戲需求的時(shí)候碰到一個(gè)問(wèn)題,問(wèn)題很簡(jiǎn)單,給定75個(gè)球,編號(hào)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ù)呢?

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

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

實(shí)現(xiàn)很簡(jiǎn)單,然而初一看有點(diǎn)懵,因?yàn)闆](méi)有用到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行代碼,卻讓人有種震撼的感覺(jué)。

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

上面這段代碼寫了4行的注釋,大概意思是說(shuō)不能省去0那一次,看起來(lái)沒(méi)啥用處,但是為了照顧r隨機(jī)器中的隨機(jī)序列,還是要加上,不然可能會(huì)造成負(fù)作用,這里面和隨機(jī)種子以及此后隨機(jī)的序列有關(guān),為了對(duì)隨機(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è)算法的出處竟然來(lái)自于TAOCP!算法就是大名鼎鼎的 Knuth-Shuffle,即 Knuth 洗牌算法。

看似簡(jiǎn)單的問(wèn)題,竟然又扯出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)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4739

    瀏覽量

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

    關(guān)注

    30

    文章

    4922

    瀏覽量

    72217
  • Shuffle
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    1871

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

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

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

    ) { // 類似題目隨機(jī)算法 } 通過(guò)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)問(wèn)題,請(qǐng)第一時(shí)間告知,刪除內(nèi)容!
    發(fā)表于 06-20 17:42

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

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

    中偉視界:AI防爆型攝像機(jī)有哪些常用算法算法解析與并行運(yùn)行能力介紹

    AI防爆型攝像機(jī)通過(guò)多種智能算法,如目標(biāo)檢測(cè)、人體識(shí)別、行為識(shí)別等,具備了對(duì)監(jiān)控場(chǎng)景的深度解析與高效管理能力。它能實(shí)時(shí)監(jiān)測(cè)潛在危險(xiǎn)并預(yù)警,在無(wú)網(wǎng)無(wú)電環(huán)境中可獨(dú)立運(yùn)行,充分展示了其強(qiáng)大的并行算法能力,成為安防和工業(yè)領(lǐng)域的重要工具。
    的頭像 發(fā)表于 02-27 10:41 ?784次閱讀
    中偉視界:AI防爆型攝像機(jī)有哪些常用<b class='flag-5'>算法</b>之<b class='flag-5'>算法</b>解析與并行運(yùn)行能力介紹

    PID控制算法的C語(yǔ)言實(shí)現(xiàn):PID算法原理

    在工業(yè)應(yīng)用中 PID 及其衍生算法是應(yīng)用最廣泛的算法之一,是當(dāng)之無(wú)愧的萬(wàn)能算法,如果能夠熟練掌握 PID 算法的設(shè)計(jì)與實(shí)現(xiàn)過(guò)程,對(duì)于一般的研發(fā)人員來(lái)講,應(yīng)該是足夠應(yīng)對(duì)一般研發(fā)問(wèn)題了,而
    發(fā)表于 02-26 15:24

    直擊 MBR2054:低正向壓降如何成就高效電路,應(yīng)用實(shí)例解讀#

    高效電路
    杰克船長(zhǎng)6262
    發(fā)布于 :2025年02月22日 14:23:54

    設(shè)備智能巡檢系統(tǒng),高效精準(zhǔn)定位設(shè)備隱患

    隨著工業(yè)設(shè)備規(guī)模不斷擴(kuò)大、復(fù)雜度持續(xù)提升,傳統(tǒng)人工巡檢模式已難以滿足高效、精準(zhǔn)的隱患管理需求。中設(shè)智控推出的智能巡檢系統(tǒng),通過(guò)物聯(lián)網(wǎng)、AI算法與大數(shù)據(jù)技術(shù),實(shí)現(xiàn)設(shè)備隱患的“主動(dòng)發(fā)現(xiàn)-智能診斷-閉環(huán)處置”,助力企業(yè)構(gòu)建安全高效的設(shè)
    的頭像 發(fā)表于 02-21 16:14 ?738次閱讀
    設(shè)備智能巡檢系統(tǒng),<b class='flag-5'>高效</b>精準(zhǔn)定位設(shè)備隱患

    信道分配算法在通信中的應(yīng)用

    在現(xiàn)代通信系統(tǒng)中,信道分配算法是確保有效、高效通信的關(guān)鍵技術(shù)之一。隨著移動(dòng)通信技術(shù)的快速發(fā)展,用戶數(shù)量的增加和數(shù)據(jù)流量的爆炸式增長(zhǎng),對(duì)信道資源的需求也在不斷上升。 信道分配算法的基本概念 信道分配
    的頭像 發(fā)表于 01-22 16:22 ?1052次閱讀

    常見(jiàn)的加密算法有哪些?它們各自的優(yōu)勢(shì)是什么?

    在于其出色的安全性能和高效的實(shí)現(xiàn)方式,已成為目前最廣泛使用的加密算法之一。它能夠抵御暴力破解攻擊,且在各種硬件和軟件平臺(tái)上都能實(shí)現(xiàn)高效的加密和解密操作。 DES(Data Encryption
    的頭像 發(fā)表于 12-17 15:57 ?1539次閱讀

    【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗(yàn)】+內(nèi)容簡(jiǎn)介

    內(nèi)容簡(jiǎn)介這是一本深入解讀基礎(chǔ)算法及其電路設(shè)計(jì),以打通算法研發(fā)到數(shù)字IC設(shè)計(jì)的實(shí)現(xiàn)屏障,以及指導(dǎo)芯片設(shè)計(jì)工程師從底層掌握復(fù)雜電路設(shè)計(jì)與優(yōu)化方法為目標(biāo)的專業(yè)技術(shù)書。任何芯片(如WiFi芯片、5G芯片
    發(fā)表于 11-21 17:14

    【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗(yàn)】+介紹基礎(chǔ)硬件算法模塊

    作為嵌入式開(kāi)發(fā)者往往比較關(guān)注硬件和軟件的協(xié)調(diào)。本書介紹了除法器,信號(hào)發(fā)生器,濾波器,分頻器等基本算法的電路實(shí)現(xiàn),雖然都是基礎(chǔ)內(nèi)容,但是也是最常用到的基本模塊。 隨著逆全球化趨勢(shì)的出現(xiàn),過(guò)去的研發(fā)
    發(fā)表于 11-21 17:05

    技術(shù)科普 | 芯片設(shè)計(jì)中的LEF文件淺析

    技術(shù)科普 | 芯片設(shè)計(jì)中的LEF文件淺析
    的頭像 發(fā)表于 11-13 01:03 ?948次閱讀
    技術(shù)科普 | 芯片設(shè)計(jì)中的LEF文件<b class='flag-5'>淺析</b>

    華納云:Chord算法如何管理節(jié)點(diǎn)間的聯(lián)系?

    ,以確保網(wǎng)絡(luò)變化時(shí)后繼關(guān)系的正確性。 查找效率: Chord算法通過(guò)finger表和后繼指針的設(shè)計(jì),使得查找操作的平均時(shí)間復(fù)雜度為O(log n),其中n是網(wǎng)絡(luò)中的節(jié)點(diǎn)數(shù)量。 通過(guò)這些機(jī)制,Chord算法能夠有效地管理節(jié)點(diǎn)間的聯(lián)系,并在分布式環(huán)境中提供
    發(fā)表于 11-08 16:03

    U盤存儲(chǔ)并聯(lián),算法交互輸出

    FreeRTOS),負(fù)責(zé)任務(wù)調(diào)度和資源管理。 使用C/C++語(yǔ)言編寫數(shù)據(jù)管理、算法和通信模塊,確保代碼的高效性和可靠性。 利用現(xiàn)有的庫(kù)和框架(如TensorFlow Lite Micro)來(lái)實(shí)現(xiàn)輕量級(jí)的機(jī)器
    發(fā)表于 10-28 07:36