999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

多線程快速排序算法的設(shè)計(jì)與優(yōu)化

2022-06-23 01:08:46李添銳曹慶年孟開元
無線互聯(lián)科技 2022年7期
關(guān)鍵詞:排序優(yōu)化

李添銳,曹慶年,孟開元

(西安石油大學(xué) 計(jì)算機(jī)學(xué)院,陜西 西安 710065)

0 引言

排序問題不僅是計(jì)算機(jī)科學(xué)中非常重要且應(yīng)用廣泛的問題之一,而且在計(jì)算機(jī)圖形學(xué)、系統(tǒng)決策、搜索引擎等領(lǐng)域有著重要地位,并曾在2000 年被評為對工程和科學(xué)計(jì)算研究與實(shí)踐影響最大的十大問題之一[1-4]。有資料顯示,系統(tǒng)在處理排序問題上,中央處理器(Central Processing Unit,CPU)的時(shí)間占比很大,可達(dá)20%~60%[5]。在傳統(tǒng)的內(nèi)部排序算法中,由Hoare 提出的快速排序(Quick Sort)是一種效率相對較高的算法,但待排序列長度較長(大于106)時(shí),其時(shí)間成本依舊較高。因此十分有必要對快速排序算法進(jìn)行進(jìn)一步優(yōu)化。

線程(Thread)是操作系統(tǒng)能夠進(jìn)行運(yùn)算的最小單位。一個處理排序的進(jìn)程,若采用快速排序算法,其劃分的兩個子序列可分別由兩個并行執(zhí)行的線程完成。在劃分的子序列長度相同的情況下,時(shí)間消耗僅為串行執(zhí)行的50%。將多線程技術(shù)引入快速排序算法,可以大大提高排序效率。

1 快速排序以及傳統(tǒng)優(yōu)化方法

快速排序的主要步驟可以簡化如下:

雖然快速排序的效率是內(nèi)部排序算法中最快的,但在算法第4 行中,若劃分的“標(biāo)桿”選取不當(dāng),在極端情況下,每次劃分的兩個子序列長度都分別為0 和原長度減1,此時(shí)不僅時(shí)間復(fù)雜度高至O(n2),且極易引起棧溢出(Stack Overflow)導(dǎo)致排序失敗。同時(shí)對于大量重復(fù)元素的待排序列,無論怎樣選取“標(biāo)桿”,均無法避免上述問題。為了克服快速排序的缺點(diǎn),傳統(tǒng)的優(yōu)化方法如下。

1.1 標(biāo)桿選取

可以先將序列中的隨機(jī)某個元素與首元素交換,再將首元素作為標(biāo)桿。此種方法被稱為“隨機(jī)標(biāo)桿”法,但會因?yàn)樯呻S機(jī)數(shù)而增加額外的開銷。“三數(shù)取中”法可以避免此問題,其基本思想是先將序列的中間元素、首元素和末元素進(jìn)行升序排序,再將首元素作為標(biāo)桿。但以上兩種方法都無法解決大量重復(fù)元素序列的問題。

1.2 三軸排序

在每次序列劃分之后,從“標(biāo)桿”出發(fā),將兩個子序列中和“標(biāo)桿”相等的元素均交換到“標(biāo)桿”的左右兩邊,最終將原序列劃分成3 部分。通過采取適當(dāng)?shù)慕粨Q方法,排序整體的復(fù)雜度不會改變,同時(shí)減少了左右子序列的長度。此種算法極大地改進(jìn)了大量重復(fù)元素的序列。

1.3 引入插排

當(dāng)待排序列較短時(shí),采用分治遞歸操作所需的開銷已經(jīng)大于簡單排序的開銷,故引入插入排序處理較短的子序列。此方法的難點(diǎn)在于最小分段閾值k的選取,k為經(jīng)驗(yàn)值,由系統(tǒng)的遞歸開銷等因素決定。在Java 中,此k值取為32 效果最佳[6]。在C++的內(nèi)置sort()函數(shù)中,k值為16,一般情況下5~25 均可。

2 多線程優(yōu)化方法

多核CPU 的出現(xiàn)使得多線程編程方法成為可能,同時(shí)也為許多傳統(tǒng)經(jīng)典算法進(jìn)一步優(yōu)化提供了新思路[7]。

2.1 子線程處理子序列

快速排序中的遞歸操作中,可以創(chuàng)建子線程處理其中1 個子序列。在多核CPU 系統(tǒng)中,線程會分配到不同的核心上并行執(zhí)行,于是處理子序列的時(shí)間可大大縮短。引入多線程編程處理后的算法如下:

由于線程創(chuàng)建需要時(shí)間,在遞歸操作時(shí)可選用較短子序列交由子線程處理。

2.2 根據(jù)最大線程數(shù)的改進(jìn)

上述算法適用于無限創(chuàng)建線程的理想化模型,而實(shí)際情況中線程數(shù)受限于CPU 核心數(shù),故須改進(jìn)。引入多線程編程的深度d這一額外參數(shù),d=0 時(shí)為傳統(tǒng)串行方法;d>0 時(shí),構(gòu)建新線程執(zhí)行子序列,同時(shí)d自減1。d的值由系統(tǒng)CPU 核心數(shù)N決定,通常d取■log2N」。

2.3 采用線程池

當(dāng)待排序列為隨機(jī)序列時(shí),一次快排劃分后的兩個子序列的長度不同。因此會出現(xiàn)先前創(chuàng)建的線程已經(jīng)運(yùn)行結(jié)束而釋放,后續(xù)的待排子序列無法創(chuàng)建新線程的現(xiàn)象。為此可以創(chuàng)建線程池,當(dāng)線程池飽和時(shí),采用傳統(tǒng)串行算法,這樣可以時(shí)刻充分利用CPU 的各個核心。

2.4 性能測試

性能測試采用傳統(tǒng)串行快速排序和多線程優(yōu)化快速排序兩種方式分別對8 000 000 個隨機(jī)數(shù)據(jù)進(jìn)行排序,并對其時(shí)間消耗進(jìn)行對比,從而得出多線程優(yōu)化方法的改進(jìn)幅度。

在Intel(R)Core(TM)i7-6700 CPU@3.40 GHz 4核8 線程CPU 的PC 上使用C++多線程編程實(shí)現(xiàn)2.1中的算法并進(jìn)行測試。通過多次測試取平均值,測試結(jié)果如表1 所示。

表1 優(yōu)化結(jié)果比較

由于測試主機(jī)為4 核主機(jī),故算法執(zhí)行中最多有4個CPU 核心同時(shí)工作。從測試結(jié)果可以看出,4 核心多線程優(yōu)化快速排序算法的所需時(shí)間僅為傳統(tǒng)串行快速排序算法的1/4。

3 優(yōu)化上限分析

顯然,當(dāng)待排序列為升序序列,即經(jīng)過“三數(shù)取中”法后為最好情況時(shí),采用多線程編程的優(yōu)化幅度達(dá)到最大。

3.1 時(shí)間復(fù)雜度分析

在最好的情況下,設(shè)長度為n的序列的劃分操作時(shí)間消耗為P(n),不難得出:

其中,c為執(zhí)行1 條指令所需時(shí)間,設(shè)單位為us。

不妨設(shè)n=2^(k+1)-1,k=0,1,2,…如此可保證每次劃分都是最優(yōu)劃分。

傳統(tǒng)串行快速排序的時(shí)間消耗為:

推導(dǎo)后得:

若當(dāng)前CPU 的核心為2,多線程深度d=1,設(shè)系統(tǒng)創(chuàng)建1 個子線程的所需時(shí)間為td,此時(shí)多線程優(yōu)化快速排序的時(shí)間消耗F1(n)為:

推導(dǎo)后得:

相對于傳統(tǒng)單線程快速排序,時(shí)間節(jié)省率H1(n)為:

類似地,可以由數(shù)學(xué)歸納法得到d=k時(shí)的時(shí)間消耗Fk(n)和時(shí)間節(jié)省率Hk(n)

通過公式(9)可以看出,時(shí)間節(jié)省率Hk(n)是線程深度d和待排序列長度n的函數(shù)。

在保證n?d的情況下,n和d越大,節(jié)省率越高。

3.2 理論驗(yàn)證

為驗(yàn)證3.1 中的公式正確性,采用2.2 中的算法C++來實(shí)現(xiàn),待排序列長度n取1 048 591,線程深度d分別取1,2,3,經(jīng)過測試,平均td=150 μs,c=1.5×10-3μs,待排序列取最優(yōu)序列。驗(yàn)證結(jié)果如表2 所示。

表2 理論驗(yàn)證結(jié)果

可以看出,實(shí)際運(yùn)行結(jié)果和理論分析極為接近,因此,3.1 的理論分析得到了驗(yàn)證。

4 結(jié)語

快速排序是所有內(nèi)部排序算法中平均性能最優(yōu)的算法,但其本身具有許多不足之處。本文在C++平臺中實(shí)現(xiàn)了對快速排序遞歸操作的進(jìn)一步優(yōu)化,通過建立子線程并發(fā)處理兩個子序列,使得排序速度得到了大幅提高。

通過對多線程快速排序的理論分析,本文提出了此方法在優(yōu)化程度上的理論上限。在實(shí)際應(yīng)用中,由于每次劃分的子序列長度不一,因此保證線程的利用率便成了多線程算法中的關(guān)鍵。

由于內(nèi)存和CPU 核心數(shù)量的限制,不宜做更大數(shù)據(jù)量和更多線程的測試。將來的實(shí)驗(yàn)中可以考慮其他環(huán)境,進(jìn)一步驗(yàn)證優(yōu)化理論,分析線程調(diào)度的開銷等其他因素,以確定更精確的參數(shù),進(jìn)一步優(yōu)化排序性能。

和CPU 相比,GPU 的并行計(jì)算能力更加強(qiáng)大,使用CPU 優(yōu)化也是對快速排序的一種優(yōu)化方式,在未來的實(shí)驗(yàn)中也可嘗試使用GPU 優(yōu)化并和CPU 算法做對比[8]。

猜你喜歡
排序優(yōu)化
排排序
超限高層建筑結(jié)構(gòu)設(shè)計(jì)與優(yōu)化思考
排序不等式
民用建筑防煙排煙設(shè)計(jì)優(yōu)化探討
關(guān)于優(yōu)化消防安全告知承諾的一些思考
一道優(yōu)化題的幾何解法
由“形”啟“數(shù)”優(yōu)化運(yùn)算——以2021年解析幾何高考題為例
恐怖排序
節(jié)日排序
刻舟求劍
兒童繪本(2018年5期)2018-04-12 16:45:32
主站蜘蛛池模板: 91精品最新国内在线播放| 最新精品国偷自产在线| 她的性爱视频| 亚洲av无码专区久久蜜芽| 日韩精品专区免费无码aⅴ| 久久黄色一级视频| 免费毛片全部不收费的| 国产拍揄自揄精品视频网站| 国产综合日韩另类一区二区| 老司国产精品视频| 国内精品久久久久久久久久影视 | 国产免费网址| 国产国拍精品视频免费看| 人妻21p大胆| 99精品国产电影| 亚洲欧洲日本在线| 婷婷六月综合网| 在线无码九区| 亚洲制服中文字幕一区二区| 成人精品区| 青青青草国产| 国产成人亚洲精品蜜芽影院| 国产综合在线观看视频| 毛片一级在线| 内射人妻无码色AV天堂| 久996视频精品免费观看| 精品第一国产综合精品Aⅴ| 亚洲日韩Av中文字幕无码| 自偷自拍三级全三级视频| 国产va视频| 亚洲人成网站色7799在线播放| 国产精品亚洲va在线观看| 亚洲熟女中文字幕男人总站| 九九热精品在线视频| 18禁色诱爆乳网站| 亚洲精品天堂自在久久77| 国产香蕉一区二区在线网站| 毛片在线播放a| 精品黑人一区二区三区| 成年av福利永久免费观看| 国产不卡在线看| 在线免费不卡视频| 久久亚洲高清国产| 国产欧美日韩va另类在线播放| 九色在线观看视频| 综合久久五月天| 国产精品私拍99pans大尺度| 中国特黄美女一级视频| 99视频在线观看免费| 色综合久久无码网| 国产高清无码麻豆精品| 国产不卡国语在线| 国产在线视频导航| 国产后式a一视频| 2021精品国产自在现线看| 国产本道久久一区二区三区| 伊人激情综合| 日本在线国产| h网站在线播放| 香蕉eeww99国产在线观看| 亚洲精品视频网| 午夜小视频在线| 国产亚洲视频在线观看| 亚洲人成网站色7799在线播放| 伊人久久综在合线亚洲91| 亚洲欧美激情小说另类| 国产情侣一区二区三区| 国产午夜在线观看视频| 亚洲综合中文字幕国产精品欧美| 国产美女主播一级成人毛片| 国内精品久久久久久久久久影视| 免费看的一级毛片| 国产精品真实对白精彩久久| 永久在线精品免费视频观看| 激情国产精品一区| 久久亚洲国产最新网站| 欧美一级黄色影院| 国产成+人+综合+亚洲欧美| 99国产精品一区二区| 91精品视频网站| 欧美日韩一区二区三| 国产国产人在线成免费视频狼人色|