日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

看圖聊算法:為什么排序算法還是不夠快?

來源: 責編: 時間:2024-02-01 12:50:50 262觀看
導讀排序是一種組織數據的方式,目的是確保數據元素之間的相對順序正確。當我們提到比較排序,意味著我們通過兩兩比較來確定元素之間的順序。理論上,一個最優的比較排序算法應該在每次比較后盡量減少剩余的可能性。為了理解這

排序是一種組織數據的方式,目的是確保數據元素之間的相對順序正確。當我們提到比較排序,意味著我們通過兩兩比較來確定元素之間的順序。c5d28資訊網——每日最新資訊28at.com

理論上,一個最優的比較排序算法應該在每次比較后盡量減少剩余的可能性。c5d28資訊網——每日最新資訊28at.com

為了理解這點,考慮一個 N 個元素的所有 N! 種排列方式。在最優的方法中,每次比較都能使剩下的可能性減半,從 N!/2,N!/4,N!/8,...,N!/(2^k),……,1。c5d28資訊網——每日最新資訊28at.com

所以,對于 N 個元素的序列,為了確定一個特定的排列,最下限的情況下,我們需要進行 log(N!) 次比較。這是因為當 2^k = N! 時,k = log(N!)。c5d28資訊網——每日最新資訊28at.com

c5d28資訊網——每日最新資訊28at.com

三個元素 a,b,c 序列的排序c5d28資訊網——每日最新資訊28at.com

但為什么現有的排序算法還不能達到這種理想狀態呢?c5d28資訊網——每日最新資訊28at.com

為什么堆排序(HEAPSORT)不夠快

首先,讓我們回顧一下堆排序的實現:c5d28資訊網——每日最新資訊28at.com

  1. 建立最大堆: 將任意數組轉化為最大堆。
  2. 找到最大元素并交換: 最大的元素始終位于數組的第一個位置,將數組的第一個元素與最后一個元素交換。
  3. 重建最大堆: 排除最后一個元素,并在剩余的元素中重新構建最大堆。
  4. 重復上述過程: 繼續交換、排除和重建。

詳情可以閱讀之前的文章:堆排序的原理與實現。c5d28資訊網——每日最新資訊28at.com

問題出在第二步,根據最大堆的定義,底部元素較小。堆排序將較小的元素從堆的底部提升到頂部,然后再讓它們逐漸下沉,與較大的元素交換位置。c5d28資訊網——每日最新資訊28at.com

動圖 重建最大堆示意圖動圖 重建最大堆示意圖c5d28資訊網——每日最新資訊28at.com

你可以在我的 github 倉庫中查看堆排序源代碼:c5d28資訊網——每日最新資訊28at.com

https://github.com/dingtingli/algorithm/blob/main/Code/heapsort01.pyc5d28資訊網——每日最新資訊28at.com

這種操作在堆排序中似乎違反了直覺:為什么要將底部可能較小的元素提升到更高的位置,然后觀察其下沉的過程?c5d28資訊網——每日最新資訊28at.com

當底部元素被提升為父節點時,它幾乎總是小于其中一個子節點,而大于另一個子節點的機會相對較少。因此,重建最大堆時進行的比較具有不均等的概率。這種概率不均等的比較是低效的,因為它不能保證每次比較都能將可能性減半。c5d28資訊網——每日最新資訊28at.com

這種操作效率的問題是堆排序速度較慢的主要原因。c5d28資訊網——每日最新資訊28at.com

然而,我們可以嘗試以下優化方法:c5d28資訊網——每日最新資訊28at.com

優化方法的思想,就好比一個公司的老板離職需要被組織中最優秀的人替代,我們顯然需要比較兩位副總裁;問題是,我們是否期望這將是一場勢均力敵的競爭?c5d28資訊網——每日最新資訊28at.com

在沒有先驗信息的情況下,我們沒有充分的理由押注任何一位副總裁。情況中只有一種不對稱性:這兩個部門的總人數可能不等。副總裁"A"可能是比"副總裁"B"稍多的人中的佼佼者;一個大部門的最優秀者更有可能擊敗一個小部門的最優秀者。c5d28資訊網——每日最新資訊28at.com

優化后的 HEAPSORT:c5d28資訊網——每日最新資訊28at.com

  1. 將所有元素放入有效的最大堆中
  2. 刪除堆頂,創建一個空缺 "V"
  3. 比較 V 正下方的兩個子堆首領,將最大的那個提升到空缺中。
  4. 遞歸重復第 3 步,重新定義 V 為新的空缺,直到堆的底部。
  5. 轉到步驟 2

你可以在我的 github 倉庫中查看快速堆排序源代碼:c5d28資訊網——每日最新資訊28at.com

https://github.com/dingtingli/algorithm/blob/main/Code/heapsort03.pyc5d28資訊網——每日最新資訊28at.com

這種方法的優勢在于,我們實際上是將一個已知較大的元素提升至堆頂,無需額外的比較操作。此時,兩種比較結果的概率是均等的。我們將這種優化版本稱為 "快速堆排序"(FAST HEAPSORT)。c5d28資訊網——每日最新資訊28at.com

經過優化后的 "快速堆排序"很有可能是最接近理論極限的排序算法。c5d28資訊網——每日最新資訊28at.com

快速堆排序快速堆排序c5d28資訊網——每日最新資訊28at.com

橫坐標:要排序的項目數 N。縱坐標:二分比較次數。c5d28資訊網——每日最新資訊28at.com

理論曲線顯示了快速堆排序的漸近結果(2NlnN)和極限 log_2 N! 近似。c5d28資訊網——每日最新資訊28at.com

為什么快速排序(QUICKSORT)不夠快

快速排序的核心分為兩個過程:c5d28資訊網——每日最新資訊28at.com

  1. 選擇數組中的一個元素為支點(pivot),將小于等于支點的元素移到左側,將大于支點的元素移動到右側。這一步稱為劃分(partition)。
  2. 通過遞歸對左右兩側的子數組繼續劃分,直到數組排序完成。

劃分遞歸執行劃分遞歸執行c5d28資訊網——每日最新資訊28at.com

詳情可以閱讀之前的文章:快速排序的原理與實現。c5d28資訊網——每日最新資訊28at.com

為了進一步說明,假設有一個由三個元素組成的序列:pivot, a1 和 a2。c5d28資訊網——每日最新資訊28at.com

在快速排序的劃分階段,首先,我們會將 a1 與 pivot 進行比較。顯然,(a1 < pivot) 和 (a1 > pivot) 可能性各占一半,這使得第一次比較達到了理想的效果。c5d28資訊網——每日最新資訊28at.com

然而,第二次的比較并不像第一次那樣完美。c5d28資訊網——每日最新資訊28at.com

假設第一次比較已經確定 (a1 < pivot) ,此時我們需要進一步判斷 a2 與 pivot 之間的關系。c5d28資訊網——每日最新資訊28at.com

考慮所有的組合可能性:基于 a1、a2 和 pivot 的相對順序,總共存在 3! 即 6 種可能的排列:c5d28資訊網——每日最新資訊28at.com

  1. (a1 < a2 < pivot)
  2. (a1 < pivot < a2)
  3. (a2 < a1 < pivot)
  4. (a2 < pivot < a1)
  5. (pivot < a1 < a2)
  6. (pivot < a2 < a1)

由于已知 (a1 < pivot),第 4、第 5 和第 6 種情況可以直接排除,這使得我們只考慮:c5d28資訊網——每日最新資訊28at.com

  1. (a1 < a2 < pivot)
  2. (a1 < pivot < a2)
  3. (a2 < a1 < pivot)

在這三種情況中,(a2 < pivot) 的可能性有 2 種,而 (a2 > pivot) 的情況僅有 1 種。c5d28資訊網——每日最新資訊28at.com

所以 (a2 < pivot) 的概率是 2/3,而 (a2 > pivot) 的概率是 1/3。c5d28資訊網——每日最新資訊28at.com

這就是快排也不那么快的原因,因為它并不總能確保每次比較都將可能性減半。c5d28資訊網——每日最新資訊28at.com

為什么基數排序(RADIXSORT)很快

基數排序之所以高效,是因為它脫離了傳統比較排序的框架,不再通過兩兩元素的比較來決定排序順序。c5d28資訊網——每日最新資訊28at.com

想象一下這樣一個任務:整理一副撲克牌中同一花色的牌。假設手中有 N(N≤13)張牌,要如何迅速地給它們排好序呢?可以想象桌上已經預留出了 13 個特定的位置,每張牌會根據其點數被精準地放在對應位置。c5d28資訊網——每日最新資訊28at.com

比如,2 點的牌會放在第二個位置,而 Q 則被放置在第 12 個位置。所有牌放好后,按照位置順序收集,你就得到了有序的撲克牌。c5d28資訊網——每日最新資訊28at.com

這個例子揭示了基數排序的核心效率。每張新牌的放置位置實際上是在前 i 張牌所定義的 i+1 個區間中選擇的。c5d28資訊網——每日最新資訊28at.com

例如,如果我們已經放置了 2,5,8 這三張牌,那么我們就有四個區間來放置下一張牌:2 之前、2 和 5 之間、 5 和 8 之間,以及 8 之后。c5d28資訊網——每日最新資訊28at.com

當你放置第 i+1 張牌時,你實際上是在這些 i+1 個區間中選擇一個位置放置它。一旦選擇了一個區間放置新牌,其他的 i 個區間都被排除了。c5d28資訊網——每日最新資訊28at.com

因此,每放置一張新牌,你都減少了大約 i/i+1 的排序可能性。而基于比較的排序方法,每次操作最多只能減少排序可能性的一半。c5d28資訊網——每日最新資訊28at.com

比較排序的本質就像我們之前介紹的二分法游戲,然而除了二分法,我們還介紹了三分法游戲。基數排序更進一步,本質就像是 N 分法。c5d28資訊網——每日最新資訊28at.com

看圖聊算法:一個游戲讓你理解二分法的本質c5d28資訊網——每日最新資訊28at.com

看圖聊算法:還是一個游戲,讓你理解三分法的本質c5d28資訊網——每日最新資訊28at.com

這就是基數排序之所以高效的原因,它擺脫了比較的排序算法復雜度上限只能是 O(NlogN) 的命運。c5d28資訊網——每日最新資訊28at.com

然而,基數排序有其局限性。比如需要知道數據的范圍或寬度,而且主要適用于整數和字符串。對于浮點數和復數,基數排序也不太合適。c5d28資訊網——每日最新資訊28at.com

結論

在算法中,我們通常使用大O記號來描述復雜度。但這種表示并非完美無缺。當我們使用"O"符號強調“對于大N的漸進性能”,這似乎暗示我們對 O(4NlogN) 和 O(1NlogN) 兩種算法之間的差異不甚關心。c5d28資訊網——每日最新資訊28at.com

然而,這種常數因子的差異仍然是眾多研究者追求和努力的焦點。即使排序算法的時間復雜度已達到理論上的界限 O(NlogN),其演進仍在繼續。c5d28資訊網——每日最新資訊28at.com

參考資料:c5d28資訊網——每日最新資訊28at.com

[1] http://www.inference.org.uk/mackay/sorting/sorting.htmlc5d28資訊網——每日最新資訊28at.com

[2] http://mindhacks.cn/2008/06/13/why-is-quicksort-so-quickc5d28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-70444-0.html看圖聊算法:為什么排序算法還是不夠快?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 十個人見人愛的Intellij IDEA主題

下一篇: 近期,幾個典型 Elasticsearch 8.X 問題及方案探討

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
欧美韩日一区二区| 欧美精品粉嫩高潮一区二区 | 亚洲国产成人在线| 亚洲黄一区二区| 一道本一区二区| 欧美一区二区免费| 欧美aa在线视频| 国产精品国产成人国产三级| 国产日韩欧美高清| 亚洲国产精品第一区二区| 一区二区三区精品久久久| 久久狠狠久久综合桃花| 欧美激情中文不卡| 国产精品自拍网站| 亚洲国产一区二区a毛片| 亚洲视频精品在线| 久久久噜噜噜久久中文字免| 欧美日本不卡| 国产一区二区三区不卡在线观看| 亚洲片在线观看| 性欧美大战久久久久久久久| 欧美1区免费| 国产精品一区一区| 亚洲日本va午夜在线电影| 亚洲欧美日本国产有色| 欧美暴力喷水在线| 国产欧美一区二区三区沐欲 | 国产精品久在线观看| 欲香欲色天天天综合和网| 亚洲视频axxx| 免费观看欧美在线视频的网站| 欧美日韩专区| 亚洲高清av| 欧美影院在线播放| 欧美日韩在线一二三| 在线观看久久av| 小处雏高清一区二区三区| 欧美极品在线播放| 精品999久久久| 午夜精品网站| 欧美日韩综合在线| 91久久精品一区二区别| 久久久www成人免费精品| 欧美午夜宅男影院在线观看| 亚洲国产精品成人| 欧美一区影院| 国产精品99一区| 亚洲欧洲日韩女同| 久久婷婷成人综合色| 国产欧美精品日韩区二区麻豆天美| 一本高清dvd不卡在线观看| 免费人成网站在线观看欧美高清| 国产亚洲精品aa| 亚洲欧美日韩成人高清在线一区| 欧美人成网站| 最新日韩在线视频| 另类专区欧美制服同性| 国产一区久久久| 欧美一区二区精品| 国产精品毛片一区二区三区 | 欧美专区亚洲专区| 国产精品一区久久久| 亚洲图片自拍偷拍| 欧美日韩免费一区| 99re66热这里只有精品4| 免费不卡欧美自拍视频| 国内精品视频久久| 久久精品国产亚洲a| 国产一区二区三区四区五区美女| 亚洲综合视频一区| 国产精品久久久久久久久搜平片 | 欧美国产亚洲精品久久久8v| 亚洲二区在线视频| 蜜桃精品久久久久久久免费影院| 久久精品官网| 国产在线不卡视频| 久久久久高清| 国产午夜精品美女视频明星a级| 亚洲欧美文学| 国产精品综合久久久| 午夜精品亚洲| 国产午夜精品理论片a级探花| 亚洲欧美激情视频| 国产欧美日本一区二区三区| 欧美一区二区三区免费视频| 国产日韩在线亚洲字幕中文| 久久福利视频导航| 在线播放亚洲| 欧美激情国产日韩精品一区18| 亚洲精品少妇网址| 欧美日韩国产一区二区三区地区| 99精品国产热久久91蜜凸| 欧美日韩午夜精品| 亚洲一区二区高清| 国产九九视频一区二区三区| 欧美与欧洲交xxxx免费观看| 精品99一区二区| 欧美黑人国产人伦爽爽爽| 亚洲毛片播放| 国产精品高清在线| 欧美在线在线| 亚洲国产视频一区| 欧美日韩在线视频首页| 亚洲欧美日韩天堂| 国产亚洲一区在线播放| 母乳一区在线观看| 一区二区三欧美| 国产日韩欧美自拍| 可以看av的网站久久看| 91久久精品国产91久久性色| 欧美色一级片| 欧美在线在线| 亚洲国产二区| 欧美四级在线| 久久黄色网页| 亚洲人成欧美中文字幕| 欧美视频在线不卡| 久久成人免费电影| 亚洲国产另类久久久精品极度| 欧美日韩另类丝袜其他| 欧美一区二区成人| 亚洲国产一区二区精品专区| 欧美日韩国产经典色站一区二区三区| 亚洲综合视频网| 在线日韩av| 国产精品成人在线观看| 久久九九热免费视频| 日韩一区二区精品在线观看| 国产日韩欧美不卡在线| 欧美国产日韩a欧美在线观看| 亚洲你懂的在线视频| 1024精品一区二区三区| 国产精品草草| 免费的成人av| 亚洲女同性videos| 亚洲第一精品福利| 国产精品jvid在线观看蜜臀| 久久久噜噜噜久久| 亚洲一区欧美| 亚洲国产精品嫩草影院| 国产欧美欧美| 欧美日韩国产亚洲一区| 久久免费高清视频| 亚洲欧美久久久| 亚洲精品久久久一区二区三区| 国产精品一二三四区| 欧美黑人国产人伦爽爽爽| 久久99在线观看| 一区二区三区视频观看| 影音先锋久久| 国产人成精品一区二区三| 欧美日韩国产电影| 久久亚洲综合| 欧美在线日韩在线| 9久草视频在线视频精品| 影视先锋久久| 国产日本欧美视频| 欧美视频国产精品| 免费视频最近日韩| 久久精品国产一区二区三| 亚洲色图在线视频| 亚洲精品乱码久久久久久蜜桃麻豆 | 亚洲激情网站| 国产亚洲欧美色| 国产精品免费视频xxxx| 欧美精品日韩| 免费久久99精品国产| 欧美在线视频一区二区三区| 中文在线一区| 亚洲精品久久久久久一区二区| 怡红院精品视频在线观看极品| 国产伦精品一区二区三区高清| 欧美人与性禽动交情品| 久色婷婷小香蕉久久| 久久精品国产77777蜜臀| 亚洲欧美另类中文字幕| 中文欧美在线视频| 亚洲日本一区二区三区| 136国产福利精品导航网址| 国内成人精品一区| 国产网站欧美日韩免费精品在线观看| 国产精品久久久久久久7电影| 欧美久久电影| 欧美国产一区二区| 欧美chengren| 久久亚裔精品欧美| 久久男女视频| 久久久久国产一区二区三区| 欧美专区日韩专区| 久久成人在线| 久久久精彩视频| 久久久久综合一区二区三区| 久久国产直播| 久久狠狠一本精品综合网| 欧美一区日韩一区| 欧美自拍丝袜亚洲| 欧美在线观看你懂的| 欧美在线|欧美| 久久精品亚洲乱码伦伦中文| 久久久久国产成人精品亚洲午夜| 久久久久久成人| 久热综合在线亚洲精品| 欧美不卡视频| 欧美伦理91i|