1.1 軟件質量: 軟件符合明確敘述的功能和性能需求、文檔中明確描述的開發標準、以及全部專業開發的軟件都應具備的和隱含特徵相一致的程度。
軟件質量的特徵: 1.正確性:軟件在多大程度上知足其特定需求;
2.可靠性:軟件故障發生的頻率及危險程度;
3.健壯性:出錯狀況下能夠獲得處理的程度;
4.可用性:用戶學習和執行任務的難易程度;
5.可維護性:對軟件進行修改的難易程度;
6.可重用性:軟件組件可重用於其餘軟件系統開發的難易程度;
7.可移植性:軟件組件能夠在多個計算機環境下使用的難易程度;
8.運行效率:在不浪費資源的狀況下軟件完成其目標的程度。html
1.2 數據結構: 計算機存儲數據的方式。算法
2.2 增加函數與大O記法:
增加函數(growth function)表示問題(n)大小與咱們但願最優化的值之間的關係。該函數表示了該算法的時間複雜度(time complexity)
與空間複雜度(space complexity)。
漸近複雜度(asymptotic complexity),也稱爲算法的階次(order),是咱們主要關注點。
大O記法:用O(階次)來表示某一算法具備某一階次的時間複雜度的方法。
數據結構
2.3 增加函數的比較:
函數
2.4 時間複雜度分析:
1.循環運行的時間複雜度分析:循環體的複雜度乘以該循環的運行次數。
時間複雜度:O(n)性能
for (int count = 0; count < n; count++) { // 複雜度爲O(1)的步驟系列 }
時間複雜度:O(logn)學習
count = 1; while(count < n) { count *=2; //複雜度爲O(1)的步驟系列 }
2.嵌套循環的時間複雜度分析:內外層循環均需考慮。
內層循環的複雜度O(n),外層循環運行次數:n,總複雜度O(n^2)優化
for(int count = 0;count < n;count++) { for(int count2 = 0;count2<n;count2++) { //複雜度爲O(1)的步驟系列 } }
3.方法調用的複雜度分析:具體問題具體分析。
時間複雜度:O(n^2)spa
for(int count = 0;count<n;count++) { printsum(count); } public void printsum(int count) { int sum = 0; for(int I = 1;I<count;I++) sum += I; System.out.println(sum); }
返回目錄.net
解決:由大O記法以及漸近複雜度的定義可知:階次與主項有關;因此應取n變化時,變換最快的一項做爲主項。
a.n^2
b.n^3
c.2^n
d.n^2logn設計
問題EX2.4:肯定下面代碼段的增加函數和階次:
for (int count = 0; count < n; count++) for(int count2 = 0 ; count2 < n; count2 = count2 + 2 ) { System.out.println(count,count2) }
解決:內層循環爲n/2,外層循環次數n,增加函數爲n^2/2;時間複雜度爲:O(n^2),階次爲n^2.
問題EX2.5:肯定下面代碼段的增加函數和階次:
for (int count = 0; count < n; count++) for(int count2 = 1 ; count2 < n; count2 = count2 * 2 ) { System.out.println(count,count2) }
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 3000行 | 15篇 | 300小時 | |
第一週 | 0/0 | 1/1 | 12/12 | 百廢待興 |