在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

淺析Knuth高效洗牌算法

算法與數據結構 ? 來源:ACM算法日常 ? 作者:ACM算法日常 ? 2021-04-26 15:41 ? 次閱讀

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

顯然,我們可以初始化一個數組A,把75個數放進去,然后做一個shuffle函數隨機交換其中的元素,這樣就是隨機的。

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

arr := rand.Perm(75)

好奇心驅使我一探究竟,golang會用什么樣的方式實現Perm函數呢?

打開golang的源代碼,在rand.go文件中找到這個函數:

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

實現很簡單,然而初一看有點懵,因為沒有用到shuffle,而是一次遍歷就把事情給解決了,到底是怎么回事?

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

頓時覺得golang很NB,確實很高效。

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

網上搜索了一下高效洗牌算法,又發現python里面也有這樣的函數,這樣寫的:

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

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

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

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

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

最后以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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4625

    瀏覽量

    93141
  • 代碼
    +關注

    關注

    30

    文章

    4813

    瀏覽量

    68848
  • Shuffle
    +關注

    關注

    0

    文章

    5

    瀏覽量

    1703

原文標題:Knuth高效洗牌算法

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數據結構】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    常見的加密算法有哪些?它們各自的優勢是什么?

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

    【「從算法到電路—數字芯片算法的電路實現」閱讀體驗】+內容簡介

    內容簡介這是一本深入解讀基礎算法及其電路設計,以打通算法研發到數字IC設計的實現屏障,以及指導芯片設計工程師從底層掌握復雜電路設計與優化方法為目標的專業技術書。任何芯片(如WiFi芯片、5G芯片
    發表于 11-21 17:14

    【「從算法到電路—數字芯片算法的電路實現」閱讀體驗】+介紹基礎硬件算法模塊

    作為嵌入式開發者往往比較關注硬件和軟件的協調。本書介紹了除法器,信號發生器,濾波器,分頻器等基本算法的電路實現,雖然都是基礎內容,但是也是最常用到的基本模塊。 隨著逆全球化趨勢的出現,過去的研發
    發表于 11-21 17:05

    技術科普 | 芯片設計中的LEF文件淺析

    技術科普 | 芯片設計中的LEF文件淺析
    的頭像 發表于 11-13 01:03 ?316次閱讀
    技術科普 | 芯片設計中的LEF文件<b class='flag-5'>淺析</b>

    華納云:Chord算法如何管理節點間的聯系?

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

    U盤存儲并聯,算法交互輸出

    FreeRTOS),負責任務調度和資源管理。 使用C/C++語言編寫數據管理、算法和通信模塊,確保代碼的高效性和可靠性。 利用現有的庫和框架(如TensorFlow Lite Micro)來實現輕量級的機器
    發表于 10-28 07:36

    QC快充芯片,因高效而兼容性好而成為手機標配的充電解決方案!

    ,其核心在于一套高效的充電協議,該協議通過智能調整充電過程中的電壓和電流,實現了遠超傳統充電方式的速度。 QC快充芯片內置了精密的電路設計和先進的算法,能夠實時監測電池狀態,動態調整充電策略,確保既
    發表于 09-26 10:03

    無人機電力巡檢系統的功能淺析

    ?????? 無人機電力巡檢系統的功能淺析 ?????? 隨著電力行業的快速發展,電力輸電網絡的規模不斷擴大,如何高效、精準地巡檢電力設施,確保供電的穩定性和安全性,成為電力企業面臨的重要挑戰。傳統
    的頭像 發表于 08-14 16:48 ?479次閱讀
    無人機電力巡檢系統的功能<b class='flag-5'>淺析</b>

    充電也要算法?儲能充電芯片中的算法處理器

    或充電設備中,負責實時監控電池狀態,執行充電策略,并調整充電參數,如電流和電壓。 ? 比如算法處理器可以執行復雜的充電算法,如恒流/恒壓充電、脈沖充電、智能協商充電等,這些算法能夠根據電池的狀態調整充電參數,實現更
    的頭像 發表于 07-30 00:07 ?3768次閱讀

    圖像識別算法的優缺點有哪些

    圖像識別算法是一種利用計算機視覺技術對圖像進行分析和理解的方法,它在許多領域都有廣泛的應用,如自動駕駛、醫療診斷、安全監控等。然而,圖像識別算法也存在一些優缺點。 一、圖像識別算法的優點 高效
    的頭像 發表于 07-16 11:09 ?1812次閱讀

    BLDC電機控制算法詳解

    無刷直流電機(Brushless DC Motor,簡稱BLDC電機)以其高效率、高可靠性和低噪音等特點,在工業、家電和汽車等領域得到了廣泛應用。為了實現BLDC電機的精確控制,需要采用適當的控制
    的頭像 發表于 06-14 10:49 ?1155次閱讀

    常用的電機控制算法有哪些

    在電機控制領域,選擇合適的控制算法對于實現高效、精確且穩定的電機運行至關重要。以下將詳細介紹幾種常用的電機控制算法,并通過具體的分析和實例,探討它們的特點、應用以及優勢。
    的頭像 發表于 06-05 16:31 ?2542次閱讀

    淺析FreeRTOS任務調度器的三種調度算法和應用

    FreeRTOS在MCU領域應用非常廣泛,今天就給大家講解一下FreeRTOS調度器中的三種調度算法,以及在瑞薩RZ/T2L MPU中的應用。
    的頭像 發表于 05-10 14:02 ?7712次閱讀
    <b class='flag-5'>淺析</b>FreeRTOS任務調度器的三種調度<b class='flag-5'>算法</b>和應用

    淺析消防設備電源監控系統設計及應用

    淺析消防設備電源監控系統設計及應用 張穎姣 安科瑞電氣股份有限公司?上海嘉定 201801 摘要 :消防設備電源監控系統在許多大型商場或公司中非常重要的,所以消防設備電源監控系統的良好運行和實現
    的頭像 發表于 03-12 10:25 ?385次閱讀
    <b class='flag-5'>淺析</b>消防設備電源監控系統設計及應用

    淺析基于水廠云平臺的用電設備高效運行管理系統

    程瑜 安科瑞電氣股份有限公司?上海嘉定 201801 【摘要】:為監測大型用電設備的電能消耗情況,實現安全用電和設備的高效管理,本課題建立了一個基于云平臺大數據智能化運維的用電設備安全高效運行
    的頭像 發表于 03-01 10:29 ?491次閱讀
    <b class='flag-5'>淺析</b>基于水廠云平臺的用電設備<b class='flag-5'>高效</b>運行管理系統
    主站蜘蛛池模板: 美女扒开尿囗给男人玩的动图| 国产三级观看久久| 亚洲爱爱图片| 婷婷色九月综合激情丁香| 天天在线干| 天天干天天操天天添| sihu免费观看在线高清| a级毛片免费观看网站| 午夜黄色一级片| 久久夜夜操| 最新在线视频| 日本一区视频在线观看| 一级毛片一片毛| 国产在播放一区| 伊人一区二区三区| 色婷婷色99国产综合精品| 女人张开腿 让男人桶个爽 免费观看 | 夜间视频在线观看| 成人看的一级毛片| 亚洲精品久久久久久久蜜桃| 手机看片国产高清| 特黄特色大片免费视频大全| 久久天天躁夜夜躁狠狠| 美国bj69video18| 在线种子搜索| 一级特黄色毛片免费看| 四虎国产在线观看| 久久人视频| 午夜影院一区二区三区| 在线视频久久| 奇米影视久久| 在线精品国产第一页| 诱人的老师bd高清日本在线观看| 色视频在线播放| 国产精品激情综合久久| 天堂网中文| ccav在线永久免费看| 午夜日韩在线| 国内精品久久久久影院薰衣草| 天堂网最新版www中文| 一区二区三区在线观看免费|