軟件質量:
一、軟件工程是一門關於高質量軟件開發的技術和理論的學科
二、高質量軟件的特徵
html
數據結構:
算法
三、算法的階次爲增加函數提供了一個上界。
- 增加函數的比較:
一、漸進複雜度爲線性
數據結構
注:其中裏面3.1六、2.1五、3.3的算法爲,√10≈3.16227766016837九、³√10≈2.154四、log2(10)=lg(10)/lg(2)=1/lg(2)=3.321928
因此說,更快的CPU,並不能影響主項,只會給增加函數增長常量,仍須要重視算法分析,若是算法的運行效率低,那麼從長遠來看,再快的CPU也無濟於事。
二、n值較小和n 值較大時各類增加函數的比較
函數
- 時間複雜度分析
一、循環運行的複雜度分析
要肯定某個算法的階次,經常須要肯定某個特定語句或某個語句集運行的次數。要肯定該循環的階數n,而後要運行的次數乘以它,n表示問題的大小。學習
for(int count = 0;count<n;count++) { //*複雜度爲O(1)的步驟系列 }
count = 1; while(count < n) { count *=2; //複雜度爲O(1)的步驟系列 }
二、嵌套循環的複雜度分析
分析嵌套循環的複雜度是,必須jiang 內層循環的複雜度乘之外層循環都考慮進來。優化
for(int count = 0;count < n;count++) { for(int count2 = 0;count2<n;count2++) { //複雜度爲O(1)的步驟系列 } }
內層循環的複雜度根據上述的算法獲得複雜度爲O(n),再與外層循環次數相乘,獲得嵌套循環的複雜度爲O(n^2)。設計
三、方法調用的複雜度分析
考慮清楚調用方法的複雜度,在進行接下來的分析
若是調用多個方法或屢次方法,最後可忽略常量和非主要項。3d
for(int count = 0;count<n;count++) { //*複雜度爲O(1)的步驟系列 }
count = 1; while(count < n) { count *=2; //複雜度爲O(1)的步驟系列 }
for(int count = 0 ; count < n ; count++) for(int count2 = 0 ; count2 < n ; count2 = count2 + 2) { System.out.println(count,count2); } }
解:內層循環複雜度爲O(n/2),外層循環須要進行的次數是n,故增加函數爲F(n)=(n^2)/2,階次爲n^2code
for(int count = 0 ; count < n ; count++) for(int count2 = 1 ; count2 < n ; count2 = count2 * 2) { System.out.println(count,count2); } }
解:內層循環進行的次數是O(log₂n),外層循環須要進行的次數是n,故增加函數爲F(n)=n·log₂n,因此階次爲n·log2n。htm
這個學期的Java課又要開始了,我只想說,革命還沒有成功,同志仍需努力,Java的學習道路還有很長,這個學期要更加努力啦٩(๑>◡<๑)۶
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 0/0 | 1/1 | 10/10 |