20172327 2018-2019-1 《程序設計與數據結構》第一週學習總結html
教材學習內容總結
第一章 概述
1.軟件工程(Software Engineering):一門關於高質量軟件的技術和理論的學科。
2.軟件工程的目標:
- 解決正確性問題
- 按時且在預算以內給出解決方案
- 給出高質量的解決方案。
- 以合情合理的方式完成上面的事情
3.軟件質量特徵git
正確性 |
軟件在多大程度上知足其特徵需求 |
可靠性 |
軟件故障發生的頻率和危險程度 |
健壯性 |
出錯狀況下能夠獲得恰當處理的程度 |
可用性 |
用戶學習和執行任務的難易程度 |
可維護性 |
對軟件進行修改的難易程度 |
可重用性 |
軟件組件可重用於其餘軟件系統的開發的難易程度 |
可移植性 |
軟件組件能夠在多個計算機環境下使用的難易程度 |
運行效率 |
在不浪費的狀況下軟件完成其目標的程度 |
4.運行效率:算法
- 軟件必須高效地使用諸如CPU時間和儲存器之類的資源。
- 軟件系統應該有效地利用分配給它們的資源如內存和CPU時間。
5.質量問題:數據結構
- 必須優先考慮質量特徵,並盡最大努力實現。
- 某些特徵彼此之間有時是互斥的,咱們必須認真地把某一特定項目的相關問題排列出一個優先次序,而後在這些範圍內,儘量地最大限度地知足全部質量特徵。
1.程序=數據結構+算法
2.軟件=程序+軟件算法
3.數據結構:計算機儲存、組織數據的方式。
第二章 算法分析
1.軟件質量的分析特徵是資源的使用效率。CPU的使用時間是最重要的資源之一。
2.算法分析是計算機科學的一個基礎,並涉及多種技術和概念。
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^2n^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小時
改進狀況:
(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表)
參考資料