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

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

教材學習內容總結

第一章 概述

軟件質量


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

2.軟件工程的目標:

  • 解決正確性問題
  • 按時且在預算以內給出解決方案
  • 給出高質量的解決方案。
  • 以合情合理的方式完成上面的事情


3.軟件質量特徵git

質量特偵 描述
正確性 軟件在多大程度上知足其特徵需求
可靠性 軟件故障發生的頻率和危險程度
健壯性 出錯狀況下能夠獲得恰當處理的程度
可用性 用戶學習和執行任務的難易程度
可維護性 對軟件進行修改的難易程度
可重用性 軟件組件可重用於其餘軟件系統的開發的難易程度
可移植性 軟件組件能夠在多個計算機環境下使用的難易程度
運行效率 在不浪費的狀況下軟件完成其目標的程度


4.運行效率:算法

  • 軟件必須高效地使用諸如CPU時間和儲存器之類的資源。
  • 軟件系統應該有效地利用分配給它們的資源如內存和CPU時間。


5.質量問題:數據結構

  • 必須優先考慮質量特徵,並盡最大努力實現。
  • 某些特徵彼此之間有時是互斥的,咱們必須認真地把某一特定項目的相關問題排列出一個優先次序,而後在這些範圍內,儘量地最大限度地知足全部質量特徵。

數據結構


1.程序=數據結構+算法

2.軟件=程序+軟件算法

3.數據結構:計算機儲存、組織數據的方式。

第二章 算法分析

算法效率分析


1.軟件質量的分析特徵是資源的使用效率。CPU的使用時間是最重要的資源之一。

2.算法分析是計算機科學的一個基礎,並涉及多種技術和概念。

增加函數與大O記法


1.算法的效率能夠根據該問題的大小和處理步奏數來定義。

2.增加函數表示與該問題大小相對應的時間或空間的使用。

3.增加函數(growth function)表示問題(n)大小與咱們但願最優化的值之間的關係。該函數表示了該算法的時間複雜度(time complexity)或空間複雜度(space complexity)。

3.漸進複雜度稱爲算法的階次(order)。

4.O()記法稱爲大O記法。

5.算法的階次是忽略該算法的增加函數中的常量和其餘次要項,只保留主項而得出的。

6.無論問題是大是小,運行賦值語句和if語句一次,其複雜度就爲O(1)。

7.循環語句和方法調運語句可能會致使更高階次的增加函數。

8.增加函數及其漸進複雜度


9.算法的階次爲增加函數提供了一個上界。

10.全部具備相同階次的算法,從運行效率的角度來講都認爲是等價的。函數

增加函數的比較


1.處理器速度和儲存器並不能彌補算法效率的差別。

2.若是算法的效率底,那麼從長遠來講,使用更快的處理器也無濟於事。

3.在n很小時算法差異很小,可是當n很大時,增加函數之間的差異就很明顯。

時間複雜度計算


循環運行的複雜度分析

1.要分析循環運行,首先要肯定該循環體的階次n,而後用該循環要運行的次數乘以它。

2.要分析算法的複雜度,一般須要分析循環的運行。

3.循環的時間複雜度等於循環的複雜度乘以該循環的次數。

嵌套循環的複雜度度分析

1.循環出現嵌套時,計算其複雜度須要考慮內層循環和外層循環的複雜度,須要用內層循環的複雜度乘之外層循環的複雜度。

方法調運的複雜度分析

1.循環體可能包含方法的調用

2.要肯定循環體的階,須要考慮調運方法的階。

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

  • 問題1:請問O(k^2*n^k/k!) 漸進性到O(n^k)的推導,是不是先取對數變爲多項式log(k^2) + log(n^k) - log(k!),而後捨去log(k^2)和-log(k!)得出?
    學習

  • 分析:這個問題實際上是用窮舉法求解獨立集問題。
    首先有C(n,k)種方法求圖的k個點的方法數
    而後對於這k個點,有O(k^2)種方法判斷是否右邊關聯
    因此根據乘法規則
    T(n)=O(k^2C(n,k))
    這裏C(n,k)<=n^k/k!
    帶入以後
    T(n)=O(k^2
    n^k/k!)
    因爲k^2和k!相對n^k來講是低階項,因此
    T(n)=O(n^k)優化

教材佈置習題解答

  • EX2.1 下列增加函數的階次是多少?

    a. 10n^2+100n+1000

    b. 10n^3-7

    c. 2^n+100n^3

    d. n^2*logn
解答:
a.平方型:由於漸進複雜度稱爲算法的階次,所以該增加函數的階次爲:O(n^2)。
b.立方型:由於n^3增加速度快,所以該增加函數的階次爲:O(n^3)。
c.指數型:由於2^n增加速度比n^3要快,所以該增加函數的階次爲:O(2^n)。
d.複合型:由於是乘法,所以該增加函數的階次爲:O(n^2*log⁡)。
  • 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)。
  • EX2.5 請肯定下面代碼段的增加函數和階次:

    for(int count = 0 ; count < n ; count++)

    for(int count2 = 0 ; count2 < n ; count2 = count2 * 2)

    {

    System.out.println(count,count2);

    }

    }
解答:這個是嵌套循環,內層循環的循環次數是log2(n),外層循環的循環次數是n,因此增加函數爲:F(n)=n·log2(n)
      又由於階數與增加函數的最高階項有關,因此忽略次項與常數項。因此階次爲O(n·log2(n))。

代碼託管

本週不存在所要託管的代碼spa

結對及互評

暫無.net

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

概念不少,嘚仔細看,有不少細節,上課剛開始聽忽然有點懣,可是課後仔細將書讀了一遍以後,發現並不難。設計

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 0/0 1/1 8/8

參考:軟件工程軟件的估計爲何這麼難軟件工程 估計方法

  • 計劃學習時間:10小時

  • 實際學習時間:8小時

  • 改進狀況:

(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表
)

參考資料

相關文章
相關標籤/搜索