自然鄰演算法
㈠ 什麼是網格演算法
網格化是解釋流程中構造成圖的比較重要的一步,演算法種類也比較多。在SMT中就列出了許多種演算法供選擇,當然每種演算法有自己的特點和適應性,所以在真正網格化操作時為了提高預測的精度需要選擇合適的演算法。如下為SMT中提供的幾種演算法簡單對比。
Collocated Cokriging
協克里金演算法
層位、斷層、網格、XYZ數據、層段屬性、鑽井分層(較好用於井數據與地震屬性匹配)
Cubic Spline
樣條插值
三維的層位、網格、斷層、XYZ數據
Flex Gridding
彈性網格化
層位、斷層、網格、XYZ數據、層段屬性、鑽井分層
Gradient Projection
梯度投影
二維、三維的層位、網格、斷層、等值線、XYZ數據(較好用於構造數據)
Inverse Distance to a Power
反距離加權
二維、三維的層位、網格、斷層、等值線、XYZ數據、層段屬性、鑽井分層(較好用於速度成圖)
Natural Neighbor
自然鄰點插值
XYZ數據、層段屬性、鑽井分層(較好用於非地震類數據)
Ordinary Kriging
普通克里金插值
XYZ數據、層段屬性、鑽井分層(較好用於滲透率成圖)
Simple Kriging
簡單克里金插值
XYZ數據、層段屬性、鑽井分層(較好用於滲透率成圖)
Universal Kriging
廣義克里金
XYZ數據、層段屬性、鑽井分層(較好用於滲透率圖件和有整體變化趨勢的數據)
這里對兩種演算法做個介紹:
1、SMT8.2版本中新出現的Flex Gridding 彈性網格化演算法
該演算法利用差分方程系統原理,產生的網格節點處數值需要滿足以下兩種原則:
. 內插面與實際數據產生的趨勢面一致或者很接近;
. 該面的RMS曲率值盡可能小。
如果在一個節點處應用每一種方程都計算差分的話,而且將鄰近點都考慮在內的話,其結果會形成一個組合,但越遠的點影響越弱、越不直接。因此,在計算時都假設鄰近節點為常數,每個方程就會得到一個網格數值。如此重復應用於其它節點處。這樣可以解決單個節點的問題,我們將方程稱為「調和器」。該方法產生的曲率面會趨於最小,而且逼近實際數據。
由於每個節點在進行調和濾波計算時都需要一個局部的調和器,網格節點多時就會有許多次迭代計算過程。迭代次數差不多為N的e次方(N為數據列/行數)。因此初始網格一般時非常小的。
2、Collocated Cokriging 協克里金插值
協克里金插值與克里金演算法原理基本一樣,都是通過差異比較來計算網格數值,同時產生方差圖,但是該方法假設事件都是多屬性的,可以利用第二種協數據(如層位)輔助第一種主數據進行稀疏數據點(如井控制點)的內插。
協克里金插值利用第二種協數據指導主數據的網格化,可以提高克里金插值的准確性。該演算法中斷層可以參與運算。在使用時用稀疏數據(如井數據)作為主數據,另外一種密集分布數據作為協數據。
在具體計算中網格點處主數據有值的地方都用主數據的值,如果網格點處沒有值時則用協數據作為輔助進行計算。並且會同時產生一個方差模型。
最終的協方差網格結果為主數據進行克里金插值,同時受協數據影響。
因此,如果主數據為密集分布的數據,計算產生的網格也會接近主數據。例如,數據中包括測井解釋的孔隙度數據(稀疏分布),從地震屬性中預測的偽孔隙度數據(密集分布)。數據單位是一致的,但來源可能不一樣。
對於這種情況下協克里金插值就是一種很好的網格演算法,還可以建立起振幅與孔隙度之間的關系。
在應用時有以下注意事項:
1)在主數據為稀疏分布,協數據偽密集分布時應用效果最好。
2)如果主數據與協數據之間有一定聯系的話效果最好。
3)數據類型最好一致。
㈡ 在用鄰接表表示圖時,對圖進行深度優先搜索遍歷的演算法的時間復雜度為()
因為當相鄰矩陣的大部分被破壞時,矩陣中的所有元素都需要掃並追蹤到,且元素個數為n^2,自然演算法為O(n^2)。
所以鄰接表只存儲邊或弧,如果掃描鄰接表,當然會得到O(n+e)其中n是頂點的數量,e的邊或弧的數量。
設有n個點,e條邊
鄰接矩陣:矩陣包含n^2個元素,在演算法中共n個頂點,對每個頂點都要遍歷n次,所以時間復雜度為O(n^2)。
鄰接表:包含n個頭結點和e個表結點,演算法中對所有結點都要遍歷一次,所以時間復雜度為O(n+e)順便,對於廣度優先演算法的時間復雜度,也是這樣。
(2)自然鄰演算法擴展閱讀:
鄰接表是圖的最重要的存儲結構之一,描述了圖上的每個點。創建一個容器對於每一個圖的頂點(n頂點n容器)和節點在第i個容器包含所有相鄰頂點的頂點Vi。事實上,我們經常使用的鄰接矩陣是一個鄰接表的邊集不離散化每一個點。
在有向圖中,描述每個點與另一個節點連接的邊(在a點->點B)。
在無向圖中,描述每個點上的所有邊(A點和B點的情況)
鄰接表對應的圖存儲方法稱為邊集表。此方法將所有邊存儲在容器中。
㈢ 什麼叫演算法演算法有哪幾種表示方法
演算法(Algorithm)是指解題方案的准確而完整的描述,是一系列解決問題的清晰指令,演算法代表著用系統的方法描述解決問題的策略機制。計算機科學家往往將「演算法」一詞的含義限定為此類「符號演算法」。「演算法」概念的初步定義:一個演算法是解決一個問題的進程。而並不需要每次都發明一個解決方案。
已知的演算法有很多,例如「分治法」、「枚舉測試法」、「貪心演算法」、「隨機演算法」等。
(3)自然鄰演算法擴展閱讀
演算法中的「分治法」
「分治法」是把一個復雜的問題拆分成兩個較為簡單的子問題,進而兩個子問題又可以分別拆分成另外兩個更簡單的子問題,以此類推。問題不斷被層層拆解。然後,子問題的解被逐層整合,構成了原問題的解。
高德納曾用過一個郵局分發信件的例子對「分治法」進行了解釋:信件根據不同城市區域被分進不同的袋子里;每個郵遞員負責投遞一個區域的信件,對應每棟樓,將自己負責的信件分裝進更小的袋子;每個大樓管理員再將小袋子里的信件分發給對應的公寓。