20172302 《Java軟件結構與數據結構》第一週學習總結


2018下半年學習總結博客總目錄:第一週
html


教材學習內容總結

第一章 概述

1.軟件質量

軟件工程(Software Engineering)是一門關於高質量軟件開發的技術和理論的學科。算法

軟件質量從如下八個方面進行考慮:數組

  • 正確性 按照需求規範所規定的那樣處理問題,在很大程度上知足其特定需求
    • 1、程序語法錯誤。
    • 2、程序對於幾組輸入數據可以得出知足須要的結果。
    • 3、程序對於精心選擇的、典型、苛刻切帶有刁難性的幾組輸入數據可以得出知足要求的結果。
    • 4、程序對於一切合法的輸入數據都能獲得知足要求的結果。
  • 可靠性 應儘量減小發生故障的頻率,同時下降發生故障時所形成的損失
  • 健壯性 在異常的狀態可以對異常進行處理,而非發生異常就形成終止 。當輸入的數據非法時,算法應當恰當的作出反應或進行相應處理,而不是產生莫名其妙的輸出結果。而且,處理出錯的方法不該是中斷程序執行,而是應當返回一個表示錯誤或錯誤性質的值,以便在更高的抽象層次上進行處理。
  • 可用性 軟件的使用過程當中的難易程度
  • 可維護性 對軟件部分代碼進行修改的難易程度
  • 可重用性 軟件組件可重用於其餘軟件系統開發的難易程度
  • 可移植性 軟件組件在不一樣計算機環境下使用的難易程度
  • 運行效率 在不浪費資源的狀況下軟件完成其目標的程度

2.數據結構

數據結構:把多個數據按照必定的存儲方式,存儲起來,稱存儲方式之爲數據結構.
數據的存儲方式有不少,數組,隊列,鏈表,棧,哈希表等等. 不一樣的數據結構,性能是不同的,好比有的插入比較快,查詢比較快,可是刪除比較慢. 有的刪除比較快,插入比較快,可是查詢比較慢. 根據實際操做,合理選擇便可.
數據結構

不一樣數據結構之間比較
函數

第二章 算法分析

算法分析(analysis of algorithm)是計算機科學的基礎,它是從效率角度對算法進行分類。
算法效率一般用CPU的使用時間來表示。性能

增加函數與大O記法

  • 增加函數是表示問題(n)大小與咱們但願最優化的值之間的關係,該函數表示了該算法的時間複雜度或空間複雜度。學習

  • 漸進複雜度(asymptotic complexity)稱爲算法的階次,隨着問題大小的增長時增加函數的通常性質,這一性質取決於該表達式的主項,即n增長時表達式中增加最快的那一項。優化

  • 大O記法:咱們將算法具備階次爲n的時間複雜度,記爲O(n)。
    3d

增加函數的比較

  • 在給定時間內系統所能處理的最大問題,咱們將處理器的速度提升10倍,這時再有系統所能處理的最大問題,見下表

  • 各類增加函數之間的比較
    • n 較小時
    • n 較大時
  • 結論:c(常量)<㏒₂n < n < n㏒₂n < n²< n³ < 2ⁿ < 3ⁿ< n!

時間複雜度分析

  • 1.循環運行的複雜度分析
    首先肯定循環體的階n,而後乘以循環執行的次數
for (int count = 0; count < n; count++)
{
  // 複雜度爲O(1)的步驟系列
}

n * O(1) →O(n)code

  • 2.嵌套循環的複雜度分析
    循環出現嵌套時,循環的複雜度等於內層循環的複雜度乘之外層循環的複雜度
for (int count = 0; count < n; count++)
    for (int count2 = 0; count2 < n; count2++)
    {
        //複雜度爲O(1)步驟系列
    }

內外層循環的複雜度均爲O(n),總體的複雜度爲O(n²)

  • 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(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)

  • 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,故增加函數f(n) = n^2 /2,則階次是O(n^2)。

  • EX 2.5 請肯定下面代碼段的增加函數和階次
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)。

結對及互評

  • 本週結對學習狀況
    • 20172308
    • 博客中值得學習的或問題: 課後練習題完成很認真,解析也比較詳細,教材內容總結可增長些內容,側重對知識的理解部分。

    • 結對學習內容:學習第一章及第二章。

其餘(感悟、思考等)

感悟

  • 第一週的學習任務比較輕鬆,學習內容也比較簡單。又到了一個新的起點,但願可以保持最開始的狀態去學完這一學年,完成好這門課程。

參考資料

相關文章
相關標籤/搜索