20172302 《程序設計與數據結構》第一周學習總結
2018下半年學習總結博客總目錄:第一周
教材學習內容總結
第一章 概述
1.軟件質量
軟件工程(Software Engineering)是一門關於高質量軟件開發的技術和理論的學科。
軟件質量從以下八個方面進行考慮:
- 正確性 按照需求規範所規定的那樣處理問題,在很大程度上滿足其特定需求
- 一、程序語法錯誤。
- 二、程序對於幾組輸入數據能夠得出滿足需要的結果。
- 三、程序對於精心選擇的、典型、苛刻切帶有刁難性的幾組輸入數據能夠得出滿足要求的結果。
- 四、程序對於一切合法的輸入數據都能得到滿足要求的結果。
- 可靠性 應盡可能減少發生故障的頻率,同時降低發生故障時所造成的損失
- 健壯性 在異常的狀態能夠對異常進行處理,而非發生異常就造成終止 。當輸入的數據非法時,算法應當恰當的做出反應或進行相應處理,而不是產生莫名其妙的輸出結果。並且,處理出錯的方法不應是中斷程序執行,而是應當返回一個表示錯誤或錯誤性質的值,以便在更高的抽象層次上進行處理。
- 可用性 軟件的使用過程中的難易程度
- 可維護性 對軟件部分代碼進行修改的難易程度
- 可重用性 軟件組件可重用於其他軟件系統開發的難易程度
- 可移植性 軟件組件在不同計算機環境下使用的難易程度
- 運行效率 在不浪費資源的情況下軟件完成其目標的程度
2.數據結構
數據結構:把多個數據按照一定的存儲方式,存儲起來,稱存儲方式之為數據結構.
數據的存儲方式有很多,數組,隊列,鏈表,棧,哈希表等等. 不同的數據結構,性能是不一樣的,比如有的插入比較快,查詢比較快,但是刪除比較慢. 有的刪除比較快,插入比較快,但是查詢比較慢. 根據實際操作,合理選擇即可.
不同數據結構之間比較
第二章 算法分析
算法分析(analysis of algorithm)是計算機科學的基礎,它是從效率角度對算法進行分類。
算法效率通常用CPU的使用時間來表示。
增長函數與大O記法
增長函數是表示問題(n)大小與我們希望最優化的值之間的關系,該函數表示了該算法的時間復雜度或空間復雜度。
漸進復雜度(asymptotic complexity)稱為算法的階次,隨著問題大小的增加時增長函數的一般性質,這一性質取決於該表達式的主項,即n增加時表達式中增長最快的那一項。
大O記法:我們將算法具有階次為n的時間復雜度,記為O(n)。
增長函數的比較
- 在給定時間內系統所能處理的最大問題,我們將處理器的速度提高10倍,這時再有系統所能處理的最大問題,見下表
- 各種增長函數之間的比較
- n 較小時
- n 較大時
- n 較小時
- 結論:c(常量)<㏒?n < n < n㏒?n < n2< n3 < 2? < 3?< n!
時間復雜度分析
- 1.循環運行的復雜度分析
首先確定循環體的階n,然後乘以循環執行的次數
for (int count = 0; count < n; count++)
{
// 復雜度為O(1)的步驟系列
}
n * O(1) →O(n)
- 2.嵌套循環的復雜度分析
循環出現嵌套時,循環的復雜度等於內層循環的復雜度乘以外層循環的復雜度
for (int count = 0; count < n; count++)
for (int count2 = 0; count2 < n; count2++)
{
//復雜度為O(1)步驟系列
}
內外層循環的復雜度均為O(n),整體的復雜度為O(n2)
- 3.方法調用的復雜度分析
循環體可能包含方法的調用,要確定循環體的階,需要考慮調用方法的階
for (int count=0 ; count<n; count++)
{
Printsum(count);
}
以下是Printsum方法
Public void printsum(int count)
{
Int sum =0;
for(int i=0; i<count; i++)
sum += i;
System.out.println(sum);
}
於是整體的復雜度為O(n2)
時間復雜度的計算規則
1) 加法規則
T(n,m) = T1(n) + T2(n) = O (max ( f(n), g(m) )2) 乘法規則
T(n,m) = T1(n) * T2(m) = O (f(n) * g(m))3) 一個特例(問題規模為常量的時間復雜度)
在大O表示法裏面有一個特例,如果T1(n) = O(c), c是一個與n無關的任意常數,T2(n) = O ( f(n) ) 則有T(n) = T1(n) * T2(n) = O ( c*f(n) ) = O( f(n) )。也就是說,在大O表示法中,任何非0正常數都屬於同一數量級,記為O(1)。
課後練習題解答
其他(感悟、思考等)
感悟
參考資料
- Java中常見數據結構之間的區別
- Java數據結構與算法
- 時間復雜度的計算
20172302 《程序設計與數據結構》第一周學習總結