SPFA算法
SPFA(Shortest Path Faster Algorithm)是Bellman-Ford算法的一種隊列優(yōu)化,減少了不必要的冗余計算。
{單源最短路徑的Bellman-ford算法
執(zhí)行v-1次,每次對每條邊進(jìn)行松弛操作
如有負(fù)權(quán)回路則輸出"Error!!"}
For i:=1 to |V|-1 do
For 每條邊(u,v)∈E do
Relax(u,v,w);
For每條邊(u,v)∈E do
If dis[u]+w<dis[v] Then Exit(False)
bool Bellman-Ford(G,w,s) //圖G ,邊集 函數(shù) w ,s為源點
1 for each vertex v ∈ V(G) //初始化 1階段
2 d[v] ←+∞;
3 d[s] ←0; //1階段結(jié)束
4 for(int i=1;i<|v|;i++) //2階段開始,雙重循環(huán)。
5 for each edge(u,v) ∈E(G) //邊集數(shù)組要用到,窮舉每條邊。
6 if(d[v]> d[u]+ w(u,v))//松弛判斷
7 d[v]=d[u]+w(u,v); //松弛操作2階段結(jié)束
8 for each edge(u,v) ∈E(G)
9 if(d[v]> d[u]+ w(u,v))
10 return false;
11 return true;
算法時間復(fù)雜度O(VE)。因為算法簡單,適用范圍又廣,雖然復(fù)雜度稍高,仍不失為一個很實用的算法。
福特GT Ford GT早在許多年前,當(dāng)初Ford原本打算買下Ferrari,好藉此進(jìn)軍超級跑車的市場。那個時候的Ferrari并沒有現(xiàn)在這般地位。然而,就在交易完成的前一刻,F(xiàn)errari方面...
tom ford眼鏡真假鑒別方法; 一,檢查Tom Ford太陽鏡的包裝 還是那句話,真的包裝物不能證明太陽鏡一定是真的,但假的包裝物則...
短跑的就是計算150厚度,按其水平投影面積計算,包含一半的梯井調(diào)出的板應(yīng)該是單獨計算,計入在挑檐板中吧
首先指出,圖的任意一條最短路徑既不能包含負(fù)權(quán)回路,也不會包含正權(quán)回路,因此它最多包含|v|-1條邊。
其次,從源點s可達(dá)的所有頂點如果 存在最短路徑,則這些最短路徑構(gòu)成一個以s為根的最短路徑樹。Bellman-Ford算法的迭代松弛操作,實際上就是按每個點實際的最短路徑[雖然我們還不知道,但它一定存在]的層次,逐層生成這棵最短路徑樹的過程。
注意,每一次遍歷,都可以從前一次遍歷的基礎(chǔ)上,找到此次遍歷的部分點的單源最短路徑。如:這是第i次遍歷,那么,通過數(shù)學(xué)歸納法,若前面單源最短路徑層次為1~(i-1)的點全部已經(jīng)得到,而單源最短路徑層次為i的點,必定可由單源最短路徑層次為i-1的點集得到,從而在下一次遍歷中充當(dāng)前一次的點集,如此往復(fù)迭代,[v]-1次后,若無負(fù)權(quán)回路,則我們已經(jīng)達(dá)到了所需的目的--得到每個點的單源最短路徑。[注意:這棵樹的每一次更新,可以將其中的某一個子樹接到另一個點下]
反之,可證,若存在負(fù)權(quán)回路,第[v]次遍歷一定存在更新,因為負(fù)權(quán)回路的環(huán)中,必定存在一個"斷點",可用數(shù)學(xué)手段證明。
最后,我們在第[v]次更新中若沒有新的松弛,則輸出結(jié)果,若依然存在松弛,則輸出'CAN'T'表示無解。同時,我們還可以通過"斷點"找到負(fù)權(quán)回路。
1,.初始化:將除源點外的所有頂點的最短距離估計值 d[v] -->+∞, d[s]-->0;
2.迭代求解:反復(fù)對邊集E中的每條邊進(jìn)行松弛操作,使得頂點集V中的每個頂點v的最短距離估計值逐步逼近其最短距離;(運行|v|-1次)
3.檢驗負(fù)權(quán)回路:判斷邊集E中的每一條邊的兩個端點是否收斂。如果存在未收斂的頂點,則算法返回false,表明問題無解;否則算法返回true,并且從源點可達(dá)的頂點v的最短距離保存在 d[v]中。
1.單源最短路徑(從源點s到其它所有頂點v);
2.有向圖&無向圖(無向圖可以看作(u,v),(v,u)同屬于邊集E的有向圖);
3.邊權(quán)可正可負(fù)(如有負(fù)權(quán)回路輸出錯誤提示);
4.差分約束系統(tǒng);
Dijkstra算法無法判斷含負(fù)權(quán)邊的圖的最短路。如果遇到負(fù)權(quán),在沒有負(fù)權(quán)回路(回路的權(quán)值和為負(fù),即便有負(fù)權(quán)的邊)存在時,也可以采用Bellman - Ford算法正確求出最短路徑。
Bellman-Ford算法能在更普遍的情況下(存在負(fù)權(quán)邊)解決單源點最短路徑問題。對于給定的帶權(quán)(有向或無向)圖 G=(V,E), 其源點為s,加權(quán)函數(shù) w是 邊集 E 的映射。對圖G運行Bellman - Ford算法的結(jié)果是一個布爾值,表明圖中是否存在著一個從源點s可達(dá)的負(fù)權(quán)回路。若不存在這樣的回路,算法將給出從源點s到 圖G的任意頂點v的最短路徑d[v]。
算法大致流程是用一個隊列來進(jìn)行維護(hù)。 初始時將源加入隊列。 每次從隊列中取出一個元素,并對所有與他相鄰的點進(jìn)行松弛,若某個相鄰的點松弛成功,則將其入隊。 直到隊列為空時算法結(jié)束。
分析 Bellman-Ford算法,不難看出,外層循環(huán)(迭代次數(shù))|v|-1實際上取得是上限。由上面對算法正確性的證明可知,需要的迭代遍數(shù)等于最短路徑樹的高度。如果不存在負(fù)權(quán)回路,平均情況下的最短路徑樹的高度應(yīng)該遠(yuǎn)遠(yuǎn)小于 |v|-1,在此情況下,多余最短路徑樹高的迭代遍數(shù)就是時間上的浪費,由此,可以依次來實施優(yōu)化。
從細(xì)節(jié)上分析,如果在某一遍迭代中,算法描述中第7行的松弛操作未執(zhí)行,說明該遍迭代所有的邊都沒有被松弛??梢宰C明(怎么證明?):至此后,邊集中所有的邊都不需要再被松弛,從而可以提前結(jié)束迭代過程。這樣,優(yōu)化的措施就非常簡單了。
設(shè)定一個布爾型標(biāo)志變量 relaxed,初值為false。在內(nèi)層循環(huán)中,僅當(dāng)有邊被成功松弛時,將 relaxed 設(shè)置為true。如果沒有邊被松弛,則提前結(jié)束外層循環(huán)。這一改進(jìn)可以極大的減少外層循環(huán)的迭代次數(shù)。優(yōu)化后的 bellman-ford函數(shù)如下。
這樣看似平凡的優(yōu)化,會有怎樣的效果呢?有研究表明,對于隨機(jī)生成數(shù)據(jù)的平均情況,時間復(fù)雜度的估算公式為
1.13|E| if |E|<|V|
0.95*|E|*lg|V| if |E|>|V|
優(yōu)化后的算法在處理有負(fù)權(quán)回路的測試數(shù)據(jù)時,由于每次都會有邊被松弛,所以relaxed每次都會被置為true,因而不可能提前終止外層循環(huán)。這對應(yīng)了最壞情況,其時間復(fù)雜度仍舊為O(VE)。
優(yōu)化后的算法的時間復(fù)雜度已經(jīng)和用二叉堆優(yōu)化的Dijkstra算法相近了,而編碼的復(fù)雜程度遠(yuǎn)比后者低。加之Bellman-Ford算法能處理各種邊值權(quán)情況下的最短路徑問題,因而還是非常優(yōu)秀的。
焊接FORD法蘭專用焊條研制
格式:pdf
大?。?span id="olszdya" class="single-tag-height">173KB
頁數(shù): 3頁
評分: 3
焊接FORD法蘭專用焊條研制——提出了對焊接FORD法蘭專用焊條的要求,介紹了研制新焊條的技術(shù)途徑.通過對法蘭制作符合藝流程進(jìn)行試驗,結(jié)果表明新研制焊條XFS016各項性能優(yōu)良,達(dá)到了預(yù)期目的.經(jīng)對法蘭接口實際焊接,其x射線探傷為I級合格.
一種基于內(nèi)容分割的數(shù)字地圖插值新算法
格式:pdf
大小:173KB
頁數(shù): 4頁
評分: 4.6
本文以圖像內(nèi)容分割為基礎(chǔ),提出了一種插值新算法。該方法在HSV空間用DCT系數(shù)表征圖像的內(nèi)容差異,將圖像內(nèi)容劃分為目標(biāo)和背景兩大類,并且將目標(biāo)內(nèi)容劃分為兩級重要度;根據(jù)使用者對目標(biāo)和背景以及目標(biāo)重要度的不同要求,對不同部分采用與之相適應(yīng)的插值算法進(jìn)行縮放處理。實驗表明,該方法可以提高縮放處理速度,而且插值效果不亞于經(jīng)典的高質(zhì)量插值算法。
旋轉(zhuǎn)門算法除了平行四邊形算法之外,還能用三角形算法來表示。
圖遍歷算法
圖遍歷算法是最基本的圖算法之一,由指定節(jié)點開始,按照一定規(guī)則遍歷圖結(jié)構(gòu)中所有的連通節(jié)點,包括寬度優(yōu)先搜索(Breadth First Search,BFS)和深度優(yōu)先搜索(Depth First Search, DFS)等核心算法。
作為最基本的圖遍歷算法,寬度優(yōu)先搜索算法代表了圖遍歷算法的計算特性,具有非常重要的研究意義。一方面,BFS算法是最短路徑、鄰接查詢、可達(dá)性查詢等算法的實現(xiàn)基礎(chǔ),廣泛應(yīng)用于圖分割、信念傳播統(tǒng)計以及網(wǎng)絡(luò)社區(qū)結(jié)構(gòu)發(fā)現(xiàn)等領(lǐng)域;另一方面,BFS算法作為典型的數(shù)據(jù)密集型算法,體現(xiàn)了數(shù)據(jù)密集型應(yīng)用對高性能計算系統(tǒng)的需求,廣泛應(yīng)用于大規(guī)模并行計算系統(tǒng)的數(shù)據(jù)處理能力評測,已經(jīng)成為Parboil, Rodinia和Graph500等基準(zhǔn)測試程序的核心算法。
在實際應(yīng)用中,圖的規(guī)模在不斷增大,相應(yīng)的,對圖的存儲和處理開銷不斷增加,有效地實現(xiàn)大規(guī)模并行BFS算法具有十分重要的意義。
稀疏線性方程組求解法
稀疏線性方程組的求解是對自然科學(xué)和社會科學(xué)中許多實際問題進(jìn)行數(shù)值模擬時的關(guān)鍵技術(shù)之一。在高層建筑、橋梁、水壩、防洪堤的結(jié)構(gòu)設(shè)計中,需對變形與應(yīng)力情況進(jìn)行模擬;在油氣資源探測與分析、數(shù)值天氣預(yù)報、飛行器的動力學(xué)分析中,需利用流體力學(xué)方程組進(jìn)行模擬;在進(jìn)行恒星大氣分析與核爆實驗時,常需利用輻射流體力學(xué)與粒子統(tǒng)計平衡等規(guī)律進(jìn)行模擬。在對這些問題進(jìn)行分析模擬時,通常利用偏微分方程建立數(shù)學(xué)模型。在對偏微分方程的離散求解過程中,稀疏線性方程組求解算法扮演著十分重要的角色。在許多不以偏微分方程建模的問題中,稀疏線性方程組求解同樣發(fā)揮了重要的作用。在空中交通控制、電力線路中的最優(yōu)電流問題中,需利用數(shù)學(xué)規(guī)劃求解;在對采納某項政策時在某給定條件下對國內(nèi)、國際多個區(qū)域的相應(yīng)經(jīng)濟(jì)指標(biāo)進(jìn)行預(yù)測時,需利用CGE模型進(jìn)行分析;在可靠性分析、排隊網(wǎng)絡(luò)分析與計算機(jī)系統(tǒng)性能評估中,常利用具有大量狀態(tài)的離散Markov鏈進(jìn)行模擬。在這些問題的求解中,稀疏線性方程組的求解都占有重要位置,并且往往是整個計算過程中的性能瓶頸,稀疏線性方程組的高效求解是計算數(shù)學(xué)和工程應(yīng)用中十分重要的課題之一。
解稀疏線性方程組的方法包括直接法(direct method)與迭代(iterative method)兩類。直接法指在不考慮計算舍入誤差的情況下,通過包括矩陣分解和三角方程組求解等有限步的操作求得方程組的精確解,因此又稱精確法;迭代法指給定一個初始解向量,通過一定的計算構(gòu)造一個向量列(一般通過逐次迭代得到一系列逼近精確值的近似解),向量列的極限為方程組理論上的精確解。迭代法對存儲空間的需求低,在求解高階非病態(tài)稀疏線性方程組方面具有一定優(yōu)勢。然而,迭代法不適合求解病態(tài)問題,性能因問題而異,并且面臨精度控制、收斂速度慢或不收斂等問題。與迭代法相比,直接法的通用性好,求解結(jié)果精度高,性能穩(wěn)定。當(dāng)矩陣分解結(jié)果能夠被多次后續(xù)計算重用以及多右端項時,直接法的優(yōu)勢尤其明顯。在有限元分析、模擬電路瞬態(tài)仿真等應(yīng)用領(lǐng)域的商用軟件均采用直接法求解器作為標(biāo)準(zhǔn)的稀疏線性方程組求解器。但直接法的缺點在于對存儲資源要求較高,無法處理高階稀疏矩陣。
一般來說,迭代法的求解速度高于直接法。但是,如果使用直接法時矩陣分解過程能夠被很多后續(xù)計算重復(fù)使用,則后續(xù)的三角陣求解可以非??焖賹崿F(xiàn),此時直接法在性能上具有優(yōu)勢。典型例子是模擬電路瞬態(tài)仿真,這時需要多次以Newton-Raphson方法求解非線性方程,每一次求解均會在工作點附近展開為線性方程,而且所有線性方程的矩陣分解方式都是固定的,因此求解該類問題最好的方法是直接法。稀疏矩陣的矩陣分解在GPU上的實現(xiàn)是很困難的,主要難點在于現(xiàn)有算法的數(shù)據(jù)依賴性導(dǎo)致可利用的并行性不足。此外,矩陣元素的排列順序?qū)τ嬎氵^程中間結(jié)果矩陣的非零元素個數(shù)有很大影響,同時矩陣分解后的非零元素的分布與原來矩陣可能很不相同。
迭代法的理論基礎(chǔ)相對復(fù)雜,并且具有多種不同的具體算法,但其基本形式均為從一個猜測解出發(fā),通過多次迭代逐漸收斂,當(dāng)誤差滿足一定條件時迭代中止。共扼梯度法(CG)是迭代法的主流方法之一,特別適合于特征值為良態(tài)分布的對稱正定方程組;其它迭代法包括Jacobi、逐次超松弛(SOR)、廣義極小剩余(GMRES)、預(yù)條件共扼梯度(PCG)等。迭代法的核心算法是稀疏矩陣向量乘(SpMV),因此實現(xiàn)SpMV的高效并行結(jié)構(gòu)也是實現(xiàn)迭代法的基礎(chǔ)。
直接法由高斯消元法發(fā)展向來,求解過程包括矩陣排序(matrix ordering)符號分解(symbolic factorization)、數(shù)值分解(numerical factorization)、三角方程組求解((triangular solves)四個步驟。其中,矩陣排序和符號分解屬于預(yù)處理部分。矩陣排序通過啟發(fā)算法置換稀疏矩陣的行列,試圖在后續(xù)計算中維持矩陣的稀疏性或數(shù)值穩(wěn)定性。符號分解則是預(yù)先對矩陣分解后的稀疏結(jié)構(gòu)進(jìn)行預(yù)測,預(yù)先分配存儲空間并記錄數(shù)據(jù)相關(guān)性。直接法的計算瓶頸在于數(shù)值分解部分和三角方程組求解部分,高效的直接法求解依賴于二者的高效實現(xiàn)。
對于一個稀疏線性方程組是選擇直接法還是迭代法求解,一般有如下原則:對于低階矩陣或大型帶狀矩陣所對應(yīng)的線性方程組,用直接法求解;而對于大型(非帶形)矩陣所對應(yīng)的線性方程組,用迭代方法求解。實際上,選用何種方法還要看具體的應(yīng)用背景,比如,對于線性規(guī)劃和一些結(jié)構(gòu)工程應(yīng)用,只有直接法是切實可行的。對于精度要求很高的問題,還可以采用由直接法得到初始解再用迭代法進(jìn)行迭代的方法求解,這種方法稱為迭代精化法。
DFSA算法可采用各種方法預(yù)測待識別的標(biāo)簽數(shù)量,然后動態(tài)調(diào)整最優(yōu)幀長,與FSA相比,系統(tǒng)效率有明顯改善,接近36.8%。但是,當(dāng)標(biāo)簽數(shù)量較多(特別是標(biāo)簽數(shù)量大于500)時,采用由預(yù)測標(biāo)簽數(shù)量設(shè)置最優(yōu)幀長的方案會使系統(tǒng)效率急劇下降。因此,在標(biāo)簽數(shù)量較多的情況下,為了使系統(tǒng)效率得到提高,EPCClass1Gen2標(biāo)準(zhǔn)中采用了Q值算法,該算法可以實時自適應(yīng)地調(diào)整幀長 。
Q值算法
在Q值算法中,閱讀器首先發(fā)送Query命令,該命令中含有一個參數(shù)Q(取值范圍0~15),接收到命令的標(biāo)簽可在[0,2Q-1]范圍內(nèi)(稱為幀長)隨機(jī)選擇時隙,并將選擇的值存入標(biāo)簽的時隙計數(shù)器中,只有計數(shù)器為0的標(biāo)簽才能響應(yīng),其余標(biāo)簽保持沉默狀態(tài)。當(dāng)標(biāo)簽接收到閱讀器發(fā)送的QueryRep命令時,將其時隙計數(shù)器減1,若減為0,則給閱讀器發(fā)送一個應(yīng)答信號。標(biāo)簽被成功識別后,退出這輪盤存。當(dāng)有兩個以上標(biāo)簽的計數(shù)器都為0時,它們會同時對閱讀器進(jìn)行應(yīng)答,造成碰撞。閱讀器檢測到碰撞后,發(fā)出指令將產(chǎn)生碰撞的標(biāo)簽時隙計數(shù)器設(shè)為最大值(2Q-1),繼續(xù)留在這一輪盤存周期中,系統(tǒng)繼續(xù)盤存直到所有標(biāo)簽都被查詢過,然后閱讀器發(fā)送重置命令,使碰撞過的標(biāo)簽生成新的隨機(jī)數(shù) 。
根據(jù)上一輪識別的情況,閱讀器發(fā)送Query-Adjust命令來調(diào)整Q的值,當(dāng)標(biāo)簽接收到Query-Adjust命令時,先更新Q值,然后在[0,2Q-1]范圍內(nèi)選擇隨機(jī)值。EPCClass1Gen2標(biāo)準(zhǔn)中提供了一種參考算法來確定Q值的范圍.其中:Qfp為浮點數(shù),其初值一般設(shè)為4.0,對Qfp四舍五入取整后得到的值即為Q;C為調(diào)整步長,其典型取值范圍是0.1 該算法在參數(shù)C的輔助下對Q值進(jìn)行動態(tài)調(diào)整,但是C太大會造成Q值變化過于頻繁,導(dǎo)致幀長調(diào)整過于頻繁,C太小又不能快速地實現(xiàn)最優(yōu)幀長的選擇。因此,研究者們對Q值的調(diào)整進(jìn)行了各種優(yōu)化 。 基于最大吞吐量調(diào)整Q值的算法 文獻(xiàn)提出一種基于最大吞吐量對Q值進(jìn)行調(diào)整的算法,其中定義了以下變量:Nt為已識別的標(biāo)簽個數(shù);N為識別標(biāo)簽所需的總時隙數(shù);NC為沖突時隙的個數(shù);nu為上一輪未識別的標(biāo)簽個數(shù);e為沖突時隙中的平均標(biāo)簽個數(shù);PC為沖突時隙所占的比例 。 這些參數(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時,閱讀器僅需調(diào)用2Q-1次QueryRep命令,而不需要在接下來的盤存周期中調(diào)整Q值。當(dāng)吞吐量小于0.368時,根據(jù)未識別的標(biāo)簽個數(shù)nu來調(diào)整Q值 . 基于分組的位隙Aloha算法 文獻(xiàn)提出一種基于分組的位隙Aloha算法,該算法采用位隙Aloha算法中的128位預(yù)定序列,代表128個位隙。若某個標(biāo)簽選擇了第i個位隙,則將第i位置1,其余各位都置0。當(dāng)標(biāo)簽數(shù)量為15時,位隙Aloha算法可獲得最大吞吐率88.38%,但隨著標(biāo)簽數(shù)量的增加,算法性能急劇下降 。 因此,基于分組的位隙Aloha算法通過對標(biāo)簽進(jìn)行分組來提高算法的性能。該算法在查詢命令中設(shè)置了一個位隙計數(shù)器的參數(shù)Q(Q為整數(shù),且0≤Q≤15),當(dāng)標(biāo)簽收到閱讀器發(fā)送的查詢命令后,在[0,2Q-1]范圍內(nèi)生成一個隨機(jī)數(shù),即代表選擇了相應(yīng)的位隙,只有選擇了0的標(biāo)簽才會立即響應(yīng)。同時,該算法根據(jù)沖突位隙數(shù)動態(tài)地對Q值進(jìn)行調(diào)整:當(dāng)沖突位隙數(shù)小于11時,Q減1且最小為0;當(dāng)沖突位隙數(shù)在11~20之間時,Q保持不變;當(dāng)沖突位隙數(shù)大于20時,Q加1且最大不超過15 。 綜上所述,基于Aloha的防碰撞算法原理簡單、容易實現(xiàn),對新到達(dá)的標(biāo)簽具有較好的適應(yīng)性,尤其對于標(biāo)簽持續(xù)到達(dá)的情況有較好的解決方案,但該類算法存在幾個明顯的缺點:①響應(yīng)時間不確定,即同一批標(biāo)簽在不同時刻進(jìn)行識別所需要消耗的時間相差很大;②個別標(biāo)簽可能永遠(yuǎn)無法被識別;③Aloha算法達(dá)到最佳吞吐率的條件是其幀長等于標(biāo)簽數(shù)量,當(dāng)需要識別的標(biāo)簽數(shù)量較多或選擇的幀長與實際待識別標(biāo)簽數(shù)量不符時,系統(tǒng)性能將明顯下降。而基于樹的算法則很好地解決了這些問題 。