1. 程式人生 > >20172302 《程序設計與數據結構》第一周學習總結

20172302 《程序設計與數據結構》第一周學習總結

開發 包含 函數 效率 使用 學習內容總結 的區別 count cnblogs


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


教材學習內容總結

第一章 概述

1.軟件質量

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

軟件質量從以下八個方面進行考慮:

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

2.數據結構

數據結構:把多個數據按照一定的存儲方式,存儲起來,稱存儲方式之為數據結構.
數據的存儲方式有很多,數組,隊列,鏈表,棧,哈希表等等. 不同的數據結構,性能是不一樣的,比如有的插入比較快,查詢比較快,但是刪除比較慢. 有的刪除比較快,插入比較快,但是查詢比較慢. 根據實際操作,合理選擇即可.
技術分享圖片

不同數據結構之間比較
技術分享圖片

第二章 算法分析

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

增長函數與大O記法

  • 增長函數是表示問題(n)大小與我們希望最優化的值之間的關系,該函數表示了該算法的時間復雜度或空間復雜度。

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

  • 大O記法:我們將算法具有階次為n的時間復雜度,記為O(n)。
    技術分享圖片

增長函數的比較

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

技術分享圖片

  • 各種增長函數之間的比較
    • 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 《程序設計與數據結構》第一周學習總結