導航:首頁 > 源碼編譯 > 改進40演算法1

改進40演算法1

發布時間:2023-05-15 04:48:35

1. 個位數相加和為40有多少種演算法

40=1+39=2+38=3+37=……=18+22=19+21=20+20
可見40可以分成20組兩數相加
單數和雙數各一半
所姿蔽氏以兩個單數跡散的分法有並行10種

2. 【混合數據聚類分析】 聚類分析數據

種混合屬性數據的聚類演算法

摘 要: 提出一種基於屬性分解的隨機分組的改進方法,以提高聚類演算法的穩定性和適用性。實驗模擬結果表明,改進演算法具有很好的穩定性和應用性。

關鍵詞: 聚類;混合數據;分類屬性

所謂聚類,就是將物理或抽象對象的集合構成為由類似的對象組成多個類或簇的過程。由聚類所生成的簇是一組數據對象的集合,同一簇中的數據對象盡可能相似,不同簇中的數據對象盡可能相異[1]。聚類演算法在許多領域獲得了廣泛應用[2],但是,由於在實際應用中,許多數據集不僅包含數值屬性的數據,同時也包含如地圖顏色、幾何紋理等分類屬性的數據。因此使得基於傳統的歐式距離劃分的聚類演算法難以適用於混合屬性數據集的要求。為此各研究學者就此問題進行了深入地研究和探討。

MacQueen 所提出的k-means 方法[3]是最早、也是最簡單的聚類方法,但是該方法只能對數值屬性的對象集進行聚類,無法對分類屬性和混合型屬性的對象集進行聚類。Huang 提出的k-modes 演算法和k-prototypes 演算法[4]推廣了k-means 方法,使之可以對分類屬性和混合型屬性的數據集進行聚類。同時陳寧、陳安、周龍驤進一步提出了模糊k-prototypes 演算法,並利用引進模糊聚類演算法來提高聚類結果的准確性[5]。

上述方法在聚類過程中,均利用分類型屬性簡單匹配相異度,將分類型屬性的數據轉化為數值型屬性數據間的基於距離的計算問題,從笑灶棚而解決了對混合屬性數據集的聚類問題。但是上述方法在對分類屬性數據和混合型屬性數據辯悄進行聚類時,總會存在一些如聚類結果的隨機性和不穩定性等缺點,甚至有時會出現空聚類[6-7]現象。

為此,本文在k-prototypes 演算法的基礎上進行改進,利用隨機分組的思想動態地選取初始原型點,同時對分類屬性數據採取屬性分解的方法進行處理,從而提高演算法的穩定性和適用性,使聚類結果更加理想化。

1 相關觀念

聚類是將數據對象分成類或簇的過程,使同一個簇中的對象之間具有很高的相似度,而不同簇中的對象高度相異[2]。其中對象間的相異度度量用來表示對象間的相異程度,代價函數用來表示對象間的相似程度。

2 演算法的改進

k-modes 演算法和k-prototypes 演算法在聚類混合屬性數據時,對初值有明顯的依賴,導致聚類結果不理想,甚至出現聚類空集的現象。因此本文在原有演算法的基礎上進一步改進,利用隨機分組確定初始原型的方法,然後對隨機分組得到的初始原型進一步加工處理,使得聚類結果對初值的依賴性有所降低,從而使聚類結果更合理、穩定,達到改進演算法的目的。

2.1 分類屬性處理演算法

假定數據對象x 是具有m 維屬性的數據對象,其中含有m1個數值型數據和m2個分類型屬性。那麼,可以直觀地將數據對象x 看成分別有m1維數值屬性和m2維分類屬性組成,其中m2維分類屬性又可以分別看成碰則由多維數據值組成。例如:表2中的分類型屬性「渠道」可以看成是由「直接」、「間接」2維分類數據值組成的;分類型屬性「語義范疇」可以看成是由「植物」、「語言」2維分類數據組成的。在計算中,分別將分類型屬性看成是由多維的分類屬性數據值組成的。

對象1的分解原型表示為:

1={2,{0(直接) ,1(間接)},{1(植物) ,0(語言)}};

對象2的分解原型表示為:

2={2,{1(直接) ,0(間接)},{0(植物) ,1(語言)}};

對象3的分解原型表示為:

3={3,{1(直接) ,0(間接)},{1(植物) ,0(語言)}};

對象4的分解原型表示為:

4={3,{0(直接) ,1(間接)},{1(植物) ,0(語言)}};

對象5的原型表示為:

5={2,{1(直接) ,0(間接)},{0(植物) ,1(語言)}}; 則對象1,2,5組成的聚類Q1的分解原型可以表示為: Q1={2,{2/3(直接) ,1/3(間接)},{0(植物) ,3/3(語言)}}; 則對象3,4組成的聚類Q2的分解原型可以表示為:

Q2={2,{1/2(直接) ,1/2(間接)},{2/2(植物) ,0(語言)}};

然後利用式(2)計算對象與聚類之間的距離,得到其中的最小距離。通過這種方式,可以有效地避免在分類屬性中出現頻率少的屬性值丟失的現象,從而得到更合理的聚類的結果。

2.2 隨機分組演算法

隨機分組演算法的基本原理是依據需要聚類的個數k 和數據集中所包含數據的個數n 。將總數為n 的數據集劃分為count=n/k組,然後從count 組中分別選擇數據對象k 次,構成k 個聚類的初始原型值。

演算法流程:

(1)分組數據集。已知數據集X={x1,x2,…,xn}是包含n 個數據對象的集合。依據數據集中數據個數n 和需要聚類的個數k ,將整個數據集分組成為count=n/k組,即數據集X={[x1,x2,…,xk],[xk+1,…,x2k],…}。如果分組後數據集中還有剩餘的對象未分配,則將剩餘的對象分配到任意組中,本文選擇將其分配到第一個分組中。

(2)隨機獲得一個初始點。將數據集分組成為子數據集後,依次從count 個子數據集中隨機選擇一個數據對象,形成由count 個數據對象組成的新的子數據集。將這個新的子數據集中的所有m1個數值型屬性中的值利用式(5)計算平均值作為初始點的對應的數值型屬性的值,對於分類型屬性的值,則利用2.1節的分類屬性數據處理方法進行處理後作為初始值的對應分類型屬性的值。

3) 重復步驟(2)k次,得到k 個初始點,作為聚類分析的k 個原型點。

2.3 聚類演算法描述

改進演算法的流程和k-prototypes 演算法的流程基本相同。具體演算法描述如下:

(1)將數據集中的每一個數據對象按照2.1節中的分類屬性數據值的處理方法進行處理。

(2)利用隨機分組演算法獲得k 個初始原型點,每一個初始原型點對應一個聚類原型初值。

(3)將數據集中剩下的任一個對象分配給一個聚類,根據相異度度量的距離公式計算的結果確定一個聚類的原型與它最近,分配給該聚類後,將聚類的原型更新。

4) 在所有的數據對象全部分配給聚類之後,重新計算該數據對象與當前每一個聚類之間的距離。如果發現一個數據對象它的最近原型屬於另一個聚類而不是當前的聚類,將該數據對象重新分配給另一個聚類並更新兩個聚類的原型。

(5)重復演算法(4),直到數據集中的所有數據對象再沒有對象變更聚類為止。

3 實驗分析

一般評價聚類結果均是採用「誤分率」等統計方法。在本文的模擬實驗中,通過將本文的改進演算法和k-prototypes 演算法進行比較,採用錯誤的分類數目來評價聚類演算法性能。錯誤的分類數目,即對演算法的聚類結果和數據集本身進行比較,聚類結果中沒有被正確分配到相應聚類的數據對象的數目。本文通過兩個數據集進行實驗。

(1)採用UCI 數據集中的abalone 數據集進行測試。該數據集包括涉及生活領域的8個類別的4 177個數據對象,其中含有1個分類型屬性,1個整數型屬性和6個實數型屬性。分類屬性數據對象中含有1 528個記錄為F(父) 值,1 307個記錄為M(母) 值,還有1 342個記錄為I(未成年人) 值。

如圖1所示,在改變聚類個數的情況下,通過比較兩種演算法的聚類結果的錯誤分類數目可知,改進演算法在一定程度上比原有演算法的穩定性更高。

(2)採用UCI 數據集中的post-operative patient數據集。該數據集中還有涉及生活領域的9個類別的90個數據對象,其中還有8個分類屬性和1個整數型屬性,包含有2個記錄為I(病人送加護病房) ,24個對象為S(病人准備回家) ,64個對象為A(病人送去普通病房) 。 由圖2可知,在分類屬性較多的混合屬性數據集中,改進演算法的穩定性仍在一定程度上優於原型演算法,保證了改進演算法對於混合屬性數據聚類結果的穩定性和有效性。

對於數值型數據和分類型數據的混合數值的聚類,目前雖然有一些演算法,如k-modes 演算法和k-prototypes 演算法。但是這些演算法在選擇聚類初始點時過於隨機,導致聚類結果不理想。因此本文提出了一種基於分類屬性數據分解的隨機分組選擇初始原型的改進演算法。但是在本文的改進演算法中,仍然存在一些缺點,例如,聚類個數仍是人為確定,不能動態確定適合數據集合理的聚類的個數。因此,為了使改進演算法的適應性和穩定性更好,同時使數據集的聚類結果與輸入數據對象的順序無關,動態確定聚類合理的聚類個數是今後的研究重點。 參考文獻

[1] 王欣,徐騰飛,唐連章,等.SQL Server2005數據挖掘實例分析[M].北京,中國水利水電出版社,2008.

[2] Han Jiawei, KAMBER M. Data mining concepts and techniques[M]. 北京:機械工業出版社,2001.

[3] CHRISTOPHER J, BURGES C. A tutorial on support vector machines for pattern recognition[J]. Data Mining and knowledge Discovery, 1998: 2(2): 121-167.

[4] VAPNIK V N. An overview of statistical learning theory[J]. IEEE Trans on Neural Network , 1999; 10(5):988-999.

[5] 張文生,王珏. 利用支持向量機構造函數型連接網路的研究[J].計算機科學,2001,28(5):172-177.

[6] 趙立江,黃永青. 混合屬性數據聚類初始點選擇的改進[J].廣西師范大學學報:自然科學報,2007,25(4):102-105.

[7] 林培俊,王宇. 對類屬性和混合屬性數據聚類的一種有效地演算法[J].計算機工程與應用,2004,40(1):190-191.

3. 遞歸演算法的弊端與改進

遞歸一直給人的感覺是簡潔且優雅,但是在面對較大規模的問題時,遞歸的弊端就漸漸暴露出來了。因為大量棧的使用導致程序運行速度變得很慢,所以遞歸演算法需要改進。

1.尾遞鄭困兄歸:函數返回之前的最後一個操作若是遞歸調用,則該函數進行了尾遞歸。

但是我發現尾遞歸貌似並沒有很顯著的作用???(值得深究)

2.遞歸改遞推,舉例斐波拉切數列

遞歸演算法大於40之後就會變得很慢喊襲,甚至算不出來。而遞推演算法可以算更大的數而且算得更快( 即使用了long,但是超過50還是會溢出gg )。

所以面額拼湊問題就需要使用 遞推法 ,一個一個算,看似非常傻但是卻比遞歸好用,或許這就是 大智若愚 吧。

比較難理解的可能是 m[j]+=m[j-den[i]];其等價於之前提到的遞推式(1020,100)=(1020-100,100)+(1020,50),但是我們發現(1020,50)沒了,這是因為之前已經加上去了。

在這個兩層循環中,第一層就是以不同的面額做循環,例如(5,5)=(0,5)+(5,1),之所以省略掉了(5,1)是因為在之前就已經將(5,1)加上去了( m[j]=1 ),所以可以直接 m[j]+=m[j-den[i]] .當面額為5循環完畢之後,就可以開始面額為10的循環了。(10,10)=(5,10)+(10,1)=(5,5)+(10,1),由於之前(10,1)已經加上去了,所以直接加上(5,5)就可以了。一次類推直到面額100循環完畢,結果就出來了。(感覺沒有講清楚)

碰到的問題:

1.10000的時候出現溢出。原因:之前在intellij(java)中寫的時候用long(64位)沒問題,但是尺斗 C語言(dev c++和VS)long是32位的 ,所以使用long long

2.dev c++使用的是gcc編譯器支持 動態數組 ,VS不支持所以一開始報錯。改為 long long *m=new long long[money+1];

4. 編寫冒泡排序演算法 冒泡排序演算法的分析與改進 演算法設計

冒泡排序演算法的分析與改進

孫偉

(安徽中醫學院 醫葯信息工程學院 09醫軟一班,安徽合肥,230009)

摘 要: 冒泡排序演算法有兩個優點:1「編程復雜度」很低,很容易寫出代碼;2. 具有穩定性,這里的穩定性是指原序列中相同元素的相對順序仍然保持到排序後的序列,但當需要排序的數據較多且無序時,冒泡排序演算法的時間復雜度較大,比較次數較多,本文提出了一種冒泡排序演算法的改進方法,可以大大減少比較的次數,降低演算法的時間復雜度。 關鍵讓握坦詞:交坦桐換排序 掃描 穩定 演算法 中圖分類號:TU 411.01 文獻標識碼:A

Bubble sort algorithm analysis and improvement

SUN Wei

(Anhui University of Traditional Chinese Medicine Medical Information Engineering, Hefei 230009, China ;)

Abstract: Bubble sort algorithm has two advantages:1 「Programming complexity」is very low,and it is easy to write code;2.It has the stability, the stability refers to the original sequence in the same element relative sequence remains to sort sequence, but when the need to sort the data and more disordered, bubble sort algorithm time complexity compared to larger, more often, this paper presents a bubble sort algorithm method, can greatly rece the number of comparisons, rece the time complexity of algorithm.

Key words:Exchange sort ; Scanning ; stability ; Algorithm

1. 概述

1.1 冒泡排序簡介

冒泡排序法是一種交換排序法皮臘,這種方法的基本思想是,將待排序

的元素看作是豎著排列的「 氣泡」,較小的元素比較輕,從而要往上浮。在冒泡排序演算法中我們要對這個「 氣泡」序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,並時刻注意兩個相鄰的元素的順序是否正確。如果發現兩個相鄰元素的順序不對,即「 輕」的元素在下面,就交換它們的位置。顯然,處理一遍之後,「 最輕」的元素就浮到了最高位置;處理二遍之後,「 次輕」的元素就浮到了次高位置。在作第二遍處理時,由於

最高位置上的元素已是「 最輕」元素,所以不必檢查。一般地,第i 遍處理時,不必檢查第i 高位置以上的元素,因為經過前面i- 1遍的處理,它們已正確地排好序。

1.2 冒泡排序方法

冒泡排序法是一種最簡單的排序演算法, 它和氣泡從水中往上冒的情況有些類似。其基本演算法如下:對1 至n 個記錄,先將第n 個和第n- 1 個記錄的鍵值進行比較,如r [n].key

——————————————————————————————————————————————————————— 收稿日期:2012-4-14;

作者簡介:孫偉 1992-10-04 女 09713033 09醫軟一班

實現的功能:將鍵值最小的記錄傳到了第1 位。然後,再對2 至n 個記錄進行同樣操作,則具有次小鍵值的記錄被安置在第2 位上。重復以上過程, 每次的移動都向最終排序的目標前進,直至沒有記錄需要交換為止。具體實現時,可以用一支旗子flag 表示第i 趟是否出現交換。如果第i 趟沒有交換,則表示此時已完成排序,因而可以終止。

1.3 冒泡排序過程示例

設待排序的鍵值為: 25 17 65 13 94 47 41 94

執行冒泡排序的過程如下圖所示。其中,第一列為初始鍵值序列, 第二列至第八列依次為各趟排序的結果, 圖中用方括弧括起來的是當前待排序的無序區。

每一次排序都使有序區擴充了一個氣泡,在經過i 次排序之後,有序區中就有i 個氣泡, 而無序區中氣泡的重量總是大於等於有序區中氣泡的重量,整個冒泡排序過程至多需要進行n- 1 次排序。但是, 若在某一次排序中未發現氣泡位置的交換, 則說明待排序的無序區中所有氣泡均滿足輕者在上,重者在下的原則因此冒泡排序過程可在此次排序後終止。在上圖的示例中,在第四次(圖中第五列) 排序過程中就沒有氣泡交換位置, 此時整個文件已達到有序狀態。為此,實際給出的演算法中, 我們可以引入一個布爾量flag , 在每一次排序之前, 先將它置為true ,若在一次排序中交換了記錄, 則將它置為false 。當一次排序結束時,我們再檢查flag ,若未曾交換過記錄便終止演算法。

該演算法的時間復雜性為0(n2), 演算法為穩定的排序方法。

2. 對於冒泡演算法的改進

2.1 第一種改進方法

如果在某一趟循環中沒有任何數據交換發生, 則表明數據已經排序完畢。那麼剩餘的循環就不需要再執行假設需要排序的數據已經按照從小到大排列,那麼第一趟比較就不會有任何數據交換發生。這種改進演算法如下:

設置一個標志位,當沒有交換的時候這個標志位不會變化,那麼說明數據已經排序好了,就不需要再進行剩餘的循環。只有在標志位被重新設置的情況下才會進行剩餘的循環。

public static

void ImproveBubble1(int [ ]myArray) {

bool isSorted = false;

for(int i = 0; i

// 只有在沒有排序的情況下才繼續循環 { isSorted =

true; // 設定排序標志

for(int j = 0; j

myArray[j+1] ) { isSorted =

false; // 如果是沒有排序,就重新設定標志 Swap(refmyArray, refmyArray[i+1]);

} } } }

從這種演算法可以看出,若記錄的初始狀態是正序( 從小到大) 的,則一趟掃描即可完成排序。所需的較和記錄移動的次數分別達到最小值n- 1 和0。即演算法最好的時間復雜度為0(n);若初始記錄是反序( 從大到小) 的,則需要進行n- 1 趟排序,每趟排序要進行n- i 次關鍵字的比較,且每次比較都必須移記錄三次來達到交換記錄位置。在這情況下比較和移動次數達到最大值:比較次數:Cmax= n(n- 1)/2 移動次數: Mmax=3n(n- 1)/2因此這種改進方法的最壞時間復雜度也為0(n^2)。在平均情況下,演算法可能在中間的某一趟排序完後就終止,但總的比較次數仍為0(n^2),所以演算法的

平均時間復雜度為0(n^2)。因此,這種演算法最好的時間復雜度為0(n)。平均,最壞時刻復雜度為0(n^2)。

2.2 第二種改進方法

在冒泡排序的每趟掃描中, 記住最後一次交換發生的位置lastexchange 也能有所幫助。因為該位置之前的相鄰記錄已經有序,故下一趟排序開始的時候,0 到lastexchange 已經是有序的了,lastexchange 到n- 1是無序區。所以一趟排序可能使當前有序區擴充多個記錄。即較大縮小無序區范圍,而非遞減1,以此減少排序趟數。這種演算法如下:

在冒泡排序中,每趟排序實現了將最大(升序) 或最小(降序) 的記錄安置到未排序部分的最後位置,即最終位置。通過進一步觀察研究,由於每趟排序過程中,通過和鄰記錄關鍵字兩兩比較,大(升序) 或小(降序) 的記錄在不斷地往下沉或往後靠,小(升序) 或大(降序) 的記錄在不斷往上冒或往前靠。每經過一趟排序,在最後次交換位置後面的記錄都已經排好序。根據上面的思路,對n 個記錄進行第k 趟排序,首先需在第k- 1 趟排序時記下最後交換的位置。然後在第k 趟排序時,將第一個記錄的關鍵字與第二個記錄的關鍵字進行比較,符合交換條件時,進行交換。再比較第二個記錄和第三個記錄的關鍵字,依次類推,直至第m- 1 個記錄和第m 個記錄的關鍵字進行比較,而不需要比較至n- k- 1 個記錄。在大部分排序中,m 都小於n- k- 1從而減少了比較趟數和每趟的比較次數。由於在第一趟排序

時,沒有上一趟排序的m 值。因此,還要設置m 的初始值為n- 1。

public static

void ImproveBubble2(int[ ]myArray) { int m= myArray.Length -1; int k, j; while(m> 0 )

{ for( k=j=0; j myArray[j+1]) {

Swap(refmyArray[j], refmyArray[j+1]);

k = j; // 記錄每次交換的位置 }}

m= k; // 記錄最後一個交換的位置 }}

從這種演算法可以看出,若記錄的初始狀態是正序( 從小到大) 的。則一趟掃描即可完成排序, 所的關鍵比較和記錄移動的次數分別達到最小值n- 1 和0。即演算法最好的時間復雜度為0(n);若初始記錄是反序( 從大到小) 的,則需要進行n- 1 趟排序,每趟排序要進行n- i 次關鍵字的比較,且每次比較都須移動記錄三次來達到交換記錄位置。在這情況下比較和移動次數達到最大值:比較次數:Cmax= n(n- 1)/2 移動次數Mmax=3n(n- 1)/2因此,這種辦法的最壞時間復雜度也為0(n^2)。在平均情況下,演算法較大地改變了無序區的范圍,從而減少了比較的次數,但總的比較次數仍為0(n^2)。所以演算法的平均時間復雜度為0(n^2)。因此,演算法2 最好的時間復雜度為0(n)。平均,最壞時刻復雜度為0(n^2)。 2.3 雙向掃描冒泡法

若記錄的初始狀態為:只有最輕的氣泡位於d[n]的位置(或者最重的氣泡位於d[0]位置) ,其餘的氣泡均已排好序。在上述三種演算法中都要做n- 1 趟掃描。實際上只需一趟掃描就可以完成排序。所以對於這種不

對稱的情況。可對冒泡排序又作一次改進。在排序過程中交替改變掃描方向。即先從下掃到上,再從上掃到下,來回地進行掃描,這樣就得到雙向冒泡排序演算法。

對n 個記錄進行排序時,設up 記錄了從前面向後面依次進行掃描時最後的交換位置,low 記錄了從後面向前面依次進行掃描時最前的交換位置。由上個改進的冒泡排序的原理可知,up 後面的記錄和low 前面的記錄都已有序。每趟排序都由兩次不同方向的比較、交換組成。第一次是從未排好序的第一個記錄開始,即從low 記錄開始,向後依次兩兩比較,如果不符合條件,則交換之,

直至比較到未排好序的最後一個記錄,即up 記錄為止。同時記下最後一次交換的位置,並存於up 。第二次是從未排好序的最後一個記錄開始, 即從up 記錄開始,向前依次兩兩比較,如果不符合條件,則交換之,直至比較到未排好序的第一個記

錄,即low 記錄為止。同時記下最後次交換的位置,並存於low 。這樣,就完成了一趟排序。每趟排序都實現了將未排好序部分的關鍵字大的記錄往後移

(升序) ,

關鍵字小的記錄往前移( 升序) ,從而使

兩端已排好序( 如果是降序,記錄移動的方向則相反) 。未排好序部分的記錄的首尾位置分別由low 和up 指明。不斷按上面的方法進行排序,使兩端已排好序的記錄不斷增多,未排好序部分的記錄逐漸減少。即low 和up 的值不斷接近,當low>=up 時,表明已沒有未排好序的記錄,排序就完成了。由於在第一趟排序時,沒有上趟排序的low 和up 值。因此,還要設置low 和up 的初始值分別為0 和n- 1。

public static

void ImproveBubble3(int [ ]myArray) { int low, up, index, i; low= 0;

up = myArray.Length - 1; index = low; while( up > low)

{ for( i=low; imyArray[i+1]) {

Swap(refmyArray, refmyArray[i+1]); index = i; }}

up= index; // 記錄最後一個交換的位置

for(i=up; i>low; i- - ) // 從最後一個交換

位置處從下向上掃描

{ if(myArray

Swap(refmyArray, refmyArray[i- 1]); index = i;

}} low= index; // 記錄最後一個交換的位



}}

從這種演算法可以看出,若記錄的初始狀態是正

序( 從小到大) 的,則一趟掃描即可完成排序。所需的關鍵比較和記錄移動的次數分別達到最小值n- 1 和0。即演算法最好的時間復雜度為0(n);若初始記錄是反序( 從大到小) 的,則需要進行[n/2]趟排序。如果只有最重的氣泡在最上面( 或者最輕的氣泡在最下面) ,其餘的有序,這時候就只需要比較1 趟。但是在最壞的情況下,演算法的復雜度也為0(n^2)。因此,演算法最好的時間復雜度為0(n),最壞時刻復雜度為0(n^2)。

3. 性能分析

為了分析數據兩種冒泡排序法的性能, 我們用自編的測試程序對大量數據進行了測試,得出下表,從表中可以直觀地看出兩種冒泡排序方法的性能差異( 時間單位為毫秒)。

圖1 演算法運行時間比較表

4. 結束語

從上面的表格可以看出,在數據量比較小的時候,這幾種演算法基本沒有任何區別。當數據量比較大的時候,雙向掃描冒泡排序會有更好的效率。但是效率並沒有根本的提升。因此冒泡排序確實不是我們排序的首選。在數據量比較大的時候,快速排序等會有非常明顯的優勢。但是在數據量很小的時候,各種排序演算法的效率差別並不是很大。那麼冒泡排序也會有自己的用武之地。因此,在實際考慮演算法的時候,最重要的是熟悉各種演算法的性能表現並且根據數據的數量以及當前運行的環境,開發的進度選擇最合適的演算法。

[參 考 文 獻]

[1]( 美) 萊維丁著. 潘彥譯,《演算法設計與分析基礎》. 清華大學出版社 [2] 胡金初,《計算機演算法》. 清華大學出版社

[3] 阿蘇外耶(M.H.Alsuwaiyel),朱洪(譯),《演算法設計技巧與分析》.電子工業出版社 [4](美)Robert sedgewick,《演算法分析導論》.機械工業出版社

[5]( 美)Michael T.Goodrich Roberto Tamassia,《演算法分析與設計》人民郵電出版社 [6]王曉東,《計算機演算法設計與分析》電子工業出版社

[7]Shaffer,Clifford,張銘,《數據結構與演算法分析》電子工業出版社 [8]劉任任 ,《演算法設計與分析》武漢理工大學出版社,2003

5. BP演算法及其改進

傳統的BP演算法及其改進演算法的一個很大缺點是:由於其誤差目標函數對於待學習的連接權值來說非凸的,存在局部最小點,對網路進行訓練時,這些演算法的權值一旦落入權值空間的局部最小點就很難跳出,因而無法達到全局最小點(即最優點)而使得網路訓練失敗。針對這些缺陷,根據凸函數及其共軛的性質,利用Fenchel不等式,使用約束優化理論中的罰函數方法構造出了帶有懲罰項的新誤差目標函數。

用新的目標函數對前饋神經網路進行優化訓練時,隱層輸出也作為被優化變數。這個目標函數的主要特點有:
1.固定隱層輸出,該目標函數對連接權值來說是凸的;固定連接權值,對隱層輸出來說是凸的。這樣在對連接權值和隱層輸出進行交替優化時,它們所面對的目標函數都是凸函數,不存在局部最小的問題,演算法對於初始權值的敏感性降低;
2.由於懲罰因子是逐漸增大的,使得權值的搜索空間變得比較大,從而對於大規模的網路也能夠訓練,在一定程度上降低了訓練過程陷入局部最小的可能性。

這些特性能夠在很大程度上有效地克服以往前饋網路的訓練演算法易於陷入局部最小而使網路訓練失敗的重大缺陷,也為利用凸優化理論研究前饋神經網路的學習演算法開創了一個新思路。在網路訓練時,可以對連接權值和隱層輸出進行交替優化。把這種新演算法應用到前饋神經網路訓練學習中,在學習速度、泛化能力、網路訓練成功率等多方面均優於傳統訓練演算法,如經典的BP演算法。數值試驗也表明了這一新演算法的有效性。

本文通過典型的BP演算法與新演算法的比較,得到了二者之間相互關系的初步結論。從理論上證明了當懲罰因子趨於正無窮大時新演算法就是BP演算法,並且用數值試驗說明了懲罰因子在網路訓練演算法中的作用和意義。對於三層前饋神經網路來說,懲罰因子較小時,隱層神經元局部梯度的可變范圍大,有利於連接權值的更新;懲罰因子較大時,隱層神經元局部梯度的可變范圍小,不利於連接權值的更新,但能提高網路訓練精度。這說明了在網路訓練過程中懲罰因子為何從小到大變化的原因,也說明了新演算法的可行性而BP演算法則時有無法更新連接權值的重大缺陷。

礦體預測在礦床地質中佔有重要地位,由於輸入樣本量大,用以往前饋網路演算法進行礦體預測效果不佳。本文把前饋網路新演算法應用到礦體預測中,取得了良好的預期效果。

本文最後指出了新演算法的優點,並指出了有待改進的地方。

關鍵詞:前饋神經網路,凸優化理論,訓練演算法,礦體預測,應用

Feed forward Neural Networks Training Algorithm Based on Convex Optimization and Its Application in Deposit Forcasting
JIA Wen-chen (Computer Application)
Directed by YE Shi-wei

Abstract

The paper studies primarily the application of convex optimization theory and algorithm for feed forward neural networks』 training and convergence performance.

It reviews the history of feed forward neural networks, points out that the training of feed forward neural networks is essentially a non-linear problem and introces BP algorithm, its advantages as well as disadvantages and previous improvements for it. One of the big disadvantages of BP algorithm and its improvement algorithms is: because its error target function is non-convex in the weight values between neurons in different layers and exists local minimum point, thus, if the weight values enter local minimum point in weight values space when network is trained, it is difficult to skip local minimum point and reach the global minimum point (i.e. the most optimal point).If this happening, the training of networks will be unsuccessful. To overcome these essential disadvantages, the paper constructs a new error target function including restriction item according to convex function, Fenchel inequality in the conjugate of convex function and punishment function method in restriction optimization theory.
When feed forward neural networks based on the new target function is being trained, hidden layers』 outputs are seen as optimization variables. The main characteristics of the new target function are as follows:

1.With fixed hidden layers』 outputs, the new target function is convex in connecting weight variables; with fixed connecting weight values, the new target function is convex in hidden layers』 outputs. Thus, when connecting weight values and hidden layers』 outputs are optimized alternately, the new target function is convex in them, doesn』t exist local minimum point, and the algorithm』s sensitiveness is reced for original weight values .
2.Because the punishment factor is increased graally, weight values 』 searching space gets much bigger, so big networks can be trained and the possibility of entering local minimum point can be reced to a certain extent in network training process.

Using these characteristics can overcome efficiently in the former feed forward neural networks』 training algorithms the big disadvantage that networks training enters local minimum point easily. This creats a new idea for feed forward neural networks』 learning algorithms by using convex optimization theory .In networks training, connecting weight variables and hidden layer outputs can be optimized alternately. The new algorithm is much better than traditional algorithms for feed forward neural networks. The numerical experiments show that the new algorithm is successful.

By comparing the new algorithm with the traditional ones, a primary conclusion of their relationship is reached. It is proved theoretically that when the punishment factor nears infinity, the new algorithm is BP algorithm yet. The meaning and function of the punishment factor are also explained by numerical experiments. For three-layer feed forward neural networks, when the punishment factor is smaller, hidden layer outputs』 variable range is bigger and this is in favor to updating of the connecting weights values, when the punishment factor is bigger, hidden layer outputs』 variable range is smaller and this is not in favor to updating of the connecting weights values but it can improve precision of networks. This explains the reason that the punishment factor should be increased graally in networks training process. It also explains feasibility of the new algorithm and BP algorithm』s disadvantage that connecting weigh values can not be updated sometimes.

Deposit forecasting is very important in deposit geology. The previous algorithms』 effect is not good in deposit forecasting because of much more input samples. The paper applies the new algorithm to deposit forecasting and expectant result is reached.
The paper points out the new algorithm』s strongpoint as well as to-be-improved places in the end.

Keywords: feed forward neural networks, convex optimization theory, training algorithm, deposit forecasting, application

傳統的BP演算法及其改進演算法的一個很大缺點是:由於其誤差目標函數對於待學習的連接權值來說非凸的,存在局部最小點,對網路進行訓練時,這些演算法的權值一旦落入權值空間的局部最小點就很難跳出,因而無法達到全局最小點(即最優點)而使得網路訓練失敗。針對這些缺陷,根據凸函數及其共軛的性質,利用Fenchel不等式,使用約束優化理論中的罰函數方法構造出了帶有懲罰項的新誤差目標函數。

用新的目標函數對前饋神經網路進行優化訓練時,隱層輸出也作為被優化變數。這個目標函數的主要特點有:
1.固定隱層輸出,該目標函數對連接權值來說是凸的;固定連接權值,對隱層輸出來說是凸的。這樣在對連接權值和隱層輸出進行交替優化時,它們所面對的目標函數都是凸函數,不存在局部最小的問題,演算法對於初始權值的敏感性降低;
2.由於懲罰因子是逐漸增大的,使得權值的搜索空間變得比較大,從而對於大規模的網路也能夠訓練,在一定程度上降低了訓練過程陷入局部最小的可能性。

這些特性能夠在很大程度上有效地克服以往前饋網路的訓練演算法易於陷入局部最小而使網路訓練失敗的重大缺陷,也為利用凸優化理論研究前饋神經網路的學習演算法開創了一個新思路。在網路訓練時,可以對連接權值和隱層輸出進行交替優化。把這種新演算法應用到前饋神經網路訓練學習中,在學習速度、泛化能力、網路訓練成功率等多方面均優於傳統訓練演算法,如經典的BP演算法。數值試驗也表明了這一新演算法的有效性。

本文通過典型的BP演算法與新演算法的比較,得到了二者之間相互關系的初步結論。從理論上證明了當懲罰因子趨於正無窮大時新演算法就是BP演算法,並且用數值試驗說明了懲罰因子在網路訓練演算法中的作用和意義。對於三層前饋神經網路來說,懲罰因子較小時,隱層神經元局部梯度的可變范圍大,有利於連接權值的更新;懲罰因子較大時,隱層神經元局部梯度的可變范圍小,不利於連接權值的更新,但能提高網路訓練精度。這說明了在網路訓練過程中懲罰因子為何從小到大變化的原因,也說明了新演算法的可行性而BP演算法則時有無法更新連接權值的重大缺陷。

礦體預測在礦床地質中佔有重要地位,由於輸入樣本量大,用以往前饋網路演算法進行礦體預測效果不佳。本文把前饋網路新演算法應用到礦體預測中,取得了良好的預期效果。

本文最後指出了新演算法的優點,並指出了有待改進的地方。

關鍵詞:前饋神經網路,凸優化理論,訓練演算法,礦體預測,應用

Feed forward Neural Networks Training Algorithm Based on Convex Optimization and Its Application in Deposit Forcasting
JIA Wen-chen (Computer Application)
Directed by YE Shi-wei

Abstract

The paper studies primarily the application of convex optimization theory and algorithm for feed forward neural networks』 training and convergence performance.

It reviews the history of feed forward neural networks, points out that the training of feed forward neural networks is essentially a non-linear problem and introces BP algorithm, its advantages as well as disadvantages and previous improvements for it. One of the big disadvantages of BP algorithm and its improvement algorithms is: because its error target function is non-convex in the weight values between neurons in different layers and exists local minimum point, thus, if the weight values enter local minimum point in weight values space when network is trained, it is difficult to skip local minimum point and reach the global minimum point (i.e. the most optimal point).If this happening, the training of networks will be unsuccessful. To overcome these essential disadvantages, the paper constructs a new error target function including restriction item according to convex function, Fenchel inequality in the conjugate of convex function and punishment function method in restriction optimization theory.
When feed forward neural networks based on the new target function is being trained, hidden layers』 outputs are seen as optimization variables. The main characteristics of the new target function are as follows:

1.With fixed hidden layers』 outputs, the new target function is convex in connecting weight variables; with fixed connecting weight values, the new target function is convex in hidden layers』 outputs. Thus, when connecting weight values and hidden layers』 outputs are optimized alternately, the new target function is convex in them, doesn』t exist local minimum point, and the algorithm』s sensitiveness is reced for original weight values .
2.Because the punishment factor is increased graally, weight values 』 searching space gets much bigger, so big networks can be trained and the possibility of entering local minimum point can be reced to a certain extent in network training process.

Using these characteristics can overcome efficiently in the former feed forward neural networks』 training algorithms the big disadvantage that networks training enters local minimum point easily. This creats a new idea for feed forward neural networks』 learning algorithms by using convex optimization theory .In networks training, connecting weight variables and hidden layer outputs can be optimized alternately. The new algorithm is much better than traditional algorithms for feed forward neural networks. The numerical experiments show that the new algorithm is successful.

By comparing the new algorithm with the traditional ones, a primary conclusion of their relationship is reached. It is proved theoretically that when the punishment factor nears infinity, the new algorithm is BP algorithm yet. The meaning and function of the punishment factor are also explained by numerical experiments. For three-layer feed forward neural networks, when the punishment factor is smaller, hidden layer outputs』 variable range is bigger and this is in favor to updating of the connecting weights values, when the punishment factor is bigger, hidden layer outputs』 variable range is smaller and this is not in favor to updating of the connecting weights values but it can improve precision of networks. This explains the reason that the punishment factor should be increased graally in networks training process. It also explains feasibility of the new algorithm and BP algorithm』s disadvantage that connecting weigh values can not be updated sometimes.

Deposit forecasting is very important in deposit geology. The previous algorithms』 effect is not good in deposit forecasting because of much more input samples. The paper applies the new algorithm to deposit forecasting and expectant result is reached.
The paper points out the new algorithm』s strongpoint as well as to-be-improved places in the end.

Keywords: feed forward neural networks, convex optimization theory, training algorithm, deposit forecasting, application

BP演算法及其改進

2.1 BP演算法步驟

1°隨機抽取初始權值ω0;

2°輸入學習樣本對(Xp,Yp),學習速率η,誤差水平ε;

3°依次計算各層結點輸出opi,opj,opk;

4°修正權值ωk+1=ωk+ηpk,其中pk=,ωk為第k次迭代權變數;

5°若誤差E<ε停止,否則轉3°。

2.2 最優步長ηk的確定

在上面的演算法中,學習速率η實質上是一個沿負梯度方向的步長因子,在每一次迭代中如何確定一個最優步長ηk,使其誤差值下降最快,則是典型的一維搜索問題,即E(ωk+ηkpk)=(ωk+ηpk)。令Φ(η)=E(ωk+ηpk),則Φ′(η)=dE(ωk+ηpk)/dη=E(ωk+ηpk)Tpk。若ηk為(η)的極小值點,則Φ′(ηk)=0,即E(ωk+ηpk)Tpk=-pTk+1pk=0。確定ηk的演算法步驟如下

1°給定η0=0,h=0.01,ε0=0.00001;

2°計算Φ′(η0),若Φ′(η0)=0,則令ηk=η0,停止計算;

3°令h=2h, η1=η0+h;

4°計算Φ′(η1),若Φ′(η1)=0,則令ηk=η1,停止計算;

若Φ′(η1)>0,則令a=η0,b=η1;若Φ′(η1)<0,則令η0=η1,轉3°;

5°計算Φ′(a),若Φ′(a)=0,則ηk=a,停止計算;

6°計算Φ′(b),若Φ′(b)=0,則ηk=b,停止計算;

7°計算Φ′(a+b/2),若Φ′(a+b/2)=0,則ηk=a+b/2,停止計算;

若Φ′(a+b/2)<0,則令a=a+b/2;若Φ′(a+b/2)>0,則令b=a+b/2

8°若|a-b|<ε0,則令,ηk=a+b/2,停止計算,否則轉7°。

2.3 改進BP演算法的特點分析

在上述改進的BP演算法中,對學習速率η的選取不再由用戶自己確定,而是在每次迭代過程中讓計算機自動尋找最優步長ηk。而確定ηk的演算法中,首先給定η0=0,由定義Φ(η)=E(ωk+ηpk)知,Φ′(η)=dE(ωk+ηpk)/dη=E(ωk+ηpk)Tpk,即Φ′(η0)=-pTkpk≤0。若Φ′(η0)=0,則表明此時下降方向pk為零向量,也即已達到局部極值點,否則必有Φ′(η0)<0,而對於一維函數Φ(η)的性質可知,Φ′(η0)<0則在η0=0的局部范圍內函數為減函數。故在每一次迭代過程中給η0賦初值0是合理的。

改進後的BP演算法與原BP演算法相比有兩處變化,即步驟2°中不需給定學習速率η的值;另外在每一次修正權值之前,即步驟4°前已計算出最優步長ηk。

6. 三中三求解用10+20+30+40演算法

1. 從四個數中隨機選擇三個數,共有四種選擇方式,假設本次選出的三個數為 a、b、c。2. 對於三個數 a、b、c,依次計算它們兩兩之間的和,共有三個仿塌和值。3. 如果這三個和中有兩個和值相等,則這三個數可以組成一組三中三的解法,否則嘗試下一組三個數。4. 如果將所有的四種選擇方式都走完了,仍然沒有找如備到一組合法的三中三解法,則說明輸入的四備橡圓個數無法構成任何三中三解法。

7. mod40怎麼算

您好,mod40是指取模運算,即取余數運算,又稱取余運算。mod40的運算方式是:宴備將一個數除以40,所得的余數就是mod40的結果嘩祥液。例如,若一個數是43,則亂物43除以40,余數為3,即mod40的結果為3。mod40的運算可以用於計算機編程中,可以用來求出一個數的模,以及判斷一個數是否能被40整除。

8. GPA演算法請教

沒有任何一中GPA演算法是通用的。。。百分比才是通用的。。
大部分中國大學都有百分製成績,遞交的時候交百分制就可以了。。。沒有的百分制的,把本學校的GPA計算方法附帶進去就行了。。學校會自己計算。。

如果是要看自己夠不夠資格的話,把你想去的國家發出來,自然會有人告訴你百分制的要求是多少

閱讀全文

與改進40演算法1相關的資料

熱點內容
java辦公自動化 瀏覽:340
php中超鏈接 瀏覽:253
linux默認路由設置 瀏覽:36
linux如何掛載iso 瀏覽:432
vs程序換文件夾後不能編譯 瀏覽:557
安卓源碼編譯輸入腳本沒反應 瀏覽:47
phpmysql自增 瀏覽:167
把ppt保存為pdf 瀏覽:533
汽車密封件加密配件 瀏覽:887
黑馬程序員15天基礎班 瀏覽:560
java調整格式 瀏覽:521
香港雲伺服器租用價 瀏覽:78
linuxsublime3 瀏覽:560
imac混合硬碟命令 瀏覽:277
沈陽用什麼app租房車 瀏覽:857
00後高中生都用什麼app 瀏覽:238
戴爾塔式伺服器怎麼打開獨立顯卡 瀏覽:807
醫療程序員招聘 瀏覽:598
住宿app可砍價是什麼意思 瀏覽:133
java跳出語句 瀏覽:55