2018下半年學習總結博客總目錄:第一週
html
軟件工程(Software Engineering)是一門關於高質量軟件開發的技術和理論的學科。算法
軟件質量從如下八個方面進行考慮:數組
數據結構:把多個數據按照必定的存儲方式,存儲起來,稱存儲方式之爲數據結構.
數據的存儲方式有不少,數組,隊列,鏈表,棧,哈希表等等. 不一樣的數據結構,性能是不同的,好比有的插入比較快,查詢比較快,可是刪除比較慢. 有的刪除比較快,插入比較快,可是查詢比較慢. 根據實際操做,合理選擇便可.
數據結構
不一樣數據結構之間比較
函數
算法分析(analysis of algorithm)是計算機科學的基礎,它是從效率角度對算法進行分類。
算法效率一般用CPU的使用時間來表示。性能
增加函數是表示問題(n)大小與咱們但願最優化的值之間的關係,該函數表示了該算法的時間複雜度或空間複雜度。學習
漸進複雜度(asymptotic complexity)稱爲算法的階次,隨着問題大小的增長時增加函數的通常性質,這一性質取決於該表達式的主項,即n增長時表達式中增加最快的那一項。優化
大O記法:咱們將算法具備階次爲n的時間複雜度,記爲O(n)。
3d
for (int count = 0; count < n; count++) { // 複雜度爲O(1)的步驟系列 }
n * O(1) →O(n)code
for (int count = 0; count < n; count++) for (int count2 = 0; count2 < n; count2++) { //複雜度爲O(1)步驟系列 }
內外層循環的複雜度均爲O(n),總體的複雜度爲O(n²)
循環體可能包含方法的調用,要肯定循環體的階,須要考慮調用方法的階
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(n²)
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)。
可靠性與健壯性之間的關係是什麼?
可靠性關注的是軟件發生故障的頻率以及在什麼環境下發生故障,而健壯性關注的是軟件系統出現故障會發生什麼?
系統的健壯性(robustness)也稱爲系統的堅固性或堅實性,這是衡量一個系統可否從各類出錯條件下恢復能力的一種測度。引發出錯的條件能夠是來自系統內部,也能夠是系統外部的。好比:一個健壯的系統能夠允許數據輸入的錯誤,也能夠容許內部組成部件的故障。雖然在健壯性與可靠性之間有着必定的聯繫,可是二者是不一樣的測度。
EX2.1 下列增加函數的階次是多少?
a.10n^2+100n+1000 n^2
b.10n^3-7 n^3
c.2^n+100n^3 2^n
d.n^2 ·log(n) n^2 ·log(n)
for(int count = 0 ; count < n ; count++) for(int count2 = 0 ; count2 < n ; count2 = count2 + 2) { System.out.println(count,count2); } }
如題,內層循環是n/2,外層循環是n,故增加函數f(n) = n^2 /2,則階次是O(n^2)。
for(int count = 0 ; count < n ; count++) for(int count2 = 1 ; count2 < n ; count2 = count2 * 2) { System.out.println(count,count2); } }
如題,內層循環次數爲log(2)n,外層循環次數n,因此增加函數是nlog(2)n,而階次只與增加函數的最高階項有關,忽略次項與常數項,故階次是O(nlog2n)。
博客中值得學習的或問題: 課後練習題完成很認真,解析也比較詳細,教材內容總結可增長些內容,側重對知識的理解部分。
結對學習內容:學習第一章及第二章。