20172321 《程序設計與數據結構》第一周學習總結
阿新 • • 發佈:2018-09-09
數據結構 pre 復雜度分析 sys 增長 之間 style 思考 程序設計
20172321 《程序設計與數據結構》第一周學習總結
教材學習內容總結
第一章 概述
1.1 軟件質量
- 軟件工程是一門關於高質量軟件開發的技術和理論的學科。
- 高質量軟件的特征
1.2 數據結構
- 數據結構是計算機存儲、組織數據的方式。
- 數據結構是指相互之間存在一種或多種特定關系的數據元素的集合。通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率。
- 常用結構
第二章
2.1 算法效率分析
- 算法效率通常用==CPU的使用時間==表示
- 算法分析是從效率的角度對算法進行分類
2.2 增長函數與大O記法
- 增長函數表示與該問題大小相對應的時間或者空間的使用。該函數表示了該算法的事件復雜度或空間復雜度。
- 漸進復雜度稱為算法的階次。主要關註隨著問題大小的增加時增長函數的一般性質,這一性質取決於該表達式的主項,即n增加時表達式中增長最快的那一項。
- 大O記法
2.3 增長函數的比較
- 處理器提速10倍後能處理的問題大小的增加倍速
- n相對較小時
- n很大時
2.4 時間復雜度分析
- 循環的時間復雜度等於循環體的復雜度乘以該循環運行的次數
for (int count = 0; count < n; count++)
{
// 復雜度為O(1)的步驟系列
}
- 分析嵌套循環的復雜度時,必須將內層循環和外層循環都考慮進來
for (int count = 0; count < n; count++) for (int count2 = 0; count2 < n; count2++) { //復雜度為O(1)步驟系列 }
教材學習中的問題和解決過程
問題:書上第15頁說,在算法復雜度中使用對數時,基本上是指以2為底的對數,那麽特殊情況一般出現在什麽時候呢。
解答:其實我主要是想知道特殊情況之後剩下的都是基本情況了。
教材習題作答
- EX2.1 下列增長函數的階次是多少?
- a.10n^2+100n+1000
- 解:O(n^2)
- b.10n^3-7
- 解:O(n^3)
- c.2^n+100n^3
- 解:O(2^n)
- d.n^2 ·logn
- 解:O(n^2 ·logn)
- 這道題和書上圖2.2的例題基本一樣。
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); } }
- 解:這段代碼可以看出是嵌套循環,內層循環的循環次數是logn,外層循環的循環次數是n,所以增長函數為:F(n)=nlogn,所以階次為O(nlogn)。
結對及互評
其他(感悟、思考等,可選)
按照這麽多年以來的慣例,每到學期之初,我就應該在此立下誓言:這個學期開始我要好好學習、天天向上,多讀書,多看報,少吃零食,多睡覺。
學習進度條
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | |
---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 |
第一周 | 0/0 | 1/1 | 8/8 |
參考資料
- [Java軟件結構與數據結構](第四版)
- java中的各個數據結構區別
20172321 《程序設計與數據結構》第一周學習總結