軟體算法

軟體算法

要使計算機能完成人們預定的工作,首先必須為如何完成預定的工作設計一個軟體算法,然後再根據軟體算法編寫程式。軟體算法在現實生活中有很多的運用 ,在不同的領域也會採用不同的軟體程式進行計算。隨著信息化的不斷發展 ,計算機軟體算法已經逐漸成為一種最重要的運算模式,近些年來,我國十分重視對計算機軟體技術的相關問題探究,同時,在各大高校 ,也不斷重視培養相關的計算機軟體操作方面的人才 ,並逐步深化軟體算法在現實生活中的運用。

簡介

要使計算機能完成人們預定的工作,首先必須為如何完成預定的工作設計一個軟體算法,然後再根據軟體算法編寫程式。電腦程式要對問題的每個對象和處理規則給出正確詳盡的描述,其中程式的數據結構和變數用來描述問題的對象,程式結構、函式和語句用來描述問題的算法。算法數據結構是程式的兩個重要方面。

算法是問題求解過程的精確描述,一個算法由有限條可完全機械地執行的、有確定結果的指令組成。指令正確地描述了要完成的任務和它們被執行的順序。計算機軟體算法指令所描述的順序執行算法的指令能在有限的步驟內終止,或終止於給出問題的解,或終止於指出問題對此輸入數據無解。

算法設計

疊代法

軟體算法 軟體算法
軟體算法 軟體算法

疊代法是用於求方程或方程組近似根的一種常用的算法設計方法。設方程為 ,用某種數學方法導出等價的形式 ,然後按以下步驟執行:

軟體算法 軟體算法

1、選一個方程的近似根,賦給變數 ;

軟體算法 軟體算法
軟體算法 軟體算法
軟體算法 軟體算法
軟體算法 軟體算法

2、將 的值保存於變數 ,然後計算 ,並將結果存於變數;

軟體算法 軟體算法
軟體算法 軟體算法

3、當 與 的差的絕對值還小於指定的精度要求時,重複步驟2的計算。

軟體算法 軟體算法

若方程有根,並且用上述方法計算出來的近似根序列收斂,則按上述方法求得的 就認為是方程的根。

具體使用疊代法求根時應注意以下兩種可能發生的情況:

1、如果方程無解,算法求出的近似根序列就不會收斂,疊代過程會變成死循環,因此在使用疊代算法前應先考察方程是否有解,並在程式中對疊代的次數給予限制。

2、 方程雖然有解,但疊代公式選擇不當,或疊代的初始近似根選擇不合理,也會導致疊代失敗。

窮舉搜尋法

窮舉搜尋法是對可能是解的眾多候選解按某種順序進行逐一枚舉和檢驗,並從眾找出那些符合要求的候選解作為問題的解。

對一組數窮盡所有排列,有很直接的方法。將一個排列看作一個長整數,則所有排列對應著一組整數。將這組整數按從小到大的順序排列排成一個整數,從對應最小的整數開始。按數列的遞增順序逐一列舉每個排列對應的每個整數,這能更有效地完成排列的窮舉。從一個排列找出對應數列的下一個排列可在當前排列的基礎上作部分調整來實現。倘若當前排列為1,2,4,6,5,3,並令其對應的長整數為124653。要尋找比長整數124653更大的排列,可從該排列的最後一個數字順序向前逐位考察,當發現排列中的某個數字比它前一個數字大時,如本例中的6比它的前一位數字4大,這說明還有對應更大整數的排列。

窮舉搜尋法的缺陷是編寫的程式通常不能適應變化的情況。

遞推法

軟體算法 軟體算法
軟體算法 軟體算法
軟體算法 軟體算法
軟體算法 軟體算法
軟體算法 軟體算法
軟體算法 軟體算法
軟體算法 軟體算法
軟體算法 軟體算法
軟體算法 軟體算法
軟體算法 軟體算法

遞推法是利用問題本身所具有的一種遞推關係求問題解的一種方法。設要求問題規模為 的解,當 時,解或為已知,或能非常方便地得到解。能採用遞推法構造算法的問題有重要的遞推性質,即當得到問題規模為 的解後,由問題的遞推性質,能從已求得的規模為 的一系列解,構造出問題規模為 的解。這樣,程式可從 或 出發,重複地,由已知至 規模的解,通過遞推,獲得規模為 的解,直至得到規模為 的解。

遞歸法

軟體算法 軟體算法
軟體算法 軟體算法

遞歸是設計和描述算法的一種有力的工具,它在複雜算法的描述中被經常採用,能採用遞歸描述的算法通常有這樣的特徵:為求解規模為 的問題,設法將它分解成規模較小的問題,然後從這些小問題的解方便地構造出大問題的解,並且這些規模較小的問題也能採用同樣的分解和綜合方法,分解成規模更小的問題,並從這些更小問題的解構造出規模較大問題的解。特別地,當規模 時,能直接得解。

遞歸算法的執行過程分遞推和回歸兩個階段。在遞推階段,把較複雜的問題(規模為n)的求解推到比原問題簡單一些的問題(規模小於n)的求解。

編寫遞歸函式時要注意,函式中的局部變數和參數知識局限於當前調用層,當遞推進入“簡單問題”層時,原來層次上的參數和局部變數便被隱蔽起來。在一系列“簡單問題”層,它們各有自己的參數和局部變數。

由於遞歸引起一系列的函式調用,並且可能會有一系列的重複計算,遞歸算法的執行效率相對較低。當某個遞歸算法能較方便地轉換成遞推算法時,通常按遞推算法編寫程式。

回溯法

回溯法也稱為試探法,該方法首先暫時放棄關於問題規模大小的限制,並將問題的候選解按某種順序逐一枚舉和檢驗。當發現當前候選解不可能是解時,就選擇下一個候選解;倘若當前候選解除了還不滿足問題規模要求外,滿足所有其他要求時,繼續擴大當前候選解的規模,並繼續試探。如果當前候選解滿足包括問題規模在內的所有要求時,該候選解就是問題的一個解。在回溯法中,放棄當前候選解,尋找下一個候選解的過程稱為回溯。擴大當前候選解的規模,以繼續試探的過程稱為向前試探。

在用回溯法求解有關問題的過程中,一般是一邊建樹,一邊遍歷該樹。一般採用非遞歸方法。回溯法的非遞歸算法的一般流程如下:

在用回溯法求解問題,也即在遍歷狀態空間樹的過程中,如果採用非遞歸方法,則我們一般要用到棧的數據結構。這時,不僅可以用棧來表示正在遍歷的樹的結點,而且可以很方便地表示建立孩子結點和回溯過程。例如在組合問題中,我們用一個一維數組Stack[ ]表示棧。開始棧空,則表示了樹的根結點。如果元素1進棧,則表示建立並遍歷(1)結點;這時如果元素2進棧,則表示建立並遍歷(1,2)結點;元素3再進棧,則表示建立並遍歷(1,2,3)結點。這時可以判斷它滿足所有約束條件,是問題的一個解,輸出(或保存)。這時只要棧頂元素(3)出棧,即表示從結點(1,2,3)回溯到結點(1,2)。

貪婪法

貪婪法是一種不追求最優解,只希望得到較為滿意解的方法。貪婪法一般可以快速得到滿意的解,因為它省去了為找最優解要窮盡所有可能而必須耗費的大量時間。貪婪法常以當前情況為基礎作最優選擇,而不考慮各種可能的整體情況,所以貪婪法不要回溯。

例如平時購物找錢時,為使找回的零錢的硬幣數最少,不考慮找零錢的所有各種發表方案,而是從最大面值的幣種開始,按遞減的順序考慮各幣種,先儘量用大面值的幣種,當不足大面值幣種的金額時才去考慮下一種較小面值的幣種。這就是在使用貪婪法。這種方法在這裡總是最優,是因為銀行對其發行的硬幣種類和硬幣面值的巧妙安排。如只有面值分別為1、5和11單位的硬幣,而希望找回總額為15單位的硬幣。按貪婪算法,應找1個11單位面值的硬幣和4個1單位面值的硬幣,共找回5個硬幣。但最優的解應是3個5單位面值的硬幣。

套用領域

建築工程

軟體算法目前已經很好的運用於工程建築領域。許多建築工程單位利用計算機的軟體算法進行相關的成本預算 ,收益預算以及採購預算等。相關的建築單位可以根據特定的程式,對所採用的數據進行輸入,完成輸入後,利用統一的程式計算出建築工程中的相關數據。目前,隨著計算機軟體算法水平的提高 ,建築工程領域對軟體算法的大量運用 ,很大程度上提高了工程建築的運作效率。

船舶建造

軟體算法在船舶建造領域有著廣泛的運用 。在船舶建造過程中,往往通過軟體算法進行合理的計算所要使用的材料量,利用軟體算法中的貪婪算法,可以最大程度上節省所要運用的建造材料以及資源,減少在船舶建造過程中不必要的資源的浪費。因此可以說,軟體算法的廣泛運用,在很大程度上解決了船舶建造過程中有關資源浪費的一系列問題。因此,在我國船舶建造過程中一般都會選擇軟體算法的運用。

金融領域

在金融領域方面利用軟體算法,是近些年逐步運用的一種形式。通過軟體算法,可以實時的分析出現階段金融時態的變化過程,以及相關金融數據的掌握,因此軟體算法在金融領域的運用逐步深化。現階段,我國銀行業發行的金融 IC 卡全部採用國外晶片和國際通用標準算法(金融社保卡除外),這是軟體算法的一種重要的運算形式 ,這種方式方法的運用 ,無疑為我國金融銀行領域提供了良好的便利條件與便利基礎。

資源開發

軟體算法也廣泛的運用於資源開發領域過程中 ,資源的高效率的合理開發和利用是近些年來所追求的目標 ,因此 ,對資源的開發與利用 ,利用軟體算法進行對開採度等數據的計算 ,可以很好的把握資源的開採程度 ,防止資源開採過度造成資源的枯竭 ,或者資源的開採力度不夠 ,不能實現很大的經濟效益。因此可以說 ,計算機軟體算法在資源開採方面也有很大的利用程度。

軟體算法在多個領域有所運用 ,不僅局限於以上所列舉的 3 個領域,軟體算法還在醫學、道路設計、數學研究等多種領域有所利用和發展 ,近些年來 ,越來越多的軟體算法被開發 ,不同的領域運用不同的軟體算法進行相關的計算,帶來了極大的便利性 。

相關詞條

熱門詞條

聯絡我們