中文名 | 算法效率 | 外文名 | algorithm efficiency |
---|---|---|---|
依????據(jù) | 程序在計(jì)算機(jī)上運(yùn)行消耗時(shí)間 | 方????法 | 事后統(tǒng)計(jì)的方法等 |
類????型 | 算法執(zhí)行時(shí)間 | 使用范圍 | 計(jì)算機(jī)程序語言 |
對(duì)數(shù)據(jù)的邏輯結(jié)構(gòu)進(jìn)行選擇,是構(gòu)造數(shù)學(xué)模型一大關(guān)鍵,而算法又是用來解決數(shù)學(xué)模型的。要使算法效率高,首先必須選好數(shù)據(jù)的邏輯結(jié)構(gòu)。選擇邏輯結(jié)構(gòu)的目的是提高信息的利用效果。在解決問題的過程中,選擇合理的邏輯結(jié)構(gòu)是相當(dāng)重要的環(huán)節(jié)。
數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu),分為順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。順序存儲(chǔ)結(jié)構(gòu)的特點(diǎn)是借助元素在存儲(chǔ)器中的相對(duì)位置來表示數(shù)據(jù)元素之間的邏輯關(guān)系;鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)則是借助指示元素存儲(chǔ)地址的指針表示數(shù)據(jù)元素之間的邏輯關(guān)系。因?yàn)閮煞N存儲(chǔ)結(jié)構(gòu)的不同,導(dǎo)致這兩種存儲(chǔ)結(jié)構(gòu)在具體使用時(shí)也分別存在著優(yōu)點(diǎn)和缺點(diǎn)。 這里有一個(gè)較簡(jiǎn)單的例子:我們需要記錄一個(gè)n×n的矩陣,矩陣中包含的非0元素為m個(gè)。 此時(shí),我們?nèi)舨捎庙樞虼鎯?chǔ)結(jié)構(gòu),就會(huì)使用一個(gè)n×n的二維數(shù)組,將所有數(shù)據(jù)元素全部記錄下來;若采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),則需要使用一個(gè)包含m個(gè)結(jié)點(diǎn)的鏈表,記錄所有非0的m個(gè)數(shù)據(jù)元素。由這樣兩種不同的記錄方式,我們可以通過對(duì)數(shù)據(jù)的不同操作來分析它們的優(yōu)點(diǎn)和缺點(diǎn)。
1. 隨機(jī)訪問矩陣中任意元素。由于順序結(jié)構(gòu)在物理位置上是相鄰的,所以可以很容易地獲得任意元素的存儲(chǔ)地址,其復(fù)雜度為O(1);對(duì)于鏈?zhǔn)浇Y(jié)構(gòu),由于不具備物理位置相鄰的特點(diǎn),所以首先必須對(duì)整個(gè)鏈表進(jìn)行一次遍歷,尋找需進(jìn)行訪問的元素的存儲(chǔ)地址,其復(fù)雜度為O(m)。此時(shí)使用順序結(jié)構(gòu)顯然效率更高。
2. 對(duì)所有數(shù)據(jù)進(jìn)行遍歷。兩種存儲(chǔ)結(jié)構(gòu)對(duì)于這種操作的復(fù)雜度是顯而易見的,順序結(jié)構(gòu)的復(fù)雜度為O(n2),鏈?zhǔn)浇Y(jié)構(gòu)為O(m)。由于在一般情況下m要遠(yuǎn)小于n2,所以此時(shí)鏈?zhǔn)浇Y(jié)構(gòu)的效率要高上許多。除上述兩種操作外,對(duì)于其它的操作,這兩種結(jié)構(gòu)都不存在很明顯的優(yōu)點(diǎn)和缺點(diǎn),如對(duì)鏈表進(jìn)行刪除或插入操作,在順序結(jié)構(gòu)中可表示為改變相應(yīng)位置的數(shù)據(jù)元素。 既然兩種存儲(chǔ)結(jié)構(gòu)對(duì)于不同的操作,其效率存在較大的差異,那么我們?cè)诖_定存儲(chǔ)結(jié)構(gòu)時(shí),必須仔細(xì)分析算法中操作的需要,合理地選擇一種能夠“揚(yáng)長(zhǎng)避短”的存儲(chǔ)結(jié)構(gòu)。
存儲(chǔ)結(jié)構(gòu)的選擇包括以下兩種。
一、合理采用順序存儲(chǔ)結(jié)構(gòu)。我們?cè)谄匠W鲱}時(shí),大多都是使用順序存儲(chǔ)結(jié)構(gòu)對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)。究其原因,一方面是出于順序結(jié)構(gòu)操作方便的考慮,另一方面是在程序?qū)崿F(xiàn)的過程中,使用順序結(jié)構(gòu)相對(duì)于鏈?zhǔn)浇Y(jié)構(gòu)更便于對(duì)程序進(jìn)行調(diào)試和查找錯(cuò)誤。因此,大多數(shù)人習(xí)慣上認(rèn)為,能夠使用順序結(jié)構(gòu)進(jìn)行存儲(chǔ)的問題,最“好”采用順序存儲(chǔ)結(jié)構(gòu)。其實(shí),這個(gè)所謂的“好”只是一個(gè)相對(duì)的標(biāo)準(zhǔn),是建立在以下兩個(gè)前提條件之下的:
1. 鏈?zhǔn)浇Y(jié)構(gòu)存儲(chǔ)的結(jié)點(diǎn)與順序結(jié)構(gòu)存儲(chǔ)的結(jié)點(diǎn)數(shù)目相差不大。這種情況下,由于存儲(chǔ)的結(jié)點(diǎn)數(shù)目比較接近,使用鏈?zhǔn)浇Y(jié)構(gòu)完全不能體現(xiàn)出記錄結(jié)點(diǎn)少的優(yōu)點(diǎn),并且可能會(huì)由于指針操作較慢而降低算法的效率。更有甚者,由于指針自身占用的空間較大,且結(jié)點(diǎn)數(shù)目較多,因而算法對(duì)空間的要求可能根本無法得到滿足。
2. 并非算法效率的瓶頸所在。由于不是算法最費(fèi)時(shí)間的地方,這里是否進(jìn)行改進(jìn),顯然是不會(huì)對(duì)整個(gè)算法構(gòu)成太大影響的,若使用鏈?zhǔn)浇Y(jié)構(gòu)反而會(huì)顯得操作過于繁瑣。
二、必要時(shí)采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。
由于鏈?zhǔn)浇Y(jié)構(gòu)中指針操作確實(shí)較繁瑣,并且速度也較慢,調(diào)試也不方便,因而大家一般都不太愿意用鏈?zhǔn)降拇鎯?chǔ)結(jié)構(gòu)。但是,這只是一般的觀點(diǎn),當(dāng)鏈?zhǔn)浇Y(jié)構(gòu)確實(shí)對(duì)算法有很大改進(jìn)時(shí),我們還是不得不進(jìn)行考慮的。
然而,如果我們采用的是鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),那么我們需要多少數(shù)據(jù),就只會(huì)遍歷多少數(shù)據(jù),這樣不僅充分發(fā)揮了鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的優(yōu)點(diǎn),而且由于不需單獨(dú)對(duì)某一個(gè)數(shù)據(jù)進(jìn)行提取,每次都是對(duì)所有數(shù)據(jù)進(jìn)行判斷,從而避免了鏈?zhǔn)浇Y(jié)構(gòu)的最大缺點(diǎn)。我們使用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),雖然沒有降低問題的時(shí)間復(fù)雜度(鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)在最壞情況下的存儲(chǔ)量與順序存儲(chǔ)結(jié)構(gòu)的存儲(chǔ)量幾乎相同),但由于體現(xiàn)了前文所述選擇存儲(chǔ)結(jié)構(gòu)時(shí)揚(yáng)長(zhǎng)避短的原則,因而算法的效率也大為提高。我們選擇鏈?zhǔn)降拇鎯?chǔ)結(jié)構(gòu),雖然操作上可能稍復(fù)雜一些,但由于改進(jìn)了算法的瓶頸,算法的效率自然也今非昔比。由此可見,必要時(shí)選擇鏈?zhǔn)浇Y(jié)構(gòu)這一方法,其效果是不容忽視的。
與直接初始化對(duì)應(yīng)的是復(fù)制初始化,什么是直接初始化?什么又是復(fù)制初始化?舉個(gè)簡(jiǎn)單的例子,
ClassTestct1;ClassTestct2(ct1);//直接初始化ClassTestct3=ct1;//復(fù)制初始化
那么直接初始化與復(fù)制初始化又有什么不同呢?直接初始化是直接以一個(gè)對(duì)象來構(gòu)造另一個(gè)對(duì)象,如用ct1來構(gòu)造ct2,復(fù)制初始化是先構(gòu)造一個(gè)對(duì)象,再把另一個(gè)對(duì)象值復(fù)制給這個(gè)對(duì)象,如先構(gòu)造一個(gè)對(duì)象ct3,再把ct1中的成員變量的值復(fù)制給ct3,從這里,可以看出直接初始化的效率更高一點(diǎn),而且使用直接初始化還是一個(gè)好處,就是對(duì)于不能進(jìn)行復(fù)制操作的對(duì)象,如流對(duì)象,是不能使用賦值初始化的,只能進(jìn)行直接初始化??赡芪艺f得不太清楚,那么下面就引用一下經(jīng)典吧!
以下是Primer是的原話:
“當(dāng)用于類類型對(duì)象時(shí),初始化的復(fù)制形式和直接形式有所不同:直接初始化直接調(diào)用與實(shí)參匹配的構(gòu)造函數(shù),復(fù)制初始化總是調(diào)用復(fù)制構(gòu)造函數(shù)。復(fù)制初始化首先使用指定構(gòu)造函數(shù)創(chuàng)建一個(gè)臨時(shí)對(duì)象,然后用復(fù)制構(gòu)造函數(shù)將那個(gè)臨時(shí)對(duì)象復(fù)制到正在創(chuàng)建的對(duì)象”,還有一段這樣說,“通常直接初始化和復(fù)制初始化僅在低級(jí)別優(yōu)化上存在差異,然而,對(duì)于不支持復(fù)制的類型,或者使用非explicit構(gòu)造函數(shù)的時(shí)候,它們有本質(zhì)區(qū)別:
ifstreamfile1("filename")://ok:directinitializationifstreamfile2="filename";//error:copyconstructorisprivate
如果參數(shù)是int等語言自定義的類型可能能性能的影響還不是很大,但是如果參數(shù)是一個(gè)類的對(duì)象,那么其效率問題就不言而喻了。例如一個(gè)判斷兩個(gè)字符串是否相等的函數(shù),其聲明如下:
boolCompare(strings1,strings2)boolCompare(string*s1,string*s2)boolCompare(string&s1,string&s2)boolCompare(conststring&s1,conststring&s2)
其中若使用第一個(gè)函數(shù)(值傳遞),則在參數(shù)傳遞和函數(shù)返回時(shí),需要調(diào)用string的構(gòu)造函數(shù)和析構(gòu)函數(shù)兩次(即共多調(diào)用了四個(gè)函數(shù)),而其他的三個(gè)函數(shù)(指針傳遞和引用傳遞)則不需要調(diào)用這四個(gè)函數(shù)。因?yàn)橹羔樅鸵枚疾粫?huì)創(chuàng)建新的對(duì)象。如果一個(gè)構(gòu)造一個(gè)對(duì)象和析構(gòu)一個(gè)對(duì)象的開銷是龐大的,這就是會(huì)效率造成一定的影響。
然而在很多人的眼中,指針是一個(gè)惡夢(mèng),使用指針就意味著錯(cuò)誤,那么就使用引用吧!它與使用普通值傳遞一樣方便直觀,同時(shí)具有指針傳遞的高效和能力。因?yàn)橐檬且粋€(gè)變量的別名,對(duì)其操作等同于對(duì)實(shí)際對(duì)象操作,所以當(dāng)你確定在你的函數(shù)是不會(huì)或不需要變量參數(shù)的值時(shí),就大膽地在聲明的前面加上一個(gè)const吧,就如最后的一個(gè)函數(shù)聲明一樣。
同時(shí)加上一個(gè)const還有一個(gè)好處,就是可以對(duì)常量進(jìn)行引用,若不加上const修飾符,引用是不能引用常量的。
無論是整數(shù)還是浮點(diǎn)數(shù)運(yùn)算,除法都是一件運(yùn)算速度很慢的指令,在計(jì)算機(jī)中實(shí)現(xiàn)除法是比較復(fù)雜的。所以要減少除法運(yùn)算的次數(shù),下面介紹一些簡(jiǎn)單方法來提高效率:
1、通過數(shù)學(xué)的方法,把除法變?yōu)槌朔ㄟ\(yùn)算,如if(a > b/c),如果a、b、c都是正數(shù),則可寫成if(a*c > b)
2、讓編譯器有優(yōu)化的余地,如里你要做的運(yùn)算是int型的n/8的話,寫成(unsigned)n/8有利于編譯器的優(yōu)化。而要讓編譯器有優(yōu)化的余地,則除數(shù)必須為常數(shù),而這也可以用const修飾一個(gè)變量來達(dá)到目的。
在C 中,支持多繼承,即一個(gè)子類可以有多個(gè)父類。書上都會(huì)告訴我們,多重繼承的復(fù)雜性和使用的困難,并告誡我們不要輕易使用多重繼承。其實(shí)多重繼承并不僅僅使程序和代碼變得更加復(fù)雜,還會(huì)影響程序的運(yùn)行效率。
這是因?yàn)樵贑 中每個(gè)對(duì)象都有一個(gè)this指針指向?qū)ο蟊旧?,而C 中類對(duì)成員變量的使用是通過this的地址加偏移量來計(jì)算的,而在多重繼承的情況下,這個(gè)計(jì)算會(huì)變量更加復(fù)雜,從而降低程序的運(yùn)行效率。而為了解決二義性,而使用虛基類的多重繼承對(duì)效率的影響更為嚴(yán)重,因?yàn)槠淅^承關(guān)系更加復(fù)雜和成員變量所屬的父類關(guān)系更加復(fù)雜。
調(diào)用函數(shù)是需要保護(hù)現(xiàn)場(chǎng),為局部變量分配內(nèi)存,函數(shù)結(jié)束后還要恢復(fù)現(xiàn)場(chǎng)等開銷,而內(nèi)聯(lián)函數(shù)則是把它的代碼直接寫到調(diào)用函數(shù)處,所以不需要這些開銷,但會(huì)使程序的源代碼長(zhǎng)度變大。
所以若是小粒度的函數(shù),如下面的Max函數(shù),由于不需要調(diào)用普通函數(shù)的開銷,所以可以提高程序的效率。
intMax(inta,intb) { returna>b"J-main-content-end-dom">
算法效率是指算法執(zhí)行的時(shí)間,算法執(zhí)行時(shí)間需通過依據(jù)該算法編制的程序在計(jì)算機(jī)上運(yùn)行時(shí)所消耗的時(shí)間來度量。在現(xiàn)在的計(jì)算機(jī)硬件環(huán)境中,比較少需要考慮這個(gè)問題了,特別是pc機(jī)的編程,內(nèi)存空間越來越大,所以被考慮得也越來越少,不過一個(gè)好的程序員,都應(yīng)該對(duì)自己的程序有要求,每一個(gè)for比別人少一次判斷1000個(gè)for就能夠少掉很多的運(yùn)行時(shí)間。所以能夠理解,能夠大概的去運(yùn)用"效率度量"還是有很大意義的。
度量一個(gè)程序的執(zhí)行時(shí)間通常有兩種方法:(一)事后統(tǒng)計(jì)的方法(二)事前分析估算的方法。
事后統(tǒng)計(jì)的方法不利于較大范圍內(nèi)的算法比較(異地,異時(shí),異境)。
事前分析估算的方法與許多因素有關(guān),包括算法本身選用的策略、問題的規(guī)模、書寫程序的語言、編譯產(chǎn)生的機(jī)器代碼質(zhì)量和機(jī)器執(zhí)行指令的速度等。為便于比較算法本身的優(yōu)劣,應(yīng)排除其它影響算法效率的因素。從算法中選取一種對(duì)于所研究的問題來說是基本操作的原操作,以該基本操作重復(fù)執(zhí)行的次數(shù)作為算法的時(shí)間量。(原操作在所有該問題的算法中都相同)
度量一個(gè)程序運(yùn)行時(shí)間的方式通過時(shí)間復(fù)雜度和空間復(fù)雜度來表征。
上式表示隨問題規(guī)模n的增大,算法執(zhí)行時(shí)間的增長(zhǎng)率和f(n)的增長(zhǎng)率相同,稱作算法的漸近時(shí)間復(fù)雜度,簡(jiǎn)稱時(shí)間復(fù)雜度。
上式表示空間復(fù)雜度。空間復(fù)雜度可以作為算法所需存儲(chǔ)空間的量度。若額外空間相對(duì)于輸入數(shù)據(jù)量來說是常數(shù),則稱此算法為原地工作。原地工作意思是一個(gè)算法需要少量的輔助空間,且其大小不隨問題規(guī)模的大小而改變。如果所占空間量依賴于特定的輸入,則除特別指明外,均按最壞情況來分析 。
最差效率:指當(dāng)輸入規(guī)模為n時(shí),算法的最壞情況下的效率。
最優(yōu)效率:指當(dāng)輸入規(guī)模為n時(shí),算法在最優(yōu)情況下的效率。
平均效率:指當(dāng)輸入規(guī)模為n時(shí),算法的平均效率。
大量實(shí)踐經(jīng)驗(yàn)告訴我們,我們?cè)u(píng)價(jià)一個(gè)算法是應(yīng)該重點(diǎn)考慮最差效率這一點(diǎn)。
格式:pdf
大?。?span id="aiqkqqs" class="single-tag-height">441KB
頁數(shù): 未知
評(píng)分: 4.4
研究并分析防火墻規(guī)則集的優(yōu)化方法,給出規(guī)則與網(wǎng)絡(luò)數(shù)據(jù)包的的匹配頻率、匹配熱度和規(guī)則權(quán)重的關(guān)系公式;設(shè)計(jì)并編寫基于權(quán)重與基于匹配效率的規(guī)則集優(yōu)化算法程序;最后通過對(duì)相應(yīng)的實(shí)驗(yàn)數(shù)據(jù)的分析比較,得出兩種算法均可較大幅度的降低防火墻規(guī)則集與網(wǎng)絡(luò)數(shù)據(jù)包的匹配次數(shù),從而優(yōu)化防火墻性能的結(jié)論。
格式:pdf
大小:441KB
頁數(shù): 6頁
評(píng)分: 4.6
根據(jù)汽輪機(jī)低壓缸相對(duì)內(nèi)效率與其影響因素之間的映射關(guān)系,提出了一種基于免疫原理的多層徑向基函數(shù)(RBF)神經(jīng)網(wǎng)絡(luò)數(shù)學(xué)模型來計(jì)算汽輪機(jī)的低壓缸相對(duì)內(nèi)效率,并以某電廠300MW汽輪機(jī)低壓缸為例,對(duì)其相對(duì)內(nèi)效率進(jìn)行了實(shí)際計(jì)算分析.結(jié)果表明:該模型收斂速度快、計(jì)算精度高,并有較好的泛化能力.該神經(jīng)網(wǎng)絡(luò)數(shù)學(xué)模型為汽輪機(jī)相對(duì)內(nèi)效率的在線性能監(jiān)測(cè)提供了一種可行的方法.
DFSA算法可采用各種方法預(yù)測(cè)待識(shí)別的標(biāo)簽數(shù)量,然后動(dòng)態(tài)調(diào)整最優(yōu)幀長(zhǎng),與FSA相比,系統(tǒng)效率有明顯改善,接近36.8%。但是,當(dāng)標(biāo)簽數(shù)量較多(特別是標(biāo)簽數(shù)量大于500)時(shí),采用由預(yù)測(cè)標(biāo)簽數(shù)量設(shè)置最優(yōu)幀長(zhǎng)的方案會(huì)使系統(tǒng)效率急劇下降。因此,在標(biāo)簽數(shù)量較多的情況下,為了使系統(tǒng)效率得到提高,EPCClass1Gen2標(biāo)準(zhǔn)中采用了Q值算法,該算法可以實(shí)時(shí)自適應(yīng)地調(diào)整幀長(zhǎng) 。
Q值算法
在Q值算法中,閱讀器首先發(fā)送Query命令,該命令中含有一個(gè)參數(shù)Q(取值范圍0~15),接收到命令的標(biāo)簽可在[0,2Q-1]范圍內(nèi)(稱為幀長(zhǎng))隨機(jī)選擇時(shí)隙,并將選擇的值存入標(biāo)簽的時(shí)隙計(jì)數(shù)器中,只有計(jì)數(shù)器為0的標(biāo)簽才能響應(yīng),其余標(biāo)簽保持沉默狀態(tài)。當(dāng)標(biāo)簽接收到閱讀器發(fā)送的QueryRep命令時(shí),將其時(shí)隙計(jì)數(shù)器減1,若減為0,則給閱讀器發(fā)送一個(gè)應(yīng)答信號(hào)。標(biāo)簽被成功識(shí)別后,退出這輪盤存。當(dāng)有兩個(gè)以上標(biāo)簽的計(jì)數(shù)器都為0時(shí),它們會(huì)同時(shí)對(duì)閱讀器進(jìn)行應(yīng)答,造成碰撞。閱讀器檢測(cè)到碰撞后,發(fā)出指令將產(chǎn)生碰撞的標(biāo)簽時(shí)隙計(jì)數(shù)器設(shè)為最大值(2Q-1),繼續(xù)留在這一輪盤存周期中,系統(tǒng)繼續(xù)盤存直到所有標(biāo)簽都被查詢過,然后閱讀器發(fā)送重置命令,使碰撞過的標(biāo)簽生成新的隨機(jī)數(shù) 。
根據(jù)上一輪識(shí)別的情況,閱讀器發(fā)送Query-Adjust命令來調(diào)整Q的值,當(dāng)標(biāo)簽接收到Query-Adjust命令時(shí),先更新Q值,然后在[0,2Q-1]范圍內(nèi)選擇隨機(jī)值。EPCClass1Gen2標(biāo)準(zhǔn)中提供了一種參考算法來確定Q值的范圍.其中:Qfp為浮點(diǎn)數(shù),其初值一般設(shè)為4.0,對(duì)Qfp四舍五入取整后得到的值即為Q;C為調(diào)整步長(zhǎng),其典型取值范圍是0.1 該算法在參數(shù)C的輔助下對(duì)Q值進(jìn)行動(dòng)態(tài)調(diào)整,但是C太大會(huì)造成Q值變化過于頻繁,導(dǎo)致幀長(zhǎng)調(diào)整過于頻繁,C太小又不能快速地實(shí)現(xiàn)最優(yōu)幀長(zhǎng)的選擇。因此,研究者們對(duì)Q值的調(diào)整進(jìn)行了各種優(yōu)化 。 基于最大吞吐量調(diào)整Q值的算法 文獻(xiàn)提出一種基于最大吞吐量對(duì)Q值進(jìn)行調(diào)整的算法,其中定義了以下變量:Nt為已識(shí)別的標(biāo)簽個(gè)數(shù);N為識(shí)別標(biāo)簽所需的總時(shí)隙數(shù);NC為沖突時(shí)隙的個(gè)數(shù);nu為上一輪未識(shí)別的標(biāo)簽個(gè)數(shù);e為沖突時(shí)隙中的平均標(biāo)簽個(gè)數(shù);PC為沖突時(shí)隙所占的比例 。 這些參數(shù)之間的關(guān)系為PC=NC/N,e=nu/Nc,吞吐量=Nt/N。由于Aloha類算法的最大吞吐量為0.368(e-1)[5],該算法以此作為調(diào)整Q值的依據(jù)。當(dāng)系統(tǒng)吞吐量達(dá)到或接近0.368時(shí),閱讀器僅需調(diào)用2Q-1次QueryRep命令,而不需要在接下來的盤存周期中調(diào)整Q值。當(dāng)吞吐量小于0.368時(shí),根據(jù)未識(shí)別的標(biāo)簽個(gè)數(shù)nu來調(diào)整Q值 . 基于分組的位隙Aloha算法 文獻(xiàn)提出一種基于分組的位隙Aloha算法,該算法采用位隙Aloha算法中的128位預(yù)定序列,代表128個(gè)位隙。若某個(gè)標(biāo)簽選擇了第i個(gè)位隙,則將第i位置1,其余各位都置0。當(dāng)標(biāo)簽數(shù)量為15時(shí),位隙Aloha算法可獲得最大吞吐率88.38%,但隨著標(biāo)簽數(shù)量的增加,算法性能急劇下降 。 因此,基于分組的位隙Aloha算法通過對(duì)標(biāo)簽進(jìn)行分組來提高算法的性能。該算法在查詢命令中設(shè)置了一個(gè)位隙計(jì)數(shù)器的參數(shù)Q(Q為整數(shù),且0≤Q≤15),當(dāng)標(biāo)簽收到閱讀器發(fā)送的查詢命令后,在[0,2Q-1]范圍內(nèi)生成一個(gè)隨機(jī)數(shù),即代表選擇了相應(yīng)的位隙,只有選擇了0的標(biāo)簽才會(huì)立即響應(yīng)。同時(shí),該算法根據(jù)沖突位隙數(shù)動(dòng)態(tài)地對(duì)Q值進(jìn)行調(diào)整:當(dāng)沖突位隙數(shù)小于11時(shí),Q減1且最小為0;當(dāng)沖突位隙數(shù)在11~20之間時(shí),Q保持不變;當(dāng)沖突位隙數(shù)大于20時(shí),Q加1且最大不超過15 。 綜上所述,基于Aloha的防碰撞算法原理簡(jiǎn)單、容易實(shí)現(xiàn),對(duì)新到達(dá)的標(biāo)簽具有較好的適應(yīng)性,尤其對(duì)于標(biāo)簽持續(xù)到達(dá)的情況有較好的解決方案,但該類算法存在幾個(gè)明顯的缺點(diǎn):①響應(yīng)時(shí)間不確定,即同一批標(biāo)簽在不同時(shí)刻進(jìn)行識(shí)別所需要消耗的時(shí)間相差很大;②個(gè)別標(biāo)簽可能永遠(yuǎn)無法被識(shí)別;③Aloha算法達(dá)到最佳吞吐率的條件是其幀長(zhǎng)等于標(biāo)簽數(shù)量,當(dāng)需要識(shí)別的標(biāo)簽數(shù)量較多或選擇的幀長(zhǎng)與實(shí)際待識(shí)別標(biāo)簽數(shù)量不符時(shí),系統(tǒng)性能將明顯下降。而基于樹的算法則很好地解決了這些問題 。
旋轉(zhuǎn)門算法除了平行四邊形算法之外,還能用三角形算法來表示。
效率與所取截面有關(guān)。取壓縮機(jī)進(jìn)口截面和出口截面來計(jì)算效率,則為壓縮機(jī)的效率。如果不包括進(jìn)出氣管在內(nèi),取壓縮機(jī)中第一級(jí)進(jìn)口截面和末級(jí)出口截面計(jì)算效率,則為壓縮機(jī)級(jí)組的效率。如果取壓縮機(jī)的一個(gè)級(jí)的進(jìn)口截面和出口截面計(jì)算效率,則為級(jí)的效率。 2100433B