在线观看av毛片亚洲_伊人久久大香线蕉成人综合网_一级片黄色视频播放_日韩免费86av网址_亚洲av理论在线电影网_一区二区国产免费高清在线观看视频_亚洲国产精品久久99人人更爽_精品少妇人妻久久免费

計(jì)數(shù)查找算法

前言:本站為你精心整理了計(jì)數(shù)查找算法范文,希望能為你的創(chuàng)作提供參考價(jià)值,我們的客服老師可以幫助你提供個(gè)性化的參考范文,歡迎咨詢。

摘要查找第K大的元素的問(wèn)題在計(jì)算機(jī)查找計(jì)數(shù)中占有很重要的地位。若直接進(jìn)行排序,則算法平均時(shí)間復(fù)雜度為O(N*Lg(N))。但是比較好的策略有求第K大的元素的經(jīng)典算法——基于分治思想的Divide-Select[1][6],算法的時(shí)間復(fù)雜度為O(6.09*N)[5]。由于基于比較的排序算法在最壞的情況之下,都需要進(jìn)行N*Lg(N)次比較[3],故本文提出了一種基于非比較算法的無(wú)符號(hào)整數(shù)查找算法——Count-Search(計(jì)數(shù)查找算法)。該算法應(yīng)用于無(wú)符號(hào)整數(shù)的查找,算法的平均時(shí)間復(fù)雜度為O(2*N)。

關(guān)鍵字非比較;查找;排序;時(shí)間復(fù)雜度;計(jì)數(shù);整數(shù)

1算法的基本思想

通常的排序算法在空間和時(shí)間復(fù)雜度一定的情況下的時(shí)間開(kāi)銷主要是關(guān)鍵字之間的比較和記錄的移動(dòng)。基于計(jì)數(shù)排序的查找算法(Count-Search)的實(shí)現(xiàn)在整個(gè)過(guò)程無(wú)需進(jìn)行數(shù)據(jù)的比較,算法的時(shí)間復(fù)雜度為O(2*N)。該算法的基本原理是:

根據(jù)無(wú)符號(hào)整數(shù)的大小可以和數(shù)組元素的下標(biāo)對(duì)應(yīng)的原則,在程序中可以用整數(shù)數(shù)組來(lái)儲(chǔ)存元素的大小關(guān)系。對(duì)于一個(gè)大小為N的整型數(shù)組a[],對(duì)于每一個(gè)元素x,用數(shù)組中的元素a[x]記錄下小于等于它的元素個(gè)數(shù),當(dāng)要找的是集合中第K個(gè)大的元素時(shí),則只需找到該數(shù)組中第N-K+1小的元素。即只需要找到該數(shù)組中第一個(gè)大于或等于N-K+1的元素,該元素的下標(biāo)即為第K大的數(shù)。

該算法具體可以描述為:假設(shè)n個(gè)輸入元素的每一個(gè)都是介于0到M之間的整數(shù),此處M為某個(gè)無(wú)符號(hào)整數(shù)。

(1)對(duì)于每一個(gè)輸入的元素X,首先確定出等于X的元素個(gè)數(shù)。

(2)對(duì)于每一個(gè)元素X,確定小于等于X的元素個(gè)數(shù)。

(3)從數(shù)組首地址出發(fā)順序查找到第一個(gè)小于等于K的元素,則該元素X即為所要查找的第K小的數(shù),順序查找到第一個(gè)小于等于N-K+1的元素,則該元素X即為所要查找的第K大的數(shù)。

2計(jì)數(shù)查找算法的C語(yǔ)言實(shí)現(xiàn)(Count—Search)

2.1數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)與程序

假定輸入的數(shù)組為整型數(shù)組A[1..N],length[A]=N,數(shù)組中元素最大值為M,數(shù)組C[]記錄整數(shù)元素的大小關(guān)系。

Count-Search(int*A,intK)

memest(C,0)//C[0..M]==0初始化C[]

forj=1tolength[A]

doC[A[j]]=C[A[j]]+1

//C[i]包含等于i的元素個(gè)數(shù)

fori=1toM

begin

doC[i]=C[i]+C[i-1]//C[i]包含小于等于i的元素個(gè)數(shù)

if(C[i]>=N-K+1)break;//尋找到第N-K+1的元素,即為第K大的元素

end

2.2算法步驟分析

第一步:第一行的初始化操作之后,在2-3行檢查每一個(gè)輸入元素。如果一個(gè)輸入元素的值為i,即C[i]的值加1。于是在第3行之后,C[i]中存放了等于i的元素個(gè)數(shù)(整數(shù)i=0,1,…M)。

第二步:在第4-8之后,C[i]存放了小于等于i的元素的個(gè)數(shù)。最后從數(shù)組C的首地址出發(fā)順序查找第一個(gè)使得C[i]>=N-K+1的元素,則第K大的元素即為i。

下圖給出了Count-Search的運(yùn)算過(guò)程:圖1表示初始數(shù)組A,C。圖2表示運(yùn)行完程序2-3行,數(shù)組C中的元素C[i]存放的是數(shù)組A中等于i的元素個(gè)數(shù)。圖3表示運(yùn)行4-8行的結(jié)果,C中元素C[i]存放的是數(shù)組A中小于等于i的元素個(gè)數(shù)。例如查找該數(shù)組第3大的數(shù),則由于C[2]=4>=3,故元素2即為所要查找的第3大的數(shù)。

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

程序2-3行時(shí)間復(fù)雜度為O(N),第4-8行時(shí)間復(fù)雜度為O(M),該算法的時(shí)間復(fù)雜度為T(mén)(n)=O(N+M)。如果數(shù)組A[]的最大值M與N成線形關(guān)系,即M=O(n),則其時(shí)間復(fù)雜度為T(mén)(n)=O(2N)。

3Count-Search算法與Divide-Select算法的比較

Divide-Select的基本思想是:通過(guò)在線性的時(shí)間內(nèi)找到一個(gè)劃分基準(zhǔn),使得按這個(gè)基準(zhǔn)所劃分出的兩個(gè)子數(shù)組的長(zhǎng)度都至少為原數(shù)組的ξ倍(0<ξ<1是某個(gè)正常數(shù)),然后對(duì)子數(shù)組遞歸的調(diào)用Divide-Select算法,這樣就可以在線性的時(shí)間內(nèi)完成查找任務(wù)。[6]

該算法得時(shí)間復(fù)雜度為O(6.09*N)[5],與Count-Search算法相比較可知:Count-Search算法具有更好的時(shí)間復(fù)雜度。

4算法測(cè)試與比較

為了證實(shí)上述結(jié)論,在ACERTravelMate2420(PM730,512M內(nèi)存,80G硬盤(pán)),WindowsXP平臺(tái)上編寫(xiě)了三種查找算法的子程序,進(jìn)行了相應(yīng)的實(shí)驗(yàn)測(cè)定,其結(jié)果如表1所示。(實(shí)驗(yàn)數(shù)據(jù)全部采用均分布的無(wú)符號(hào)整型隨機(jī)數(shù))

表1

數(shù)據(jù)規(guī)模2*10^58*10^510^62*10^68*10^610^78*10^7

快速排序的查找(qsort)632192655792203276662437

Divide-Select311091403291157134711732

Count-Search151631311872031344

注:以上時(shí)間單位為毫秒MS。

根據(jù)以上數(shù)據(jù)我們可以繪制出數(shù)據(jù)規(guī)模和時(shí)間的函數(shù)圖像。

觀察分析以上實(shí)驗(yàn)結(jié)果,可以看出:基于快速排序的查找算法和其他算法相比較具有較差的效率;而采用了分治策略的Divide-Select查找算法的效率可以是基于快速排序的查找算法的幾十倍,其時(shí)間復(fù)雜度在圖中也反映為線性。而基于計(jì)數(shù)排序的查找算法(Count-Search)的時(shí)間復(fù)雜度同樣達(dá)到了線性,但是效率卻比Divide-Select更高,通過(guò)上述實(shí)驗(yàn)可以得知:在進(jìn)行無(wú)符號(hào)整數(shù)查找時(shí),基于計(jì)數(shù)排序的查找算法(Count-Search)在時(shí)間上是最優(yōu)的。

5Count-Search的應(yīng)用范圍

在查找無(wú)符號(hào)整數(shù)集合時(shí),應(yīng)用Count-Search算法,能夠降低查找時(shí)間復(fù)雜度。但是應(yīng)用Count-Search算法時(shí)要注意:該算法只適用于整數(shù)的查找,且查找集合S的最大值M與S中元素個(gè)數(shù)N不成指數(shù)關(guān)系,即M不能遠(yuǎn)大于N。因?yàn)楫?dāng)M過(guò)大時(shí),首先內(nèi)存開(kāi)銷就會(huì)很大,其次時(shí)間復(fù)雜度也會(huì)相應(yīng)的提高。

該算法充分的運(yùn)用了整數(shù)的特性,整個(gè)運(yùn)算過(guò)程中無(wú)需數(shù)據(jù)的比較和交換,大大降低了算法的時(shí)間復(fù)雜度,因此該算法可以在工程統(tǒng)計(jì)中得到大規(guī)模運(yùn)用。例如:隨著網(wǎng)絡(luò)的發(fā)展和應(yīng)用,網(wǎng)絡(luò)中的信息量成倍的擴(kuò)大,而在其中我們關(guān)注的最多的則是統(tǒng)計(jì)排名比較靠前的信息,如果將全部過(guò)億的統(tǒng)計(jì)量排序,則由于數(shù)據(jù)量過(guò)大,則會(huì)浪費(fèi)大量的時(shí)間和資源。而采用Count-Search的查找算法,就可在線性的時(shí)間完成。

6結(jié)束語(yǔ)

本文中提出的一種基于計(jì)數(shù)排序算法的整數(shù)查找算法,該算法在運(yùn)算過(guò)程中無(wú)需進(jìn)行數(shù)據(jù)的比較和交換,該算法可以應(yīng)用到大規(guī)模的整數(shù)查找,算法的時(shí)間復(fù)雜度很低,而且避免的大量的數(shù)據(jù)比較和交換,同時(shí)在時(shí)間上是最優(yōu)的。

參考文獻(xiàn)

[1]崔澤鵬,李偉生.EREWPRAM模型上指數(shù)級(jí)分割待處理數(shù)據(jù)集的并行多選算法[J].北方交通大學(xué)學(xué)報(bào),2003,(2):46-49

[2]班志杰,高光來(lái).一種Byte查找第K個(gè)元素的算法研究[J].內(nèi)蒙古大學(xué)學(xué)報(bào),2004,(3):322-324

[3]ThomasH.CormenCharlesE.Leiserson.《算法導(dǎo)論》[M].北京:機(jī)械工業(yè)出版社。2006.9:98-99

[4]MuhammadH.Alsuwaiyel.Anoptimalparallelalgorithmforthemultiselectionproblem[J].ParallelComputing,2001,(27):861—865

[5]江華.求第K個(gè)元素的快速排序算法[J].韶關(guān)學(xué)院報(bào),2003,(6):32-34

[6]王曉東.《算法設(shè)計(jì)與分析》[M].北京:清華大學(xué)出版社,2003.1:39-43

息烽县| 洛浦县| 桃园市| 郁南县| 南和县| 青州市| 邓州市| 博兴县| 定兴县| 长阳| 米林县| 常山县| 江城| 西畴县| 高台县| 麻江县| 永春县| 高陵县| 凤城市| 吉安县| 石河子市| 介休市| 桐乡市| 右玉县| 新竹市| 科技| 新余市| 潞城市| 安远县| 武乡县| 九龙县| 乌兰浩特市| 新邵县| 巴彦县| 威海市| 泊头市| 太保市| 靖宇县| 渑池县| 宜阳县| 庄河市|