⑴ 最短路徑法如何計算
最短路徑演算法有三種,Floyd,dijkstra,Bellman_Ford。其中,Floyd適合用於計算每兩點間的路徑,dijkstra適合稀疏圖,bellman則適合稠密圖中的已知起點終點,計算最短路徑的問題。時間復雜度,floyd演算法為n立方,dijk為n平方,bellman為n平方,其中n是點數。dijk可用堆維護,時間復雜度可減至nlogn,而bellman可用隊列維護,此方法於1994年被國人提出,命名比較土鱉叫SPFA(shortest path faster algorithm。。。)。至於如何計算,有了名字,搜一下就ok。
⑵ pmp如何計算關鍵路徑
pmp計算關鍵路徑的方法如下:
關鍵路徑法(Critical Path Method)是一種用來預測總體項目歷時的項目源網路分析技術。所謂「關鍵路徑」,是指當我們完成了項目進計劃後,在項目的網路圖上,存在著若干條從項目啟動到項目結束之間的路徑,但是對其中一條(嚴格的來說,可能存在一條以上)路徑上來說。
所謂正推法就是從項目的第一個活動到最後一個活動跟蹤全部活動的先後關系,計知算出每個活動的最早開始時間(ES)和最早結束時間(EF)。
所謂倒道推法則是從最後一個活動開始向前追溯到第一個活動,計算出每個活動的最晚開始時間(LS)和最晚結束時間(LF)。
PMP作為項目管理資格認證考試,已在國際上樹立了其權威性:
1、PMP為美國培養了一大批項目管理專業人才,項目管理職業已成為美國的「黃金職業」。在中國許多媒體已把PMP稱為繼MBA,MPA之後的三大金字招牌之一;
2、PMP認證已成為了一個國際性的認證標准,用英語、德語、法語、日語、韓語、西班牙語、葡萄牙語和中文等九種語言進行認證考試;
3、到目前為止,全球有80多萬名PMP,中國大陸地區獲得「PMP」頭銜的已有18萬多人,並逐年增長;
4、各國紛紛效仿美國的項目管理認證制度,推動了世界項目管理的發展。
⑶ 最短路徑演算法
Dijkstra演算法,A*演算法和D*演算法
Dijkstra演算法是典型最短路演算法,用於計算一個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴展,直到擴展到終點為止。Dijkstra演算法能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。
Dijkstra演算法是很有代表性的最短路演算法,在很多專業課程中都作為基本內容有詳細的介紹,如數據結構,圖論,運籌學等等。
Dijkstra一般的表述通常有兩種方式,一種用永久和臨時標號方式,一種是用OPEN, CLOSE表方式,Drew為了和下面要介紹的 A* 演算法和 D* 演算法表述一致,這里均採用OPEN,CLOSE表的方式。
大概過程:
創建兩個表,OPEN, CLOSE。
OPEN表保存所有已生成而未考察的節點,CLOSED表中記錄已訪問過的節點。
1. 訪問路網中里起始點最近且沒有被檢查過的點,把這個點放入OPEN組中等待檢查。
2. 從OPEN表中找出距起始點最近的點,找出這個點的所有子節點,把這個點放到CLOSE表中。
3. 遍歷考察這個點的子節點。求出這些子節點距起始點的距離值,放子節點到OPEN表中。
4. 重復2,3,步。直到OPEN表為空,或找到目標點。
提高Dijkstra搜索速度的方法很多,常用的有數據結構採用Binary heap的方法,和用Dijkstra從起始點和終點同時搜索的方法。
A*(A-Star)演算法是一種啟發式演算法,是靜態路網中求解最短路最有效的方法。
公式表示為: f(n)=g(n)+h(n),
其中f(n) 是節點n從初始點到目標點的估價函數,
g(n) 是在狀態空間中從初始節點到n節點的實際代價,
h(n)是從n到目標節點最佳路徑的估計代價。
保證找到最短路徑(最優解的)條件,關鍵在於估價函數h(n)的選取:
估價值h(n)<= n到目標節點的距離實際值,這種情況下,搜索的點數多,搜索范圍大,效率低。但能得到最優解。
如果 估價值>實際值, 搜索的點數少,搜索范圍小,效率高,但不能保證得到最優解。
估價值與實際值越接近,估價函數取得就越好。
例如對於幾何路網來說,可以取兩節點間歐幾理德距離(直線距離)做為估價值,即f=g(n)+sqrt((dx-nx)*(dx-nx)+(dy-ny)*(dy-ny));這樣估價函數f在g值一定的情況下,會或多或少的受估價值h的制約,節點距目標點近,h值小,f值相對就小,能保證最短路的搜索向終點的方向進行。明顯優於Dijstra演算法的毫無無方向的向四周搜索。
conditions of heuristic
Optimistic (must be less than or equal to the real cost)
As close to the real cost as possible
主要搜索過程:
創建兩個表,OPEN表保存所有已生成而未考察的節點,CLOSED表中記錄已訪問過的節點。
遍歷當前節點的各個節點,將n節點放入CLOSE中,取n節點的子節點X,->算X的估價值->
While(OPEN!=NULL)
{
從OPEN表中取估價值f最小的節點n;
if(n節點==目標節點) break;
else
{
if(X in OPEN) 比較兩個X的估價值f //注意是同一個節點的兩個不同路徑的估價值
if( X的估價值小於OPEN表的估價值 )
更新OPEN表中的估價值; //取最小路徑的估價值
if(X in CLOSE) 比較兩個X的估價值 //注意是同一個節點的兩個不同路徑的估價值
if( X的估價值小於CLOSE表的估價值 )
更新CLOSE表中的估價值; 把X節點放入OPEN //取最小路徑的估價值
if(X not in both)
求X的估價值;
並將X插入OPEN表中; //還沒有排序
}
將n節點插入CLOSE表中;
按照估價值將OPEN表中的節點排序; //實際上是比較OPEN表內節點f的大小,從最小路徑的節點向下進行。
}
A*演算法和Dijistra演算法的區別在於有無估價值,Dijistra演算法相當於A*演算法中估價值為0的情況。
動態路網,最短路演算法 D*A* 在靜態路網中非常有效(very efficient for static worlds),但不適於在動態路網,環境如權重等不斷變化的動態環境下。
D*是動態A*(D-Star,Dynamic A*) 卡內及梅隆機器人中心的Stentz在1994和1995年兩篇文章提出,主要用於機器人探路。是火星探測器採用的尋路演算法。
主要方法:
1.先用Dijstra演算法從目標節點G向起始節點搜索。儲存路網中目標點到各個節點的最短路和該位置到目標點的實際值h,k(k為所有變化h之中最小的值,當前為k=h。每個節點包含上一節點到目標點的最短路信息1(2),2(5),5(4),4(7)。則1到4的最短路為1-2-5-4。
原OPEN和CLOSE中節點信息保存。
2.機器人沿最短路開始移動,在移動的下一節點沒有變化時,無需計算,利用上一步Dijstra計算出的最短路信息從出發點向後追述即可,當在Y點探測到下一節點X狀態發生改變,如堵塞。機器人首先調整自己在當前位置Y到目標點G的實際值h(Y),h(Y)=X到Y的新權值c(X,Y)+X的原實際值h(X).X為下一節點(到目標點方向Y->X->G),Y是當前點。k值取h值變化前後的最小。
3.用A*或其它演算法計算,這里假設用A*演算法,遍歷Y的子節點,點放入CLOSE,調整Y的子節點a的h值,h(a)=h(Y)+Y到子節點a的權重C(Y,a),比較a點是否存在於OPEN和CLOSE中,方法如下:
while()
{
從OPEN表中取k值最小的節點Y;
遍歷Y的子節點a,計算a的h值 h(a)=h(Y)+Y到子節點a的權重C(Y,a)
{
if(a in OPEN) 比較兩個a的h值
if( a的h值小於OPEN表a的h值 )
{ 更新OPEN表中a的h值;k值取最小的h值
有未受影響的最短路經存在
break;
}
if(a in CLOSE) 比較兩個a的h值 //注意是同一個節點的兩個不同路徑的估價值
if( a的h值小於CLOSE表的h值 )
{
更新CLOSE表中a的h值; k值取最小的h值;將a節點放入OPEN表
有未受影響的最短路經存在
break;
}
if(a not in both)
將a插入OPEN表中; //還沒有排序
}
放Y到CLOSE表;
OPEN表比較k值大小進行排序;
}
機器人利用第一步Dijstra計算出的最短路信息從a點到目標點的最短路經進行。
D*演算法在動態環境中尋路非常有效,向目標點移動中,只檢查最短路徑上下一節點或臨近節點的變化情況,如機器人尋路等情況。對於距離遠的最短路徑上發生的變化,則感覺不太適用。
⑷ 關鍵路徑怎麼算
輸入e條弧<j,k>,建立AOE網的存儲結構;從源點v1出發,令ve(1)=0,求 ve(j),2<=j<=n;從匯點vn出發,令vl(n)=ve(n),求 vl(i),1<=i<=n-1。
根據各頂點的ve和vl值,求每條弧s(活動)的最早開始時間e(s)和最晚開始時間l(s),其中e(s)=l(s)的為關鍵活動。
求關鍵路徑必須在拓撲排序的前提下進行,有環圖不能求關鍵路徑;只有縮短關鍵活動的工期才有可能縮短工期;若一個關鍵活動不在所有的關鍵路徑上,減少它並不能減少工期;只有在不改變關鍵路徑的前提下,縮短關鍵活動才能縮短整個工期。
(4)路徑計算方法擴展閱讀
在項目管理中,編制網路計劃的基本思想就是在一個龐大的網路圖中找出關鍵路徑,並對各關鍵活動,優先安排資源,挖掘潛力,採取相應措施,盡量壓縮需要的時間。
而對非關鍵路徑的各個活動,只要在不影響工程完工時間的條件下,抽出適當的人力、物力和財力等資源,用在關鍵路徑上,以達到縮短工程工期,合理利用資源等目的。在執行計劃過程中,可以明確工作重點,對各個關鍵活動加以有效控制和調度。
關鍵路徑法主要為一種基於單點時間估計、有嚴格次序的一種網路圖。它的出現為項目提供了重要的幫助,特別是為項目及其主要活動提供了圖形化的顯示,這些量化信息為識別潛在的項目延遲風險提供極其重要的依據。
⑸ 路徑的運算方法有幾種
以前看到過,貼給你 Private Function OrderXY(X() As Double,Y() As Double) Dim i,j,k,m,n,num,temp As Double Dim NewX() As Double Dim NewY() As Double Dim Smin As Double '定義最短總距離 If UBound(X()) UBound(Y()) Then MsgBox "坐標錯誤":Exit Function '防止數據錯誤 n = UBound(X()) ReDim p(n) As Long p(0) = 0:num = 1 For i = 1 To n p(i) = i 'p()數組依次存儲從0到n共n+1個數 num = num * i '計算num,num表示的是n個坐標(除X(0),Y(0)以外)共有n!種排列 Next ReDim Stance(num - 1) As Double '定義數組存儲每種連接方法的總距離 ReDim NewX(n) ReDim NewY(n) For i = 0 To n - 1 'Stance(0)是按照原坐標順序依次連接的總距離 Stance(0) = Stance(0) + Sqr((Y(i + 1) - Y(i)) * (Y(i + 1) - Y(i)) + (X(i + 1) - X(i)) * (X(i + 1) - X(i))) Next Smin = Stance(0) For k = 0 To n NewX(k) = X(k) NewY(k) = Y(k) Next i = n - 1 '下面對p()數組的n個數(除0以外)進行排列,每產生一種排列方式,坐標數組的數據就對應交換,並計算這一路徑的總距離 Do While i > 0 If p(i) < p(i + 1) Then For j = n To i + 1 Step -1 '從排列右端開始 If p(i) = j Then Exit For temp = p(i):p(i) = p(j):p(j) = temp temp = X(i):X(i) = X(j):X(j) = temp temp = Y(i):Y(i) = Y(j):Y(j) = temp Next m = m + 1 For k = 0 To n - 1 Stance(m) = Stance(m) + Sqr((Y(k + 1) - Y(k)) * (Y(k + 1) - Y(k)) + (X(k + 1) - X(k)) * (X(k + 1) - X(k))) Next If Stance(m)
⑹ 關鍵路徑怎麼求求詳解。
關鍵路徑的演算法是建立在拓撲排序的基礎之上的,這個演算法中用到了拓撲排序。
1. 什麼是拓撲排序?
舉個例子先:一個軟體專業的學生學習一系列的課程,其中一些課程必須再學完它的基礎的先修課程才能開始。如:在《程序設計基礎》和《離散數學》學完之前就不能開始學習《數據結構》。這些先決條件定義了課程之間的領先(優先)關系。這個關系可以用有向圖更清楚地表示。圖中頂點表示課程,有向邊表示先決條件。若課程i是課程j的先決條件,則圖中有弧<i,j>。若要對這個圖中的頂點所表示的課程進行拓撲排序的話,那麼排序後得到的序列,必須是按照先後關系進行排序,具有領先關系的課程必然排在以它為基礎的課程之前,若上例中的《程序設計基礎》和《離散數學》必須排在《數據結構》之前。進行了拓撲排序之後的序列,稱之為拓撲序列。
2. 如何實現拓撲排序?
很簡單,兩個步驟:
1. 在有向圖中選一個沒有前驅的頂點且輸出。
2. 從圖中刪除該頂點和以它為尾的弧。
重復上述兩步,直至全部頂點均已輸出,或者當前圖中不存在無前驅的頂點為止。後一種情況則說明有向圖中存在環。
3. 什麼是關鍵路徑?
例子開頭仍然,圖1是一個假想的有11項活動的A0E-網。其中有9個事件v1,v2......,v9,每個事件表示在它之前的活動一完成,在它之後的活動可以開始。如v1表示整個工程的開始,v9表示整個工程結束,v5表示a4和a5已完成,a7和a8可以開始。與每個活動相聯系的數是執行該活動所需的時間。比如,活動a1需要6天,a2需要4天。
packagegraph;
importjava.util.*;
publicclassGrph_CriticalPath
{
Graph_AdjListadjList;
Stack<Integer>T=newStack<Integer>();
intve[];
intvl[];
finalintmax=10000;
publicGrph_CriticalPath(Graph_AdjListadjList)//圖的存儲結構是用的鄰接表
{
this.adjList=adjList;
intlength=adjList.vetexValue.length;
ve=newint[length];
vl=newint[length];
for(inti=0;i<length;i++)
{
ve[i]=0;
vl[i]=max;
}
}
publicvoidgetCriticalPath()
{
topologicalOrder();
intt=T.pop();
T.push(t);
vl[t]=ve[t];
while(!T.isEmpty())
{
intj=T.pop();
for(Graph_AdjList.ArcNodep=adjList.vetex[j].firstArc;p!=null;p=p.next)
{
intk=p.adjvex;
if(vl[k]-p.weight<vl[j])
{
vl[j]=vl[k]-p.weight;
}
}
}
for(inti=0;i<ve.length;i++)
{
for(Graph_AdjList.ArcNodep=adjList.vetex[i].firstArc;p!=null;p=p.next)
{
intk=p.adjvex;
intee=ve[i];
intel=vl[k]-p.weight;
if(ee==el)
{
System.out.print(i+","+k+"");
}
}
}
}
publicvoidtopologicalOrder()
{
Stack<Integer>S=newStack<Integer>();
S.push(0);
intcount=0;
while(!S.isEmpty())
{
intj=S.pop();
T.push(j);
count++;
Graph_AdjList.ArcNodep=null;
for(p=adjList.vetex[j].firstArc;p!=null;p=p.next)
{
intk=p.adjvex;
if(--adjList.degree[k]==0)
{
S.push(k);
}
if(ve[j]+p.weight>ve[k])
{
ve[k]=ve[j]+p.weight;
}
}
}
if(count<adjList.vetexValue.length)
{
System.out.println("圖中存在環路!");
return;
}
}
publicvoidprint()
{
while(!T.isEmpty())
{
System.out.print(T.pop()+"");
}
}
publicvoidprintVel()
{
System.out.println();
for(inti=0;i<ve.length;i++)
{
System.out.print(ve[i]+"");
}
System.out.println();
for(inti=0;i<vl.length;i++)
{
System.out.print(vl[i]+"");
}
}
}
轉自:http://blog.csdn.net/pigli/article/details/5777048
⑺ photoshop怎麼對路徑進行運算
photoshop對路徑進行運算方法是:
1、新建白色背景文件,創建新圖層;
⑻ photoshop中兩個路徑的合並計算一共有四種計算方式
是的。分別是:合並形狀、減去頂層形狀、與形狀區域相交、排除重疊形狀
⑼ 路徑的運算方法有幾種
題主沒有說明路徑的演算法具體指哪種?比較常規的話,比舉個例子來說,a到b有三種途徑,b到c有四種途徑。提問,從a到c有幾種路徑可以走?那麼這種題目需要用乘法,因為
從a到b
有四種。選擇從b到c有三種選擇,所以每次都有
不同的選擇
,需要用乘法那應該是3×4等於12所以從a到c有12種路徑。
⑽ 哈弗H8有多少種路徑計算方式
哈弗H8觸摸【路徑計算】按鈕,進入路徑計算畫面。
·重新計算:重新計算當前的路徑。
·繞行計算:在已計算的路徑中,繞開所選公里數(可選2KM、4KM、6KM)的一段路徑,重新計算。若當前只有一條路可達到目的地,則不繞開。
·多路徑計算:將計算並顯示{4{種路線方案。
此問題適用於2018款車型。