導航:首頁 > 源碼編譯 > 劃分過程的演算法

劃分過程的演算法

發布時間:2022-08-09 05:52:04

Ⅰ 快速排序演算法的示例代碼

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespacetest{classQuickSort{staticvoidMain(string[]args){int[]array={49,38,65,97,76,13,27};sort(array,0,array.Length-1);Console.ReadLine();}/**一次排序單元,完成此方法,key左邊都比key小,key右邊都比key大。**@paramarray排序數組**@paramlow排序起始位置**@paramhigh排序結束位置**@return單元排序後的數組*/privatestaticintsortUnit(int[]array,intlow,inthigh){intkey=array[low];while(low<high){/*從後向前搜索比key小的值*/while(array[high]>=key&&high>low)--high;/*比key小的放左邊*/array[low]=array[high];/*從前向後搜索比key大的值,比key大的放右邊*/while(array[low]<=key&&high>low)++low;/*比key大的放右邊*/array[high]=array[low];}/*左邊都比key小,右邊都比key大。//將key放在游標當前位置。//此時low等於high*/array[low]=key;foreach(intiinarray){Console.Write({0} ,i);}Console.WriteLine();returnhigh;}/**快速排序*@paramarry*@return*/publicstaticvoidsort(int[]array,intlow,inthigh){if(low>=high)return;/*完成一次單元排序*/intindex=sortUnit(array,low,high);/*對左邊單元進行排序*/sort(array,low,index-1);/*對右邊單元進行排序*/sort(array,index+1,high);}}}運行結果:27 38 13 49 76 97 65
13 27 38 49 76 97 6513 27 38 49 65 76 97
快速排序就是遞歸調用此過程——在以49為中點分割這個數據序列,分別對前面一部分和後面一部分進行類似的快速排序,從而完成全部數據序列的快速排序,最後把此數據序列變成一個有序的序列,根據這種思想對於上述數組A的快速排序的全過程如圖6所示:
初始狀態 {49 38 65 97 76 13 27} 進行一次快速排序之後劃分為 {27 38 13} 49 {76 97 65} 分別對前後兩部分進行快速排序{27 38 13} 經第三步和第四步交換後變成 {13 27 38} 完成排序。{76 97 65} 經第三步和第四步交換後變成 {65 76 97} 完成排序。圖示 快速排序的最壞情況基於每次劃分對主元的選擇。基本的快速排序選取第一個元素作為主元。這樣在數組已經有序的情況下,每次劃分將得到最壞的結果。一種比較常見的優化方法是隨機化演算法,即隨機選取一個元素作為主元。這種情況下雖然最壞情況仍然是O(n^2),但最壞情況不再依賴於輸入數據,而是由於隨機函數取值不佳。實際上,隨機化快速排序得到理論最壞情況的可能性僅為1/(2^n)。所以隨機化快速排序可以對於絕大多數輸入數據達到O(nlogn)的期望時間復雜度。一位前輩做出了一個精闢的總結:「隨機化快速排序可以滿足一個人一輩子的人品需求。」
隨機化快速排序的唯一缺點在於,一旦輸入數據中有很多的相同數據,隨機化的效果將直接減弱。對於極限情況,即對於n個相同的數排序,隨機化快速排序的時間復雜度將毫無疑問的降低到O(n^2)。解決方法是用一種方法進行掃描,使沒有交換的情況下主元保留在原位置。 QUICKSORT(A,p,r)
1if p<r
2then q ←PARTITION(A,p,r)
3QUICKSORT(A,p,q-1)
4QUICKSORT(A,q+1,r)
為排序一個完整的數組A,最初的調用是QUICKSORT(A,1,length[A])。
快速排序演算法的關鍵是PARTITION過程,它對子數組A[p..r]進行就地重排:
PARTITION(A,p,r)
1x←A[r]
2i←p-1
3for j←p to r-1
4do if A[j]≤x
5then i←i+1
6exchange A[i]←→A[j]
7exchange A[i+1]←→A[r]
8return i+1 對PARTITION和QUICKSORT所作的改動比較小。在新的劃分過程中,我們在真正進行劃分之前實現交換:
(其中PARTITION過程同快速排序偽代碼(非隨機))
RANDOMIZED-PARTITION(A,p,r)
1i← RANDOM(p,r)
2exchange A[r]←→A[i]
3return PARTITION(A,p,r)
新的快速排序過程不再調用PARTITION,而是調用RANDOMIZED-PARTITION。
RANDOMIZED-QUICKSORT(A,p,r)
1if p<r
2then q← RANDOMIZED-PARTITION(A,p,r)
3RANDOMIZED-QUICKSORT(A,p,q-1)
4RANDOMIZED-QUICKSORT(A,q+1,r) 這里為方便起見,我們假設演算法Quick_Sort的范圍閾值為1(即一直將線性表分解到只剩一個元素),這對該演算法復雜性的分析沒有本質的影響。
我們先分析函數partition的性能,該函數對於確定的輸入復雜性是確定的。觀察該函數,我們發現,對於有n個元素的確定輸入L[p..r],該函數運行時間顯然為θ(n)。
最壞情況
無論適用哪一種方法來選擇pivot,由於我們不知道各個元素間的相對大小關系(若知道就已經排好序了),所以我們無法確定pivot的選擇對劃分造成的影響。因此對各種pivot選擇法而言,最壞情況和最好情況都是相同的。
我們從直覺上可以判斷出最壞情況發生在每次劃分過程產生的兩個區間分別包含n-1個元素和1個元素的時候(設輸入的表有n個元素)。下面我們暫時認為該猜測正確,在後文我們再詳細證明該猜測。
對於有n個元素的表L[p..r],由於函數Partition的計算時間為θ(n),所以快速排序在序壞情況下的復雜性有遞歸式如下:
T(1)=θ(1),T(n)=T(n-1)+T(1)+θ(n) (1)
用迭代法可以解出上式的解為T(n)=θ(n2)。
這個最壞情況運行時間與插入排序是一樣的。
下面我們來證明這種每次劃分過程產生的兩個區間分別包含n-1個元素和1個元素的情況就是最壞情況。
設T(n)是過程Quick_Sort作用於規模為n的輸入上的最壞情況的時間,則
T(n)=max(T(q)+T(n-q))+θ(n),其中1≤q≤n-1 (2)
我們假設對於任何k<n,總有T(k)≤ck,其中c為常數;顯然當k=1時是成立的。
將歸納假設代入(2),得到:
T(n)≤max(cq2+c(n-q)2)+θ(n)=c*max(q2+(n-q)2)+θ(n)
因為在[1,n-1]上q2+(n-q)2關於q遞減,所以當q=1時q2+(n-q)2有最大值n2-2(n-1)。於是有:
T(n)≤cn2-2c(n-1)+θ(n)≤cn2
只要c足夠大,上面的第二個小於等於號就可以成立。於是對於所有的n都有T(n)≤cn。
這樣,排序演算法的最壞情況運行時間為θ(n2),且最壞情況發生在每次劃分過程產生的兩個區間分別包含n-1個元素和1個元素的時候。
時間復雜度為o(n2)。
最好情況
如果每次劃分過程產生的區間大小都為n/2,則快速排序法運行就快得多了。這時有:
T(n)=2T(n/2)+θ(n),T(1)=θ(1) (3)
解得:T(n)=θ(nlogn)
快速排序法最佳情況下執行過程的遞歸樹如下圖所示,圖中lgn表示以10為底的對數,而本文中用logn表示以2為底的對數.
由於快速排序法也是基於比較的排序法,其運行時間為Ω(nlogn),所以如果每次劃分過程產生的區間大小都為n/2,則運行時間θ(nlogn)就是最好情況運行時間。
但是,是否一定要每次平均劃分才能達到最好情況呢?要理解這一點就必須理解對稱性是如何在描述運行時間的遞歸式中反映的。我們假設每次劃分過程都產生9:1的劃分,乍一看該劃分很不對稱。我們可以得到遞歸式:
T(n)=T(n/10)+T(9n/10)+θ(n),T(1)=θ(1) (4)
請注意樹的每一層都有代價n,直到在深度log10n=θ(logn)處達到邊界條件,以後各層代價至多為n。遞歸於深度log10/9n=θ(logn)處結束。這樣,快速排序的總時間代價為T(n)=θ(nlogn),從漸進意義上看就和劃分是在中間進行的一樣。事實上,即使是99:1的劃分時間代價也為θ(nlogn)。其原因在於,任何一種按常數比例進行劃分所產生的遞歸樹的深度都為θ(nlogn),其中每一層的代價為O(n),因而不管常數比例是什麼,總的運行時間都為θ(nlogn),只不過其中隱含的常數因子有所不同。(關於演算法復雜性的漸進階,請參閱演算法的復雜性)
平均情況
快速排序的平均運行時間為θ(nlogn)。
我們對平均情況下的性能作直覺上的分析。
要想對快速排序的平均情況有個較為清楚的概念,我們就要對遇到的各種輸入作個假設。通常都假設輸入數據的所有排列都是等可能的。後文中我們要討論這個假設。
當我們對一個隨機的輸入數組應用快速排序時,要想在每一層上都有同樣的劃分是不太可能的。我們所能期望的是某些劃分較對稱,另一些則很不對稱。事實上,我們可以證明,如果選擇L[p..r]的第一個元素作為支點元素,Partition所產生的劃分80%以上都比9:1更對稱,而另20%則比9:1差,這里證明從略。
平均情況下,Partition產生的劃分中既有「好的」,又有「差的」。這時,與Partition執行過程對應的遞歸樹中,好、差劃分是隨機地分布在樹的各層上的。為與我們的直覺相一致,假設好、差劃分交替出現在樹的各層上,且好的劃分是最佳情況劃分,而差的劃分是最壞情況下的劃分。在根節點處,劃分的代價為n,劃分出來的兩個子表的大小為n-1和1,即最壞情況。在根的下一層,大小為n-1的子表按最佳情況劃分成大小各為(n-1)/2的兩個子表。這兒我們假設含1個元素的子表的邊界條件代價為1。
在一個差的劃分後接一個好的劃分後,產生出三個子表,大小各為1,(n-1)/2和(n-1)/2,代價共為2n-1=θ(n)。一層劃分就產生出大小為(n-1)/2+1和(n-1)/2的兩個子表,代價為n=θ(n)。這種劃分差不多是完全對稱的,比9:1的劃分要好。從直覺上看,差的劃分的代價θ(n)可被吸收到好的劃分的代價θ(n)中去,結果是一個好的劃分。這樣,當好、差劃分交替分布劃分都是好的一樣:仍是θ(nlogn),但θ記號中隱含的常數因子要略大一些。關於平均情況的嚴格分析將在後文給出。
在前文從直覺上探討快速排序的平均性態過程中,我們已假定輸入數據的所有排列都是等可能的。如果輸入的分布滿足這個假設時,快速排序是對足夠大的輸入的理想選擇。但在實際應用中,這個假設就不會總是成立。
解決的方法是,利用隨機化策略,能夠克服分布的等可能性假設所帶來的問題。
一種隨機化策略是:與對輸入的分布作「假設」不同的是對輸入的分布作「規定」。具體地說,在排序輸入的線性表前,對其元素加以隨機排列,以強制的方法使每種排列滿足等可能性。事實上,我們可以找到一個能在O(n)時間內對含n個元素的數組加以隨機排列的演算法。這種修改不改變演算法的最壞情況運行時間,但它卻使得運行時間能夠獨立於輸入數據已排序的情況。
另一種隨機化策略是:利用前文介紹的選擇支點元素pivot的第四種方法,即隨機地在L[p..r]中選擇一個元素作為支點元素pivot。實際應用中通常採用這種方法。
快速排序的隨機化版本有一個和其他隨機化演算法一樣的有趣性質:沒有一個特別的輸入會導致最壞情況性態。這種演算法的最壞情況性態是由隨機數產生器決定的。你即使有意給出一個壞的輸入也沒用,因為隨機化排列會使得輸入數據的次序對演算法不產生影響。只有在隨機數產生器給出了一個很不巧的排列時,隨機化演算法的最壞情況性態才會出現。事實上可以證明幾乎所有的排列都可使快速排序接近平均情況性態,只有非常少的幾個排列才會導致演算法的近最壞情況性態。
一般來說,當一個演算法可按多條路子做下去,但又很難決定哪一條保證是好的選擇時,隨機化策略是很有用的。如果大部分選擇都是好的,則隨機地選一個就行了。通常,一個演算法在其執行過程中要做很多選擇。如果一個好的選擇的獲益大於壞的選擇的代價,那麼隨機地做一個選擇就能得到一個很有效的演算法。我們在前文已經了解到,對快速排序來說,一組好壞相雜的劃分仍能產生很好的運行時間 。因此我們可以認為該演算法的隨機化版本也能具有較好的性態。

Ⅱ 快速排序的一次劃分過程

快速排序(Quicksort)是對冒泡排序的一種改進,由東尼·霍爾在1960年提出。 快速排序是指通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部分數據分別進行快速排序。整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。
快速排序使用分治法(Divide and conquer)策略來把一個序列(list)分為兩個子序列(sub-lists)。

步驟為:

從數列中挑出一個元素,稱為「基準」(pivot),

重新排序數列,所有比基準值小的元素擺放在基準前面,所有比基準值大的元素擺在基準後面(相同的數可以到任何一邊)。在這個分區結束之後,該基準就處於數列的中間位置。這個稱為分區(partition)操作。

遞歸地(recursively)把小於基準值元素的子數列和大於基準值元素的子數列排序。

遞歸到最底部時,數列的大小是零或一,也就是已經排序好了。這個演算法一定會結束,因為在每次的迭代(iteration)中,它至少會把一個元素擺到它最後的位置去。
上面簡單版本的缺點是,它需要的額外存儲空間,也就跟歸並排序一樣不好。額外需要的存儲器空間配置,在實際上的實現,也會極度影響速度和緩存的性能。有一個比較復雜使用原地(in-place)分區演算法的版本,且在好的基準選擇上,平均可以達到空間的使用復雜度。

Ⅲ 地球收縮運動的參數演算法與階段劃分

從地球膨脹說,到地球收縮說、地球脈動說,再到地球周期性脹縮論,人類認識地球運動的本質過程經歷了從歸納推理到演繹推理到綜合認識的演變,這種認識的轉變完成了從最初的依據現象假說本質上升到理論聯系實際的哲學過程。

在上一節里,討論了地球膨脹過程的問題,我們說地球膨脹包含兩方面內容:一是指地球的整個脹縮運動過程呈膨脹的趨勢;二是指地球周期性脹縮過程中的膨脹過程,因此,在討論地球膨脹階段劃分時,特意將地球收縮階段單列出。本節的主要論點則集中在地球收縮運動方面。

地球的收縮運動是人們最早認識的地殼構造運動之一。本節將在總結地球收縮運動證據的基礎上,提出地球陸塊中央的推覆運動模式。對因地球收縮所產生的周長改變數(△L)、半徑改變數(△R)、體積改變數(△V)等,分別建立理論計算公式,並對公式中有關參數的取值辦法做出相應說明。將地球在收縮力作用下發生收縮運動的過程分為四個階段,即:體積縮小的初始階段;周長、表面積減小階段;收縮力持續增大作用階段;收縮力持續減小作用階段。

對地球收縮過程中發生的板塊匯聚與沖撞進行理論劃分,認為板塊之間的壓縮效應可分為6種,即:上舉式、下沉式、入覆式、包嵌式、推疊式、鉚鉤式等。

1.收縮參數的求取

1.1地球收縮所產生的周長改變數(△L)

設地球膨脹後收縮前的周長為LA,地球收縮運動結束後切膨脹前的周長為LB,則地球收縮運動所產生的周長改變數

地球動力與運動

式中各參數的單位可以是m、km,但計算中要注意前後單位的統一。

實際工作中,地球周長的改變數可按下式求取:

地球動力與運動

設:i=1,L1為洋殼縮短量(km);

i=2,L2為山體縮短量(km);

i=3,L3為海溝縮短量(km);

i=4,L4為板緣推覆縮短量(km);

i=5,L5為板內推覆縮短量(km);

i=6,L6為逆斷裂超覆縮短量(km);

i=7,L7為地層褶皺縮短量(km);

k為遺漏項縮短量(km)。

這樣,式(4-14)簡化為:

地球動力與運動

在運用式(4-15)時,有兩點一定要注意:一是,計算時應該是同一高度,特別是全球性的數據問題,如果沒有統一的高度,你用海拔0線,他用海拔10m線,或者此地用一個高度值,彼地用另一個高度值,那麼,所得結果存在誤差,應該根據全球海平面加以校正;二是,計算應該在同一個過地球球心的切面圓周上進行,否則,所統計的結果極容易擴大。

實際計算中,式(4-15)的每一項都是一個累計求和公式:

地球動力與運動

i的變化表示統計項的不同,j的變化表示統計地區的不同。這樣,式(4-15)可改寫成如下完整形式:

地球動力與運動

計算辦法大多是現成的,如平衡剖面法,古地磁分析法等。

平衡剖面法用來計算L2、L4、L5、L6、L7已有廣泛的報道,如曾融生等在計算了喜馬拉雅—祁連山的大陸碰撞過程後,得出自50Ma印度次大陸和羌塘塊體向特提斯喜馬拉雅和拉薩塊體地殼擠入的長度分別為508km和429km,等。

古地磁分析法用來計算L1,是一種較能被人接受的辦法,盡管誤差可能較大,但目前卻較為現實。用古地磁數據計算板塊間的洋殼消失量的步驟:第一,選定邊界條件。找出即將工作的線路應該屬於統計地球圓周的線路,選准海拔面所對應的目的層系,找到板塊間的縫合處。第二,分析古地磁數據。在縫合帶兩側不同的板塊上取得各種不同年齡岩石的磁化數據,確定古地磁緯度,做出每一塊岩石形成磁化時古磁緯度圖。第三,計算洋殼消失量。比較兩板塊之間的相對位置,劃定計算的地史時間段,計算洋殼消失的長度。

由於海溝一直以來被認為是洋殼的消亡處,並沒被認為是地球收縮時的產物之一,所以,關於海溝使地殼長度縮短的問題幾乎無人計算。計算海溝的縮減量也可以按照上述方法進行。如果想避開海溝,找一條不過海溝的切面也是可以的。

計算地殼周長的縮短量,應該視所選切面的圓周上是否包含式(4-17)中的各項因素,並不是所有的路徑都含有洋殼的縮短問題、海溝問題等,計算前可以先進行歸類。

圖4-16是關於塔里木盆地西北緣柯坪造山帶的構造改變數的恢復情況,可見,近東西向的I線推覆量為80km,Ⅱ線推覆量為68km,近南北向的BB′線(圖4-16乙)在沒有消除東西向推覆影響的前提下,所算出的縮短量達到50%,而CC′線(圖4-16丙)的縮短量有28%,這樣在喜馬拉雅造山期,僅柯坪地區就至少完成了地殼表面積1564km2的收縮量(蔡東升,等,1996)。

1.2地球收縮所產生的半徑改變數(△R)

在獲得周長改變數之後求半徑改變數,可按下式計算:

地球動力與運動

圖4-16塔里木盆地西北緣柯坪造山帶構造恢復情況(據蔡東升等,1996)

甲—東西向平面斷裂恢復;乙—BB′平衡剖面;丙—CC′平衡剖面

1.3地球收縮所產生的體積改變數(△V)

地球的體積改變數由下式計算:

地球動力與運動

式(4-19)中的RA或RB可以通過現代地球物理方法測定,而另一個可求。

可以確定,由於地球的脹縮力在作用時間和作用力絕對值方面存在著差異,地球的膨脹力雖然作用時間較短,但絕對作用力大,所以,所得地球膨脹的體積改變數、半徑改變數、表面積改變數、周長改變數的絕對值都將比地球收縮的對應量的絕對值大。就是說地球每繞銀核一周,體積將越來越大。

2.地球的收縮模式

收縮力作用於地球的整個階段無疑都使地球表現為體積的收縮,為了分析問題的方便,現將地球在收縮力作用下發生收縮運動的過程分為四個階段,即:體積縮小的初始階段,周長、表面積減小階段,收縮力持續增大作用階段,收縮力持續減小作用階段。

2.1體積縮小的初始階段

地球體積縮小的初始階段是指地球從受收縮力作用開始到地殼進行縮短之前的階段,是一種理想的階段,實際上無法判斷。

即使不考慮溫度、物態對物體壓縮效應的影響,由於地殼的絕對厚度遠小於地球其他層圈的厚度,所以,在同一收縮力作用場的作用下,相等的時間內,地殼的縮短量遠小於其他層圈的縮短量累加值。那麼,在地球縮小的初始階段(假定沒有地殼的斷裂或者形變),就會在岩石圈和軟流圈之間形成一個空腔層(見圖4-17),如果將空腔的內球和外球殼形成內接,則在內接點的對應側,出現大體積的空缺,使外層岩石圈形成懸空狀態,從而了地殼發生收縮運動的環境。

圖4-17地球收縮的初始階段示意圖

(a)地球收縮時各層圈都將產生縮小量,岩石圈的縮小量是其他層圈縮小量的千分之幾;(b)將這些縮小量在一側富集,形成了大量的空腔(實線代表收縮前,虛線代表收縮後)

2.2周長、表面積縮小階段

周長、表面積縮小階段是指地殼開始大范圍的出現壓應斷裂到地殼停止大范圍出現壓性斷裂的階段。這一階段實質上包含了後面即將談到的兩個階段。

任何的破碎都是在地殼的最脆弱處進行,地殼板塊的結合處無疑是最易破碎處(圖4-18),當地球收縮,在岩石圈下產生體積空腔後,地殼在其自身重力作用下,將壓力向球殼的四周傳遞,當壓力遇到受力易碎處時,就會形成水平方向的壓縮力(圖中放大虛框內)。板塊1與板塊2之間的壓縮效應可分為6種(見圖4-19)。

圖4-18地殼板塊的結合處為地殼收縮的優先點,重力可以轉變成水平壓力

圖4-19地球收縮時板塊間所體現的壓縮方式示意圖

(a)上舉式(高聳山脈);(b)下沉式(海溝);(c)入覆式;(d)包嵌式;(e)推疊式;(f)鉚鉤式;A—原板塊結合處

圖4-19中所列各種並沒有包含地殼縮短方式的全部,僅僅是羅列了發生在板塊之間的幾種大型的使地殼縮短的方式,如圖4-20所列方式以及發生在板塊內部的小型逆斷裂等均未加以考慮。

圖4-20印度—歐亞大陸之間的碰撞過程示意圖

(1)上舉式:這是一種大陸和大陸之間的碰撞方式。一般地,由於大陸和大陸在結合處具有相等或相近的厚度,使得水平壓力的受力面積相等,在結合面上形成「僵持」。另外,地球的球體外形使結合面兩側的陸塊保持上凸狀態,因此,在壓力的持續作用下,陸塊與陸塊最先跟從的方向為向球外突出,即上舉。上舉變形描述的只是大陸與大陸因地球收縮導致形變的初步,緊隨其後的是岩石破碎、斷裂、岩層沿斷裂面的滑動等,極易造成上舉的結束。

(2)下沉式:也是一種大陸和大陸之間的碰撞方式。如果下沉式發生在收縮力持續增加階段,則下沉式為上舉式的繼續,如果下沉式在收縮力持續減小階段產生,則下沉式的結果可能是海溝的一種。

當下沉式作為上舉式的繼續時,其形成機制是這樣的:當A兩側岩層上舉,岩層所受作用力超過岩石的最大載荷發生斷裂,造成地殼的第一次縮短,縮短量為斷裂段的長度。在收縮力的持續作用下,主體段將繼續相向靠攏,理論上將發生第二次上舉,但是,因為第一上舉的最後結果形成了斷裂後的岩石堆積,其產生的重力壓力改變了A處的初始邊界條件,造成了A兩側板塊結合帶呈下凹態勢,從而導致了陸塊與陸塊的下沉式出現。

引入注目的印度—歐亞板塊的碰撞過程,其實包含了上舉和下沉的發展過程,盡管之前可能有其他形式的板塊間的碰撞,但那已不是陸塊和陸塊之間的碰撞(見圖4-20)。

(3)入覆式:這是一種厚的板塊1和薄的板塊2發生碰撞體現最多的一種方式。在結合面上,薄殼的承壓面小於厚殼的承壓面,因而,薄殼的壓應力大於厚殼的壓應力(圖4-21),在持續的壓力作用下,薄殼就像一把尖刀,輕松地插入或切削厚殼,最後形成薄殼潛入、厚殼上覆的「入覆式」地殼縮短模式。一般地,洋殼較陸殼薄,所以在板塊的碰撞過程中,洋殼總是在陸殼之下出現。

圖4-21薄殼板塊和厚殼板塊碰撞時的承壓分析

(a)厚殼,具有大的承壓面,因而,單位面積承壓量較小;(b)薄殼,具有小的承壓面,因而,單位面積承壓量較大

(4)包嵌式:也是一種厚的板塊1和薄的板塊2發生碰撞的方式,與入覆式不同之處在於薄殼沒有切削厚殼,也不是潛入到厚殼底下,而是嵌入到厚殼之中,將厚的板塊分成上下兩部分,形成厚殼包著薄殼,薄殼嵌入厚殼的包嵌式地殼縮短模式。其承壓分析同入覆式。

(5)推疊式:當A兩側板塊物性相差較大時,板塊碰撞就會產生一側較另一側更易破裂的形變,從而形成推疊式的地殼縮短模式。這是自然界較發育的一種模式。

(6)鉚鉤式:這是一種收縮力持續減小階段產生的板塊碰撞模式,它是推疊式發育不全的產物。當收縮力使地殼碰撞發生了形變後,持續的收縮力越來越小,以後所產生的壓力形成慢慢釋放的狀態,以至不能再改變岩石,形成了鉚鉤式。

2.3地球周長改變數持續增大階段

地球周長改變數持續增大階段是指地殼開始大范圍的出現壓應斷裂到老地層不斷出現在新地層之上、陸塊運移速度迅速並持續增加的階段。由於收縮力的持續作用,地殼內部物質的收縮量越來越大,「空腔」在單位時間內形成的體積越來越大,導致地球固體表層的承壓力越來越大,地殼的形變強度也就越來越大,板塊間在完成最初的幾種模式接觸碰撞後,為適應越來越大的地殼縮短量,即產生強烈的、急促的變形,地殼主體的不斷跟進,使原本破碎的斷塊不斷地向外逃逸,形成老地層的接連暴露、飛來峰等。此階段為地殼縮短的黃金時段,在此時段,那些完成了入覆式碰撞的板塊相對運動,則體現出洋殼的急速減退,陸塊運移速度迅速加大,如果是封閉的或具有狹窄出口的海洋,此時會形成海進的假象,這種假象的持續時間有半個地球收縮期到整個地球收縮期長,這種假象只有等下一次的地球膨脹運動才消失,但又將造成新的假象。

2.4地球周長改變數持續減小階段

地球周長改變數持續減小階段是指老地層不再覆蓋新地層、板塊運移速度不再迅速提升到地殼停止大范圍出現壓性斷裂的階段。

在這一階段里,地殼的彎曲變形幅度由強變弱,慢慢消失。體現在山區地貌上的特徵是,由推覆斷裂或大型逆掩斷裂邊緣到盆地邊緣是幅度逐漸變小的背斜帶,最後生成的背斜兩翼甚至沒有斷裂。如准噶爾盆地的南緣山前褶皺帶、昆侖山北緣山前褶皺帶等,即是本階段產物。

綜上所述,如果選定一個切面,確定了在這個切面上需要計算的時代地層,在滿足了計算前提條件下,分析出這個切面的地殼收縮包含了上舉式、下沉式、推疊式、鉚鉤式和板內褶皺與逆斷裂幾種地殼的縮短方式。通過計算,分別獲得了各種方式的地殼縮短量為△L1、△L2、△L3、△L4、△L5(見圖4-22),則地殼在這次收縮運動中周長總收縮量及地殼收縮前的長度可求。

圖4-22地球周長的收縮方式示意圖

L—地球收縮前的周長;L′—地球收縮後的周長;△L—地球周長收縮量

3.關於地球收縮過程中的地方性裂谷形成

如果以2.5×108a作為地球繞銀核的周期,以地球目前處於收縮力持續減小作用階段為置信水平,那麼,地球發生收縮運動的時間長度為約為1.269×108a,這是一個漫長的時間段,在這個時間段內,地球還將繞太陽旋轉1.269億多周,地球受銀核與太陽的潮汐力作用形成地球—太陽—銀核一線的機會為2.54億次,如果形成潮汐干涉的幾率為億分之一,則在地球的收縮期內出現地幔潮汐因干涉加強振幅的次數為2~3次,因地幔物質的局部富集而出現局部膨脹,從而將出現在地球收縮過程中的地方性裂谷。

圖4-23一個擠壓式地塹的例子(據Wise,1963:轉引自王燮培等,1992)

地球收縮期形成裂谷和地塹的現象常見報道,如圖4-23的例子。

那些在擠壓作用之後出現的伸展作用所造成的山中地塹的構造格局的現象也常被人們研究,如:西歐地塹、秘魯的安第斯山西部地塹(如圖4-24)等。

圖4-24安第斯山(秘魯)概略剖面圖(據M馬托埃,1982)

剖面西部發生伸展,東部發生擠壓

圖4-23這類與擠壓相伴隨的張性構造,是屬於應力轉換的結果,主要作用力與次生作用力的力源相同,都是擠壓力,擠壓與引張形成的構造在同一地點。圖2-24這類在擠壓期形成的張性構造,背景為擠壓的,局部為張性的,力源不同,擠壓力為地球收縮期的大背景力,張性力為地球的潮汐力形成局部峰值所造成,兩者作用為先後關系,形成的構造可以不在同一地點。

4.關於地球收縮過程中的地方性海侵

當地球收縮時,收縮力持續增加,地殼周長將會迅速減小,導致板塊相對位置改變的速度急速變化,如果這時在兩個相對位置迅速的陸塊之間為封閉的海洋或開口較小的海洋,那麼,在此兩陸塊間將出現海侵(或海平面上升)。

5.小結

地球的膨脹運動和收縮運動是地球運動產生地質改變的兩個大的單元,是不可抗拒的運動,地球上的板塊運動屬於球面質點運動的一部分,被包含於其中,在各種計算因素中可清楚地看出這點。在礦產普查與勘探中,總是要涉及到各種斷裂和褶皺,我們深信,關於地球膨脹階段和地球收縮階段的劃分及其各種模式的建立,對油氣勘探領域、構造單元等的劃分將產生幫助。

Ⅳ 譜聚類演算法的劃分准則

譜聚類演算法將聚類問題轉化為圖的劃分問題之後,基於圖論的劃分准則的優劣直接影響到聚類結果的好壞。常見的劃分准則有Mini cut,Average cut,Normalized cut,Min-max cut,Ratio cut,MNcut等。 Mini cut准則容易出現分割出只包含幾個頂點的較小子圖的歪斜分割現象,Ratio cut和Normalized cut等在一定程度上可以避免這種現象,但是當類間重疊嚴重時歪斜分割現象仍舊會發生。Chris Ding等人提出的基於Min-max cut的圖劃分方法充分體現了「子圖內部相似度最大,子圖之間的相似度最小」原則,能夠產生比較平衡劃分。
上述五種劃分都是不斷地將圖劃分為2個子圖的反復迭代運算過程,當劃分函數的最小值滿足一定的條件時迭代過程便會終止,相應的函數可以稱為2-way劃分函數。 Meilă和Xu[64]認為可以同時把圖劃分為k個子圖並於2004年提出了一種k-way規范割目標函數,而且對於參數k的選取問題也作了分析說明。
我們可以發現當k=2時,MNcut與Ncut兩者是等價的。

Ⅳ 排序演算法的比較,選擇5種排序演算法完成排序比較結果,包括運算時間等

排序演算法
<script>
Array.prototype.swap = function(i, j)
{
var temp = this[i];
this[i] = this[j];
this[j] = temp;
}

Array.prototype.bubbleSort = function()
{
for (var i = this.length - 1; i > 0; --i)
{
for (var j = 0; j < i; ++j)
{
if (this[j] > this[j + 1]) this.swap(j, j + 1);
}
}
}

Array.prototype.selectionSort = function()
{
for (var i = 0; i < this.length; ++i)
{
var index = i;
for (var j = i + 1; j < this.length; ++j)
{
if (this[j] < this[index]) index = j;
}
this.swap(i, index);
}
}

Array.prototype.insertionSort = function()
{
for (var i = 1; i < this.length; ++i)
{
var j = i, value = this[i];
while (j > 0 && this[j - 1] > value)
{
this[j] = this[j - 1];
--j;
}
this[j] = value;
}
}

Array.prototype.shellSort = function()
{
for (var step = this.length >> 1; step > 0; step >>= 1)
{
for (var i = 0; i < step; ++i)
{
for (var j = i + step; j < this.length; j += step)
{
var k = j, value = this[j];
while (k >= step && this[k - step] > value)
{
this[k] = this[k - step];
k -= step;
}
this[k] = value;
}
}
}
}

Array.prototype.quickSort = function(s, e)
{
if (s == null) s = 0;
if (e == null) e = this.length - 1;
if (s >= e) return;
this.swap((s + e) >> 1, e);
var index = s - 1;
for (var i = s; i <= e; ++i)
{
if (this[i] <= this[e]) this.swap(i, ++index);
}
this.quickSort(s, index - 1);
this.quickSort(index + 1, e);
}

Array.prototype.stackQuickSort = function()
{
var stack = [0, this.length - 1];
while (stack.length > 0)
{
var e = stack.pop(), s = stack.pop();
if (s >= e) continue;
this.swap((s + e) >> 1, e);
var index = s - 1;
for (var i = s; i <= e; ++i)
{
if (this[i] <= this[e]) this.swap(i, ++index);
}
stack.push(s, index - 1, index + 1, e);
}
}

Array.prototype.mergeSort = function(s, e, b)
{
if (s == null) s = 0;
if (e == null) e = this.length - 1;
if (b == null) b = new Array(this.length);
if (s >= e) return;
var m = (s + e) >> 1;
this.mergeSort(s, m, b);
this.mergeSort(m + 1, e, b);
for (var i = s, j = s, k = m + 1; i <= e; ++i)
{
b[i] = this[(k > e || j <= m && this[j] < this[k]) ? j++ : k++];
}
for (var i = s; i <= e; ++i) this[i] = b[i];
}

Array.prototype.heapSort = function()
{
for (var i = 1; i < this.length; ++i)
{
for (var j = i, k = (j - 1) >> 1; k >= 0; j = k, k = (k - 1) >> 1)
{
if (this[k] >= this[j]) break;
this.swap(j, k);
}
}
for (var i = this.length - 1; i > 0; --i)
{
this.swap(0, i);
for (var j = 0, k = (j + 1) << 1; k <= i; j = k, k = (k + 1) << 1)
{
if (k == i || this[k] < this[k - 1]) --k;
if (this[k] <= this[j]) break;
this.swap(j, k);
}
}
}

function generate()
{
var max = parseInt(txtMax.value), count = parseInt(txtCount.value);
if (isNaN(max) || isNaN(count))
{
alert("個數和最大值必須是一個整數");
return;
}
var array = [];
for (var i = 0; i < count; ++i) array.push(Math.round(Math.random() * max));
txtInput.value = array.join("\n");
txtOutput.value = "";
}

function demo(type)
{
var array = txtInput.value == "" ? [] : txtInput.value.replace().split("\n");
for (var i = 0; i < array.length; ++i) array[i] = parseInt(array[i]);
var t1 = new Date();
eval("array." + type + "Sort()");
var t2 = new Date();
lblTime.innerText = t2.valueOf() - t1.valueOf();
txtOutput.value = array.join("\n");
}
</script>

<body onload=generate()>
<table style="width:100%;height:100%;font-size:12px;font-family:宋體">
<tr>
<td align=right>
<textarea id=txtInput readonly style="width:100px;height:100%"></textarea>
</td>
<td width=150 align=center>
隨機數個數<input id=txtCount value=500 style="width:50px"><br><br>
最大隨機數<input id=txtMax value=1000 style="width:50px"><br><br>
<button onclick=generate()>重新生成</button><br><br><br><br>
耗時(毫秒):<label id=lblTime></label><br><br><br><br>
<button onclick=demo("bubble")>冒泡排序</button><br><br>
<button onclick=demo("selection")>選擇排序</button><br><br>
<button onclick=demo("insertion")>插入排序</button><br><br>
<button onclick=demo("shell")>謝爾排序</button><br><br>
<button onclick=demo("quick")>快速排序(遞歸)</button><br><br>
<button onclick=demo("stackQuick")>快速排序(堆棧)</button><br><br>
<button onclick=demo("merge")>歸並排序</button><br><br>
<button onclick=demo("heap")>堆排序</button><br><br>
</td>
<td align=left>
<textarea id=txtOutput readonly style="width:100px;height:100%"></textarea>
</td>
</tr>
</table>
</body>

Ⅵ 快速排序演算法原理與實現

快速排序的基本思想就是從一個數組中任意挑選一個元素(通常來說會選擇最左邊的元素)作為中軸元素,將剩下的元素以中軸元素作為比較的標准,將小於等於中軸元素的放到中軸元素的左邊,將大於中軸元素的放到中軸元素的右邊。

然後以當前中軸元素的位置為界,將左半部分子數組和右半部分子數組看成兩個新的數組,重復上述操作,直到子數組的元素個數小於等於1(因為一個元素的數組必定是有序的)。

以下的代碼中會常常使用交換數組中兩個元素值的Swap方法,其代碼如下

publicstaticvoidSwap(int[] A, inti, intj){

inttmp;

tmp = A[i];

A[i] = A[j];

A[j] = tmp;


(6)劃分過程的演算法擴展閱讀:

快速排序演算法 的基本思想是:將所要進行排序的數分為左右兩個部分,其中一部分的所有數據都比另外一 部分的數據小,然後將所分得的兩部分數據進行同樣的劃分,重復執行以上的劃分操作,直 到所有要進行排序的數據變為有序為止。

定義兩個變數low和high,將low、high分別設置為要進行排序的序列的起始元素和最後一個元素的下標。第一次,low和high的取值分別為0和n-1,接下來的每次取值由劃分得到的序列起始元素和最後一個元素的下標來決定。

定義一個變數key,接下來以key的取值為基準將數組A劃分為左右兩個部分,通 常,key值為要進行排序序列的第一個元素值。第一次的取值為A[0],以後毎次取值由要劃 分序列的起始元素決定。

從high所指向的數組元素開始向左掃描,掃描的同時將下標為high的數組元素依次與劃分基準值key進行比較操作,直到high不大於low或找到第一個小於基準值key的數組元素,然後將該值賦值給low所指向的數組元素,同時將low右移一個位置。

如果low依然小於high,那麼由low所指向的數組元素開始向右掃描,掃描的同時將下標為low的數組元素值依次與劃分的基準值key進行比較操作,直到low不小於high或找到第一個大於基準值key的數組元素,然後將該值賦給high所指向的數組元素,同時將high左移一個位置。

重復步驟(3) (4),直到low的植不小於high為止,這時成功劃分後得到的左右兩部分分別為A[low……pos-1]和A[pos+1……high],其中,pos下標所對應的數組元素的值就是進行劃分的基準值key,所以在劃分結束時還要將下標為pos的數組元素賦值 為 key。

Ⅶ 如何進行IP子網劃分

子網掩碼概念及子網劃分規則
一、子網掩碼概述

1.子網掩碼的概念
子網掩碼是一個32位地址,用於屏蔽IP地址的一部分以區別網路標識和主機標識,並說明該IP地址是在區域網上,還是在遠程網上。

2.確定子網掩碼數
用於子網掩碼的位數決定於可能的子網數目和每個子網的主機數目。在定義子網掩碼前,必須弄清楚本來使用的子網數和主機數目。

定義子網掩碼的步驟為:

A、確定哪些組地址歸我們使用。比如我們申請到的網路號為 「210.73.a.b」,該網路地址為c類IP地址,網路標識為「210.73」,主機標識為「a.b」。

B、根據我們現在所需的子網數以及將來可能擴充到的子網數,用宿主機的一些位來定義子網掩碼。比如我們現在需要12個子網,將來可能需要16個。用第三個位元組的前四位確定子網掩碼。前四位都置為「1」,即第三個位元組為「11110000」,這個數我們暫且稱作新的二進制子網掩碼。

C、把對應初始網路的各個位都置為「1」,即前兩個位元組都置為「1」,第四個位元組都置為「0」,則子網掩碼的間斷二進制形式為:「11111111.11111111.11110000.00000000」

D、把這個數轉化為間斷十進制形式為:「255.255.240.0」

這個數為該網路的子網掩碼。

3.IP掩碼的標注
A、無子網的標注法

對無子網的IP地址,可寫成主機號為0的掩碼。如IP地址210.73.140.5,掩碼為255.255.255.0,也可以預設掩碼,只寫IP地址。

B、有子網的標注法

有子網時,一定要二者配對出現。以C類地址為例。

1.IP地址中的前3個位元組表示網路號,後一個位元組既表明子網號,又說明主機號,還說明兩個IP地址是否屬於一個網段。如果屬於同一網路區間,這兩個地址間的信息交換就不通過路由器。如果不屬同一網路區間,也就是子網號不同,兩個地址的信息交換就要通過路由器進行。例如:對於IP地址為210.73.140.5的主機來說,其主機標識為00000101,對於IP地址為210.73.140.16的主機來說它的主機標識為00010000,以上兩個主機標識的前面三位全是000,說明這兩個IP地址在同一個網路區域中,這兩台主機在交換信息時不需要通過路由器進行10.73.60.1的主機標識為00000001,210.73.60.252的主機標識為11111100,這兩個主機標識的前面三位000與011不同,說明二者在不同的網路區域,要交換信息需要通過路由器。其子網上主機號各為1和252。

2.掩碼的功用是說明有子網和有幾個子網,但子網數只能表示為一個范圍,不能確切講具體幾個子網,掩碼不說明具體子網號,有子網的掩碼格式(對C類地址)。

二、子網掩碼的用處之一

便於網路設備盡快地區分本網段地址和非本網段的地址。

主機A與主機B交互信息。

主機A: IP地址:202.183.58.11

子網掩碼:255.255.255.0

路由地址:202.183.58.1

主機B: IP地址:202.183.56.5

子網掩碼:255.255.255.0

路由地址:202.183.56.1

路由器從埠202.183.58.1接收到主機A發往主機B的IP數據報文後,

(1)首先用埠地址202.183.58.1與子網掩碼地址255.255.255.0進行「邏輯與」,得到埠網段地址:202.183.58.0,

(2)然後將目的地址202.183.56.5與子網掩碼地址255.255.255.0進行「邏輯與」,得202.183.56.0,

(3)將結果202.183.56.0與埠網段地址202.183.58.0比較,如果相同,則認為是本網段的,不予轉發。如果不相同,則將該IP報文轉發到埠202.183.56.1所對應的網段。

三、子網掩碼的用處之二

將子網進一步劃分,縮小子網地址空間。將一個網段劃分多個子網段,便於網路管理。

學校校園網信息中心可以將202.183.56.0(C類地址)分配給兩個系,每個系約有120

台計算機,則可以將子網掩碼地址定義為:255.255.255.128

這樣將原來的一個網段分成兩個獨立的子網段,便於網路管理。

系1的地址范圍:202.183.56.1—202.183.56.126

子網地址:1100101010110111 00111000 0xxxxxxx

系2的地址范圍:202.183.56.129—202.183.56.254

子網地址:1100101010110111 00111000 1xxxxxxx

四、子網掩碼的演算法

(一)、利用子網數來計算
在求子網掩碼之前必須先搞清楚要劃分的子網數目,以及每個子網內的所需主機數目。
1)將子網數目轉化為二進制來表示
2)取得該二進制的位數,為 N
3)取得該IP地址的類子網掩碼,將其主機地址部分的的前N位置 1 即得出該IP地址劃分子網的子網掩碼。
如欲將B類IP地址168.195.0.0劃分成27個子網:
1)27=11011
2)該二進制為五位數,N = 5
3)將B類地址的子網掩碼255.255.0.0的主機地址前5位置 1,得到 255.255.248.0
即為劃分成 27個子網的B類IP地址 168.195.0.0的子網掩碼。
(二)、利用主機數來計算
1)將主機數目轉化為二進制來表示
2)如果主機數小於或等於254(注意去掉保留的兩個IP地址),則取得該主機的二進制位數,為 N,這里肯定 N<8。如果大於254,則 N>8,這就是說主機地址將占據不止8位。
3)使用255.255.255.255來將該類IP地址的主機地址位數全部置1,然後從後向前的將N位全部置為 0,即為子網掩碼值。
如欲將B(c)類IP地址168.195.0.0劃分成若乾子網,每個子網內有主機700台(17):
1) 700=1010111100
2)該二進制為十位數,N = 10(1001)
3)將該B類地址的子網掩碼255.255.0.0的主機地址全部置 1,得到255.255.255.255
然後再從後向前將後 10位置0,即為: 11111111.11111111.11111100.00000000
即255.255.252.0。這就是該欲劃分成主機為700台的B類IP地址 168.195.0.0的子網掩碼。

五、子網的計算

在思科網路技術學院CCNA教學和考試當中,不少同學在進行IP地址規劃時總是很頭疼子網和掩碼的計算。現在給大家一個小竅門,可以順利解決這個問題。

首先,我們看一個CCNA考試中常見的題型:一個主機的IP地址是202.112.14.137,掩碼是255.255.255.224,要求計算這個主機所在網路的網路地址和廣播地址。

常規辦法是把這個主機地址和子網掩碼都換算成二進制數,兩者進行邏輯與運算後即可得到網路地址。其實大家只要仔細想想,可以得到另一個方法:255.255.255.224的掩碼所容納的IP地址有256-224=32個(包括網路地址和廣播地址),那麼具有這種掩碼的網路地址一定是32的倍數。而網路地址是子網IP地址的開始,廣播地址是結束,可使用的主機地址在這個范圍內,因此略小於137而又是32的倍數的只有128,所以得出網路地址是202.112.14.128。而廣播地址就是下一個網路的網路地址減1。而下一個32的倍數是160,因此可以得到廣播地址為202.112.14.159。

CCNA考試中,還有一種題型,要你根據每個網路的主機數量進行子網地址的規劃和計運算元網掩碼。這也可按上述原則進行計算。比如一個子網有10台主機,那麼對於這個子網需要的IP地址是:

10+1+1+1=13

注意:加的第一個1是指這個網路連接時所需的網關地址,接著的兩個1分別是指網路地址和廣播地址。因為13小於16(16等於2的4次方),所以主機位為4位。而

256-16=240

所以該子網掩碼為255.255.255.240。

如果一個子網有14台主機,不少同學常犯的錯誤是:依然分配具有16個地址空間的子網,而忘記了給網關分配地址。這樣就錯誤了,因為:

14+1+1+1=17

17大於16,所以我們只能分配具有32個地址(32等於2的5次方)空間的子網。這時子網掩碼為:255.255.255.224。

六、子網掩碼及其應用 (綜合)

在TCP/IP協議中,SUBNET MASKS(子網掩碼)的作用是用來區分網路上的主機是否在同一網路取段內。在大型網路中,CLASS A的SUBNET MASKS為255.0.0.0, CLASS B的SUBNET MASKS為255.255.0.0,CLASS C的SUBNET MASKS為255.255.255.0。

假如某台主機的SUBNET MASKS為IP地址為202.119.115.78,它的SUBNET MASKS為255.255.255.0。將這兩個數據作AND運算後,所得出的值中的非0的BYTE部分即為NETWORK ID 。運算步驟如下:

202.119.115.78的二進制值為:
11001010.01110111.01110011.01001110
255.255.255.0的二進制值為:
11111111.11111111.11111111.00000000
AND後的結果為:
11001010.01110111.01110011.00000000
轉為二進制後即為:
202.119.115.0

它就是NETWORK ID,在IP地址中剩下的即為HOST ID,即為78,這樣當有另一台主機 的IP 地址為202.119.115.83,它的SUBNET MASKS也是255.255.255.0,則其NETWORK ID 為202.119.115,HOST ID為83,因為這兩台主機的NETWORK ID都是202.119.115,因此,這兩台主機在同一網段內。

但是,在實際應用中,可能會有多個分布與各地的網路,而且,每個網路的主機數量並不很多,如果申請多個NETWORK ID,會造成IP資源的浪費,而且很不經濟,如果我們在SUBNET MASKS上動一下手腳,可以在只申請一個NETWORK ID的基礎上解決這個問題。

比如,我們有三個不同的子網,每個網路的HOST數量各為20、25和50,下面依次稱為甲、乙和丙網,但只申請了一個NETWORK ID 就是202.119.115。首先我們把甲和乙網的SUBNET MASKS改為255.255.255.224,224的二進制為11100000,即它的SUBNET MASKS為:

11111111.11111111.11111111.11100000

這樣,我們把HOST ID的高三位用來分割子網,這三位共有000、001、010、011、100、 101、110、111八種組合,除去000(代表本身)和111(代表廣播),還有六個組合,也就是可提供六個子網,它們的IP地址分別為:(前三個位元組還是202.119.115)


00100001~00111110 即33~62為第一個子網
01000001~01011110 即65~94為第二個子網
01100001~01111110 即97~126為第三個子網
10000001~10011110 即129~158為第四個子網
10100001~10111110 即161~190為第五個子網
11000001~11011110 即193~222為第六個子網
選用161~190段給甲網,193~222段給乙網,因為各個子網都支持30台主機,足以應付甲網和乙網20台和25台的需求。

再來看丙網,由於丙網有50台主機,按上述分割方法無法滿足它的IP需求,我們 可以將它的SUBNET MASKS設為255.255.255.192, 由於192的二進制值為11000000,按上述方法,它可以劃分為兩個子網,IP地址為:

01000001~01111110 即65~126為第一個子網
10000001~10111110 即129~190為第二個子網

這樣每個子網有62個IP可用,將65~126分配丙網,多個子網用一個NETWORK ID 即告實現。


如果將子網掩碼設置過大,也就是說子網范圍擴大。那麼根據子網尋徑規則,很可能發往和本地機不在同一子網內的目的機的數據,會因為錯誤的相與結果而認為是在同一子網內,那麼,數據包將在本子網內循環,直到超時並拋棄。數據不能正確到達目的機,導致網路傳輸錯誤。如果將子網掩碼設置得過小,那麼就會將本來屬於同一子網內的機器之間的通信當做是跨子網傳輸,數據包都交給預設網關處理,這樣勢必增加預設網關的負擔,造成網路效率下降。因此,任意設置子網掩碼是不對的,應該根據網路管理部門的規定進行設置。

隨著IP地址資源的日趨枯竭,可供分配的IP地址越來越少,往往一個擁 有幾百台計算機規模的網路只能得到區區幾個IP地址,於是,許多人開始採用其他技術來擴展IP空間。

Ⅷ dp的演算法是什麼

DP演算法是解決多階段決策過程最優化問題的一種常用方法。

多階段決策過程是指這樣一類特殊的活動過程,過程可以按時間順序分解成若干個相互聯系的階段,在每一個階段都需要做出決策,全部過程的決策是一個決策序列。

動態規劃演算法是解決多階段決策過程最優化問題的一種常用方法,難度比較大,技巧性也很強。利用動態規劃演算法,可以優雅而高效地解決很多貪婪演算法或分治演算法不能解決的問題。

原理

動態規劃問世以來,在經濟管理、生產調度、工程技術和最優控制等方面得到了廣泛的應用。例如最短路線、庫存管理、資源分配、設備更新、排序、裝載等問題,用動態規劃方法比用其它方法求解更為方便。

雖然動態規劃主要用於求解以時間劃分階段的動態過程的優化問題,但是一些與時間無關的靜態規劃(如線性規劃、非線性規劃),只要人為地引進時間因素,把它視為多階段決策過程,也可以用動態規劃方法方便地求解。

Ⅸ 快速排序演算法

第一趟排序後數組中的元素排列為37、35、38、36、47、53、65、73;
第二趟排序後數組中的元素排列為36、35、37、38、47、53、65、73;
第三趟排序後數組中的元素排列為35、36、37、38、47、53、65、73;
第四趟排序後數組中的元素排列為35、36、37、38、47、53、65、73;
第五趟排序後數組中的元素排列為35、36、37、38、47、53、65、73;
第六趟排序後數組中的元素排列為35、36、37、38、47、53、65、73;
第七趟排序後數組中的元素排列為35、36、37、38、47、53、65、73;
第八趟排序後數組中的元素排列為35、36、37、38、47、53、65、73。

Ⅹ 有關圖劃分演算法

首先,最多劃分為兩部分,因為如果大於等於3部分,那麼將其中任意兩個部分合並可以優化答案。
這樣問題就是求無向圖的邊連通度的問題了,可以用網路流來解決。具體演算法可以參考《圖論演算法與信息學競賽》這本書。

閱讀全文

與劃分過程的演算法相關的資料

熱點內容
php定時執行任務linux 瀏覽:786
php數組中刪除元素 瀏覽:724
螢石雲伺服器視頻 瀏覽:269
防火牆配置伺服器熱備的虛擬地址 瀏覽:188
linux安裝xdm 瀏覽:736
java計算12 瀏覽:249
大金空調擺動式壓縮機 瀏覽:453
新的雲伺服器如何設置首頁 瀏覽:687
javastring字元位置 瀏覽:196
銀河麒麟字體庫存在哪個文件夾 瀏覽:957
魔獸加丁伺服器的航空叫什麼 瀏覽:152
花冠改裝案例哪個app多 瀏覽:515
成績單app哪個好用 瀏覽:140
北美程序員vs國內程序員 瀏覽:181
php解析xml文檔 瀏覽:121
石墨文檔APP怎麼橫屏 瀏覽:185
牆主鋼筋加密和非加密怎麼看 瀏覽:144
金山區文件夾封套定製 瀏覽:708
soho程序員 瀏覽:672
java位元組截取 瀏覽:526