ta柵格演算法
1. A*演算法用於路徑規劃,有什麼缺點
缺點:A*演算法通過比較當前路徑柵格的8個鄰居的啟發式函數值F來逐步確定下一個路徑柵格,當存在多個最小值時A*演算法不能保證搜索的路徑最優。
A*演算法;A*(A-Star)演算法是一種靜態路網中求解最短路徑最有效的直接搜索方法。估價值與實際值越接近,估價函數取得就越好。A*[1] (A-Star)演算法是一種靜態路網中求解最短路最有效的直接搜索方法。注意是最有效的直接搜索演算法。之後涌現了很多預處理演算法(ALT,CH,HL等等),在線查詢效率是A*演算法的數千甚至上萬倍。公式表示為: f(n)=g(n)+h(n),其中 f(n) 是從初始點經由節點n到目標點的估價函數,g(n) 是在狀態空間中從初始節點到n節點的實際代價,h(n) 是從n到目標節點最佳路徑的估計代價。保證找到最短路徑(最優解的)條件,關鍵在於估價函數f(n)的選取:估價值h(n)<= n到目標節點的距離實際值,這種情況下,搜索的點數多,搜索范圍大,效率低。但能得到最優解。並且如果h(n)=d(n),即距離估計h(n)等於最短距離,那麼搜索將嚴格沿著最短路徑進行, 此時的搜索效率是最高的。如果 估價值>實際值,搜索的點數少,搜索范圍小,效率高,但不能保證得到最優解。
2. 柵格數據的編碼方法
編碼方法
在柵格文件中,每個柵格只能賦予一個唯一的屬性值,所以屬性個數的總數是柵格文件的行數乘以列數的積,而為了保證精度,柵格單元分得一般都很小,這樣需要存儲的數據量就相當大了。通常一個柵格文件的柵格單元數以萬計。但許多柵格單元與相鄰的柵格單元都具有相同的值,因此使用了各式各樣的數據編碼技術與壓縮編碼技術。主要的編碼技術簡介如下:
(一)直接柵格編碼
直接柵格編碼是將柵格數據看作一個數據短陣,逐行或逐列逐個記錄代碼。可每行從左到右逐個記錄,也可奇數行從左到右,偶數行從右到左記錄,為特定目的也可採用其它特殊順序。通常稱這種編碼的圖像文件為柵格文件,這種網格文件直觀性強,但無法採用任何種壓縮編碼方法。圖2.1 (c)的柵格編碼為:4,4,4,4,7,7,7,7;4,4,4,4,4,7,7,7;4,4,4,4,9,9,7,7;0,0,4,9,9,9,7,7;0,0,0,9,9,9,7,7;0,0,0,9,9,9,9,9;0,0,0,0,9,9,9,9;0,0,0,0,0,9,9,9。可用程序設計語言按順序文件或隨機文件記錄這些數據。
(二)鏈式編碼
鏈式編碼又稱弗里曼鏈碼或世界鏈碼。它由某一原始點和一系列在基本方向上數字確定的單位矢量鏈。基本方向有東、東南、南、西南、西、西北、北、東北等8個,每個後繼點位於其前繼點可能的8個基本方位之一。8個基本方向的代碼可分別用0,1,2,3,4,5,6,7表示,既可按順時針也可按逆時針表示。柵格結構按逆時針編碼上圖(2)可記錄為:1,3,7,7,7,6,6,5,4。其中前兩個數字1與3表示線狀物起點的坐標,即在第一行第三列,從第三個數字起表示單位矢量的前進方向。
鏈式編碼有效地壓縮了柵格數據,尤其對多邊形的表示最為顯著,鏈式編碼還有一定的運算能力,對計算長度、面積或轉折方向的凸凹度更為方便。比較適於存儲圖形數據。但對邊界做合並和插入等修改編輯工作很難實施,而且對局部修改要改變整體結構,效率較低。
(三)遊程編碼
遊程編碼是柵格數據壓縮的重要且比較簡單的編碼方法。它的基本思路是:對於一幅柵格圖像,常有行或列方向相鄰的若干點具有相同的屬性代碼,因而可採用某種方法壓縮重復的記錄內容。方法之一是在柵格數據陣列的各行或列象元的特徵數據的代碼發生變化時,逐個記錄該代碼及相同代碼重復的個數,從而可在二維平面內實現數據的大量壓縮。另一種編碼方案是在逐行逐列記錄屬性代碼時,僅記錄下發生變化的位置和相應的代碼。圖2.1 (c)柵格結構按遊程編碼方法可記錄為:
第一行4,47,4
第二行4,57,3
第三行4,49,27,2
第四行0,24,19,37,2
第五行0,39,37,2
第六行0,39,5
第七行0,49,4
第八行0,59,3
在這個例子中,原本64個柵格數據,只用了40數值就完整地表示了出來,可見用遊程編碼方法壓縮數據是十分有效的。
遊程編碼的編碼和解碼的演算法都比較簡單,佔用的計算機資源少,遊程編碼還易於檢索、疊加、合並等操作,在柵格單元分得更細時,數據的相關性越強,壓縮效率更高,數據量並沒有明顯增加。因此,該編碼適合微型計算機等中央處理器處理速度慢,存儲容量小的設備進行圖像處理。
(四)塊式編碼
塊式編碼是遊程編碼擴展到二維空間的情況,遊程編碼是在一維狀態記錄柵格單元的位置和屬性,如果採用正方形區域作為記錄單元,每個記錄單元包括相鄰的若干柵格,數據結構由記錄單元中左上角的柵格單元的行、列號(初始位置)和記錄單元的邊長(半徑)與記錄單元的屬性代碼三部分組成,這便是塊式編碼。因此可以說,遊程編碼是塊式編碼的特殊情況,塊式編碼是遊程編碼的一般形式。圖2.1 (c)表示的柵格結構按塊式編碼方法可記錄為:
(1,1,3,4),(1,4,1,4),(1,5,1,7),(1,6,2,7),(1,8,1,7);
(2,4,1,4),(2,5,1,4),(2,8,1,7);
(3,4,1,4),(3,5,2,9),(3,7,2,7);
(4,1,2,0),(4,3,1,4),(4,4,1,9);
(5,3,1,0),(5,4,2,9),(5,6,1,9),(5,7,1,7),(5,8,1,7);
(6,1,3,0),(6,6,3,9);
(7,4,1,0),(7,5,1,9),
(8,4,1,0),(8,5,1,0)。
從以上論述的塊式編碼的編碼原理可知,一個記錄單元所表示的地理數據相關性越強,也即記錄單元包含的正方形邊長越長,壓縮效率越高。而地理數據相關性差時,也即多邊形邊界碎雜時,塊式編碼的效果較差。
塊式編碼的運算能力弱,必要時其編碼的柵格數據須通過解碼轉換成柵格矩陣編碼的數據形式才能順利進行。塊式編碼在圖像合並、插入、面積計算等功能方面較強。
(五)四叉樹數據結構
四叉樹編碼又名四元樹編碼,可以通俗理解為一個具有四分枝結構的樹,它具有柵格數據二維空間分布的特徵,這是一種更為有效的編碼方法。四叉樹編碼將整個圖形區域按照四個象限遞歸分割成2n×2n象元陣列,形成過程是:將一個2×2圖像分解成大小相等的四部分,每一部分又分解成大小相等的四部分,就這樣一直分解下去,一直分解到正方形的大小正好與象元的大小相等為止,即逐步分解為包含單一類型的方形區域(均值塊),最小的方形區域為一個柵格單元。這個倒向樹狀的圖中「○」表示可繼續分割的方形區域;「□」表示具有同類屬性的方形區域;「■」表示不能再分的單個(最小)象元柵格,即所謂的樹葉,樹葉表示的是具有單一類型的地物或是符合既定要求的少數幾種地物,可以在任意層上。
通過以上對四叉樹結構的分析,可發現它有以下特點:
⑴ 存儲空間小:因為記錄的基本單位是塊,不是象素點,因此大大地節省了存儲空間。
⑵ 運算速度快:因為四叉樹結構的圖形操作是在數上進行的,比直接在圖上運算要快得多。
⑶ 柵格陣列各部分的解析度可變:不需要表示許多細節的地方,分級較少,因而解析度低;邊界復雜的地方分級較多,解析度高,因而在減少數據量的基礎上滿足了數據精度。
⑷ 容易有效地計算多邊形的數量特徵。
⑸ 與柵格結構之間的轉換,比其它壓縮方法容易。
⑹ 四叉樹編碼表示多邊形中嵌套其它屬性的多邊形時比較方便:它允許多邊形嵌套多邊形的結構,是非常實用的、重要的特點,這點深深得到地理信息系統數據編碼設計者的青睞。
⑺ 四叉樹編碼的不足之處是:轉換具有不確定性,對大小相等形狀相同的多邊形,不同人可能分解為不同的四叉樹結構,因而不利於形狀分析和模式識別。四叉樹編碼處理結構單調的圖形區域比較適合,壓縮效果好,但對具有復雜結構的圖形區域,壓縮效率會受到很大影響。
(六)八叉樹與十六叉樹結構
前面的數據結構都是基於二維的,在相當多的情況下,如地下資源埋藏、地下溶洞的空間分布,二維的坐標體系根本無法表達。因此需要有三維數據結構,如果考慮空間目標隨時間變化,那還需要4維數據結構。較好的表達三維與四維結構是在四叉樹基礎上發展起來的八叉樹(三維)和十六叉樹(四維)。
是將空間區域不斷地劃分為八個同樣大小的子區域,
(七)各種編碼的比較分析
比較以上各種編碼,可得出如下主要結論:
⑴ 直接柵格編碼直觀簡單,但數據出現大量冗餘;
⑵ 鏈式編碼對邊界的運算方便,壓縮效果好,但區域運算較困難;
⑶ 遊程編碼即較大幅度地保留了原始柵格結構,又有較高的壓縮效率,而且編碼解碼也較容易,但僅局限在一維空間上處理數據;
⑷ 塊式編碼在圖像合並、插入、面積計算等功能方面較強,當所表示的地理數據相關性強時,壓縮效率相當高;但地理數據相關性差時,塊式編碼的效果較差,而且塊式編碼的運算能力較弱;
⑸ 四叉樹編碼運算速度快,存儲空間小,解析度可變,壓縮效率高,但其轉換具有不確定性,難以形成統一演算法。