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

20172324 2018-2019-1 《程序設計與數據結構》第一周學習總結

htm baidu img 等於 法規 函數 數據結構 方式 環境

20172324 2018-2019-1 《程序設計與數據結構》第一周學習總結

教材學習內容總結

概述

  • 軟件質量
    • 準確性:軟件提供的功能是否正確(用戶需要的)
    • 可靠性:產品在規定的條件下,在規定的時間內完成規定功能的能力
    • 健壯(易恢復)性:系統失效後,重新恢復原有的功能和性能的能力
    • 可用性:在指定使用條件下,產品被理解、 學習、使用和吸引用戶的能力
    • 可維護性:在規定條件下,規定的時間內,使用規定的工具或方法修復規定功能的能力
    • 可重用性:軟件組建可用於其他軟件開發的難易程度
    • 可移植性:從一種環境遷移到另一種環境的能力
    • 運行效率:在不浪費資源的情況下軟件完成目標的程度
  • 數據結構
    • 數據結構:計算機存儲、組織數據的形式。

      程序 = 數據結構 + 算法
      軟件 = 程序 + 軟件工程

算法分析

  • 效率目標

    算法效率常用CPU的使用時間表示

  • 算法分析

    算法分析是從效率的角度對算法進行分類

  • 增長函數與大O記法
    • 增長函數是表示問題(n)大小與我們希望最優化的值之間的關系,該函數表示了該算法的時間復雜度或空間復雜度。
    • 大O記法:我們將算法具有階次為n的時間復雜度,記為O(n)。
      技術分享圖片

不管問題是大是小,運行賦值語句和if語句一次,其復雜度就為 O(1)。

  • 漸進復雜度

    漸進復雜度稱為算法的階次

    • 算法的階次是忽略該算法的增長函數的常量和其他次要項,只保留主項。
  • 增長函數的比較
  • 時間復雜度分析
    1.假設某個循環體復雜度為O(1),那麽下面循環的時間復雜度為 O(n)

for(int count = 0;count<n;count++)
{
//*復雜度為O(1)的步驟系列
}

某個循環結構以線性方式循環n次,且該循環的復雜度為O(1),那麽循環的時間復雜度為 O(n)
2.如果循環的復雜程度是對數級的

count = 1;
while(count < n)
{
count *=2;
//復雜度為O(1)的步驟系列
}

3.嵌套循環的復雜度分析循環出現嵌套時,循環的復雜度等於內層循環的復雜度乘以外層循環的復雜度

for (int count = 0; count < n; count++)
    for (int count2 = 0; count2 < n; count2++)
    {
        //復雜度為O(1)步驟系列
    }

時間復雜度的計算規則
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)。

教材學習中的問題和解決過程

教材布置習題解答

  • EX2.1 下列增長函數的階次是多少?
    a.10n^2+100n+1000:n^2
    b.10n^3-7:n^2
    c.2^n+100n^3:n^3
    d.n^2 ·log(n):n^2 ·log(n)
  • EX 2.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?(n-1),外循環需要的次數n。故:增長函數為F(n)=n·log?(n-1),階次為O(n·log2(n))

其他(感悟、思考等,可選)

參考資料

  • PPT
  • 軟件質量特性

20172324 2018-2019-1 《程序設計與數據結構》第一周學習總結