国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

我是如何擊敗Java自帶排序算法的

開發 后端 開發工具 算法
Java 8 對自帶的排序算法進行了很好的優化。對于整形和其他的基本類型, Arrays.sort() 綜合利用了雙樞軸快速排序、歸并排序和啟發式插入排序。這個算法是很強大的,可以在很多情況下通用。針對大規模的數組還支持更多變種。我拿自己倉促寫的排 序算法跟Java自帶的算法進行了對比,看看能不能一較高下。這些實驗包含了對特殊情況的處理。

Java 8 對自帶的排序算法進行了很好的優化。對于整形和其他的基本類型, Arrays.sort() 綜合利用了雙樞軸快速排序、歸并排序和啟發式插入排序。這個算法是很強大的,可以在很多情況下通用。針對大規模的數組還支持更多變種。我拿自己倉促寫的排 序算法跟Java自帶的算法進行了對比,看看能不能一較高下。這些實驗包含了對特殊情況的處理。

首先,我編寫了一個經典的快速排序算法。這個算法通過計算樣本的平均值來估計整個數組的中心點,然后用作初始樞軸。

我借鑒了一些Java的思路來適當改進我的快速排序,修改后的算法在對小數組進行排序的時候直接調用了插入排序。在這種情況下,我的排序算法和Java的排序算法可以達到相同的運行時間量級。Wild & al 指出,如果排序數組有很多的重復數據,標準的快速排序會比雙樞軸的快速排序要快。我沒有嘗試任何字節或匯編級別的分析和優化。在大部分的問題中,我的版本的優化程序都遠遠不能跟Java系統程序相提并論。

我一直都想測試腦海里的一個簡單的排序算法,我稱之為Bleedsort。這是一個分布式算法,它通過樣本抽樣方法對要排序的數組進行分布估計,根 據估計結果把數據分配到相應的一個臨時的數組里(如圖 1 所示),并重寫這個初始的數組。這是一個預處理過程,然后再應用其他的排序算法分別進行排序。在我的測試中,我使用了我編寫的快速排序版本。如果使用合并 排序應該會有更好的結果,因為合并排序被廣泛應用在高度結構化的數組中。為了計算簡單,我只測試了分布均勻的數據。

Bleedsort在遇到相同的數據的時候都會放到右邊,所以此算法在排序相對一致(譯者注:會有很多重復數據)的數組的時候表現很差。所以我需要對排序的數組進行樣本估計,當重復數很多的情況下應避免使用Bleedsort算法。

我很清楚,Bleedsort算法在內存空間使用方面沒辦法跟歸并排序(快速排序)相提并論,臨時數組也比原來的數組要大四倍左右。同時其他的一些分布排序算法,比如Flashsort,在這方面也表現得要好很多。

擊敗Java排序算法

圖1 Bleedsort舉例說明

我運用JMH來作為測試基準。 為了簡單起見,我就用整形數組進行測試。在1000.000 到10.000.0000 數量級的均勻分布的數組中,我的算法表現的最好。盡管我寫的快速排序算法在一定程度上比不過Java自帶的算法,但是我的預處理過程很好的彌補了這些不足 (調用了我的快速排序的Bleedsort 87ms vs Java 自帶算法105ms; 938ms vs 1.144s)

Benchmark Mode Cnt Score Error Units Corrected

MyBenchmark._1e6U sample 8512 0.024 ± 0.001 s/op

MyBenchmark._1e7U sample 985 0.236 ± 0.001 s/op

我生成了下面這些正確的基準數組

MyBench.int1e6UQuickSort sample 1641 0.131 ± 0.001 s/op 0.107 ± 0.002

MyBench.int1e6UBleedSort sample 2410 0.087 ± 0.001 s/op 0.063 ± 0.002

MyBench.int1e6UJavaSort sample 1978 0.105 ± 0.001 s/op 0.081 ± 0.002

MyBench.int1e7UQuickSort sample 200 1.483 ± 0.014 s/op 1.459 ± 0.015

MyBench.int1e7UBleedSort sample 373 0.938 ± 0.009 s/op 0.914 ± 0.010

MyBench.int1e7UJavaSort sample 200 1.144 ± 0.009 s/op 1.120 ± 0.010

所以,我的這個沒有特殊優化的算法程序在這些數據集上要比Java自帶算法快大概 10-15% 。

在1000.000數據級,包含 10% 或者 1% 的隨機重復數據的均勻增加數據集上,我的算法表現的也不差。

Benchmark Mode Cnt Score Error Units Corrected

._1e6Iwf010 sample 20705 9.701 ± 0.033 ms/op

._1e6Iwf001 sample 148693 1.344 ± 0.003 ms/op

生成正確的基準數組

.int1e6Iw010BleedSort sample 4159 49.377 ± 0.571 ms/op 39.68 ± 0.60

.int1e6Iw010JavaSort sample 3937 52.139 ± 0.229 ms/op 42.44 ± 0.25

.int1e6Iw010QuickSort sample 3899 52.457 ± 0.210 ms/op 42.76 ± 0.23

10% 重復數據

.int1e6Iw001BleedSort sample 6190 32.821 ± 0.219 ms/op 31.48 ± 0.22

.int1e6Iw001JavaSort sample 8113 24.910 ± 0.079 ms/op 23.57 ± 0.08

.int1e6Iw001QuickSort sample 8653 23.367 ± 0.056 ms/op 22.02 ± 0.06

^^ 1%

但是,這個算法在只有10.000左右的小二項分布的數據集 (~bin(100,0.5))(譯者加:考慮到括號里面是公式代碼,并沒有修改內部英文括號符號成中文符號)上表現的很差。 在這些數組中,平均下來,出現50這個數字的次數是795.5,而出現40組重復數組的次數是108.4。

同時,在排序1000.0000量級的大數組的時候,這個算法要比 Arrays.sort() 慢兩倍左右。這些數組都有很多的重復數據(比如有的大小為1e6的數組里只有450個不同的數值)。

Benchmark Mode Cnt Score Error Units Corrected

._1e4bin100 sample 152004 1.316 ± 0.001 ms/op

^^ for correction

.int1e4bin100BleedSort sample 148681 1.345 ± 0.001 ms/op 0.029 ± 0.002

.int1e4bin100JavaSort sample 150864 1.326 ± 0.001 ms/op 0.010 ± 0.002

.int1e4bin100QuickSort sample 146852 1.362 ± 0.001 ms/op 0.046 ± 0.002

.int1e6bin1e4BleedSort sample 75344 2.654 ± 0.005 ms/op -

.int1e6bin1e4JavaSort sample 146801 1.361 ± 0.002 ms/op -

.int1e6bin1e4QuickSort sample 76467 2.615 ± 0.005 ms/op -

在排序小型的(10.000, 100.000)均勻隨機數組下,這個算法表現尚可,但是并不比系統算法更好。

MyBench.int1e4UBleedSort sample 216492 0.924 ± 0.001 ms/op 0.683 ± 0.002

MyBench.int1e4UJavaSort sample 253489 0.789 ± 0.001 ms/op 0.548 ± 0.002

MyBench.int1e4UQuickSort sample 217394 0.920 ± 0.001 ms/op 0.679 ± 0.002

MyBench.int1e5UBleedSort sample 18752 0.011 ± 0.001 s/op 0.009 ± 0.002

MyBench.int1e5UJavaSort sample 22335 0.009 ± 0.001 s/op 0.007 ± 0.002

MyBench.int1e5UQuickSort sample 18748 0.011 ± 0.001 s/op 0.009 ± 0.002

總而言之,在內存不是很緊張的情況下,針對適當的大數據集,我會建議把分布搜索算法做為一個有效的補充選項。

最后,讓大家來認識一下二項分布的一些數據集 bin(100, 0.5) 和 bin(1000, 0.5),

這里是兩個隨機抽樣了100個數據的數據集(使用R語言生成)。

> rbinom(100, 100, 0.5)

[1] 43 49 51 47 49 59 40 46 46 51 50 49 49 45 50 51 50 49 53 52 45 53 48 56 45

[26] 47 55 47 53 53 56 41 47 42 51 51 46 49 49 52 46 48 49 50 48 56 54 49 53 52

[51] 54 48 45 45 50 48 54 49 52 50 48 48 49 45 54 54 50 41 53 45 51 48 53 52 52

[76] 50 53 47 55 47 60 54 52 56 45 46 54 46 38 43 53 45 62 48 52 52 52 49 52 56

> rbinom(100, 1000, 0.5)

[1] 515 481 523 519 524 516 498 473 523 514 483 496 458 506 507 491 514 489

[19] 475 489 485 507 486 523 521 492 502 500 503 501 504 482 518 506 498 525

[37] 498 491 492 479 506 499 505 497 510 479 504 510 485 488 495 519 522 490

[55] 517 511 511 488 519 508 475 521 505 493 480 498 490 492 492 476 490 506

[73] 496 505 521 518 506 509 477 483 509 493 497 501 483 502 470 515 519 509

[91] 510 496 477 508 506 481 490 511 498 476

 

責任編輯:王雪燕 來源: ImportNew
相關推薦

2023-03-21 17:06:24

樹莓派路由器

2015-08-10 14:56:31

Google

2016-05-18 10:04:17

技術面試

2021-01-15 05:19:08

wireshark軟件網絡

2021-08-07 07:23:08

Webpack中間件模型

2016-11-21 15:08:38

Leader工程師團隊管理

2020-07-28 10:05:51

互聯網FacebookTikTok

2015-01-28 13:10:55

2011-04-20 15:06:44

堆排序

2011-04-20 15:20:03

快速排序

2011-04-20 14:19:00

希爾排序

2011-04-20 14:07:37

冒泡排序

2011-04-20 13:56:08

選擇排序

2019-01-21 15:17:59

Java微軟JCP

2015-03-23 09:33:43

Java抽象類Java接口Java

2010-03-02 10:13:56

程序員面試

2009-08-27 10:20:14

思科認證CCNA準備

2018-05-23 09:11:42

微信Android開發面試

2025-08-21 15:51:49

2020-10-14 10:29:58

人工智能
點贊
收藏

51CTO技術棧公眾號

亚洲视频小说图片| 国产精品一二三在线观看| 成人激情动漫在线观看| 色欧美乱欧美15图片| 精品中文字幕在线2019| 国产成人高潮免费观看精品| 国产av国片精品| 51vv免费精品视频一区二区| 欧美国产亚洲另类动漫| 国产精品日韩在线播放| 天堂久久午夜av| 婷婷成人激情在线网| 手机看片福利永久国产日韩| 狠狠久久伊人中文字幕| 国产亚洲一二三区| 久久视频中文字幕| 欧美精品与人动性物交免费看| 色琪琪免费视频网站| 久久99精品久久久野外观看| 国产精品综合一区二区三区| 中文字幕欧美视频在线| 国内外成人激情视频| 91蝌蚪精品视频| 一区免费观看视频| 91成人免费观看网站| 国产免费av在线| 欧美一区二区三区久久精品| 成人av电影在线观看| 国产精品自拍网| 超碰一区二区| 亚洲精品国产一区二区精华液| 精品蜜桃传媒| 日韩精品中文字幕吗一区二区| 色综合久久久网| 欧美一级中文字幕| 精品视频免费| 一区二区三区视频免费在线观看 | 欧美影院一区| 欧美疯狂做受xxxx富婆| 日本欧美在线观看| 99re热在线观看| 秋霞成人午夜伦在线观看| 日本888xxxx| 大片网站久久| 欧美日韩成人网| 亚洲欧美日韩另类| 免费在线小视频| 99久久夜色精品国产网站| 日韩在线a电影| 中文一区二区在线观看 | 国产电影一区| 欧美午夜性色大片在线观看| 岛国av一区二区在线在线观看| 97久久伊人激情网| 亚洲第一区中文99精品| 亚洲一区二区av| 99国产精品视频免费观看| 日韩电影一区| 一本到三区不卡视频| 成人综合av网| 丁香花在线高清完整版视频| 日韩一级大片| 欧美日韩免费在线观看| 国产精品亚洲视频在线观看| 波多野结衣家庭教师视频| av今日在线| 国产高清不卡一区| 日韩美女av在线| 在线观看成人一级片| 国产精品伦一区二区| 久久精品国产秦先生| 欧美精品乱码久久久久久按摩| 国产区精品视频| siro系绝美精品系列| 亚洲精品国产setv| 亚洲欧美日韩一区| 久久九九免费视频| 亚洲一区二区三区欧美| 欧美少妇网站| 国产日韩欧美一区二区三区| 午夜影视日本亚洲欧洲精品| 91最新国产视频| 成人av免费| 韩国理伦片一区二区三区在线播放 | 精品国产日韩欧美| 精品久久久久久久久久久久久久久| 在线欧美一区| 色吧影院999| 极品视频在线| 色综合久久久久综合体| 超碰成人福利网| 国产成人精品免费一区二区| 久草精品电影| 色男人天堂综合再现| 久久免费成人精品视频| 日韩欧美看国产| 亚洲电影免费观看| 国产精品久久一区二区三区不卡| 国产亚洲欧美日韩在线一区| www.夜夜爱| 国产成人a级片| 欧美视频在线第一页| 精久久久久久久久久久| 国产在线观看一区二区三区| 亚洲欧洲av| 国产精品久久久久久久久借妻| 国产精品美女久久久久人| 一区二区欧美在线| 国产黄a三级三级三级av在线看| 亚洲欧美色图小说| 日本成人免费| 国产精品区一区二区三| 国产综合av在线| 成人精品免费视频| 又粗又黑又大的吊av| 不卡高清视频专区| 久草热视频在线观看| 久久久久久久久久看片| 一区二区成人网| 亚洲精品老司机| 欧美日韩伦理片| 欧美日韩综合不卡| 在线观看av免费| 亚洲国产成人精品女人久久久| √天堂8资源中文在线| 亚洲激情第一页| 热久久久久久| 3344国产精品免费看| 欧美熟乱15p| 久久国产精品免费一区| 国产精品啊v在线| 狠狠色综合色区| 久久精品国产在热久久| 国产在线播放观看| 99精品黄色片免费大全| 全部a∨一极品视觉盛宴| 色哟哟一区二区在线观看| 啦啦啦中文在线观看日本| 欧美一级高清大全免费观看| 国产精品原创| 韩日欧美一区二区| 亚洲视频狠狠| 免费在线观看亚洲视频| 精品国产91久久久久久| 日韩精品卡一| 欧美人与物videos| 一本一道久久综合狠狠老| 亚洲一区二区高清视频| 国产日韩成人精品| 阿v免费在线观看| 国产亚洲成av人片在线观看桃| 成人偷拍自拍| 日韩精品成人一区二区在线观看| 99久久婷婷国产| 国产精品一区二区三区四区色| 亚洲精品乱码久久久久久按摩观| 精品伊人久久久| 日韩精品资源| 亚洲美腿欧美偷拍| 黄页网站在线观看免费| 97色在线视频观看| 毛片av一区二区| 首播影院在线观看免费观看电视| 亚洲国产精品久久精品怡红院| 色婷婷久久久| www.日本在线视频| 在线综合视频播放| 免费毛片在线不卡| 国产一区二区视频播放| 欧美猛男男办公室激情| 伊人久久大香线蕉综合网站| 大陆av在线播放| 在线免费观看一区| 91成人午夜| 欧美一级爱爱视频| 日韩欧美一区二区在线视频| 狠狠色狠狠色综合婷婷tag| 天天想你在线观看完整版电影免费| 亚洲激情欧美激情| 国产精品诱惑| 欧美一区二区三区四区夜夜大片| 亚洲一区日韩精品中文字幕| 欧美一区一区| 在线精品亚洲一区二区| 欧美一二三四区在线| 91精品国产视频| 成人综合av| 国精产品一区一区三区有限在线| 极品美女销魂一区二区三区 | 免费av片风间由美在线| ...av二区三区久久精品| 清纯唯美亚洲综合一区| 成人影院免费观看| 亚洲欧洲国产日韩精品| 日韩毛片中文字幕| 亚洲精品免费一二三区| 欧美午夜电影在线观看 | 亚洲成人动漫av| 九九久久99| 最新成人av网站|