範文齋

位置:首頁 > 行業範文 > 設計

算法設計心得體會

設計1.92W

一、實驗內容:

算法設計心得體會

這學期的算法與設計課,老師佈置了這四個問題,分別是貨郎擔問題,動態生成二維數組,對話框下拉列表,排序問題。

二、學習掌握:

基本程序描述:

(1)貨郎擔問題:貨郎擔問題屬於易於描述但難於解決的著名難題之一,至今世界上還有不少人在研究它。貨郎擔問題要從圖g的所有周遊路線中求取具有最小成本的周遊路線,而由始點出發的周遊路線一共有(n一1)!條,即等於除始結點外的n一1個結點的排列數,因此貨郎擔問題是一個排列問題。貨郎擔的程序實現了利用窮舉法解決貨郎擔問題,可以在城市個數和各地費用給定的情況下利用窮舉法逐一計算出每一條路線的費用,並從中選出費用最小的路線,從而求出問題的解。

(2)費用矩陣:費用矩陣的主要內容是動態生成二維數組。首先由鍵盤輸入自然數,費用矩陣的元素由隨機數產生,並取整,把生成的矩陣存放在二維數組中,最後把矩陣內容輸出到文件和屏幕上。它採用分支界限法,分支限界法的基本思想是對包含具有約束條件的最優化問題的所有可行解的解(數目有限)空間進行搜索。該算法在具體執行時,把全部可行的解空間不斷分割爲越來越小的子集,併爲每個子集內的解計算一個下界或上界。動態生成二維n*n的數組程序利用指針表示數組的行和列,並逐一分配空間,在輸入n的數值後,系統自動分配空間,生成n*n的數組,併產生隨機數填充數組,最後將結果輸入到指定文件中。

(3)Mfc:在下拉列表框中添加內容程序,在下拉列表對應的函數中利用addstring添加需要的內容。首先定義下拉列表框爲ccombox型,並定義其屬性名,利用addstring函數可以任意添加需要的內容。a排序問題:快速排序的運行時間與劃分是否對稱有關,其最壞情況發生在劃分過程中產生的兩個區域分別包含n-1個元素和1個元素的時候。其算法的時間複雜度爲O(n2),在最好的情況下每次劃分的基準恰好爲中值,可得其算法時間複雜度爲O(n?n)。算法的實現和理解和代碼實現完全是兩回事,想要完全掌握一種算法,需要動手實踐,用代碼實現,才能理解透徹,真正掌握。b對話框下拉列表:這個項目簡單易懂,輕鬆實現。

三、疑問與總結

貨郎擔的問題,我認爲窮舉法相對比而言是比較初級的方法,費時耗力,適合在練習時選用,但是在實際問題中不建議採用。克魯斯卡爾或者普里姆算法求取最小生成樹的方法來解決貨郎擔的問題是更適合現實解決問題的。我認爲程序可以用switch函數來將函數分成幾個部分更人性化,比如分爲解決問題的的選項,輸出結果選項,退出程序選項等。再有就是費用矩陣的值可以從文件中讀取,而結果也可以直接放在指定文件中,這樣在實際應用中比較廣泛。

動態生成二維數組的程序我認爲如果按照規範性,我的方法是中規中矩的,畢竟再向下延伸,生成三維的數組,需要三層的`指針來實現。但是就程序的簡化程度和計算機處理時間來說,我認爲這樣雙層指針的算法有些太佔用內存,畢竟要給行和列各分配n個空間。我通過與同學的交流,我發現可以用1位數組來實現二維的n*n的數組。首先分配n*n的空間,然後通過循環在一行的數據達到n時自動換行。這樣程序得到了一定的簡化,並且減少了一定的內存使用。我認爲這種方法是比較貼合實際的。

四、心得體會:

在計算機軟件專業中,算法分析與設計是一門非常重要的課程,很多人爲它如癡如醉。很多問題的解決,程序的編寫都要依賴它,在軟件還是面向過程的階段,就有程序=算法+數據結構這個公式。算法的學習對於培養一個人的邏輯思維能力是有極大幫助的,它可以培養我們養成思考分析問題,解決問題的能力。

如果一個算法有缺陷,或不適合某個問題,執行這個算法將不會解決這個問題。不同的算法可能用不同的時間、空間或效率來完成同樣的任務。一個算法的優劣可以用空間複雜性和時間複雜度來衡量。算法可以使用自然語言、僞代碼、流程圖等多種不同的方法來描述。計算機系統中的操作系統、語言編譯系統、數據庫管理系統以及各種各樣的計算機應用系統中的軟件,都必須使用具體的算法來實現。算法設計與分析是計算機科學與技術的一個核心問題。因此,學習算法無疑會增強自己的競爭力,提高自己的修爲,爲自己增彩。

標籤:心得體會 算法