20172313 2018-2019-1 《程序設計與數據結構》第一週學習總結
教材學習內容總結
- 第一章 概述
- 軟件工程是一門關於高質量軟件開發的技術和理論的學科。
- 軟件開發解決的問題爲控制開發過程,實現高質量的軟件。
- 軟件必須有效使用諸如CPU時間和內存之類的資源。
- 質量特徵必須優先考慮,並可能最大化。
- 數據結構:是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關係的數據元素的集合。一般狀況下,精心選擇的數據結構能夠帶來更高的運行或者存儲效率。數據結構每每同高效的檢索算法和索引技術有關。
- 棧可用於顛倒數據集的順序。
- 隊列可用於保持其數據的順序。
程序=數據結構+算法
軟件=程序+軟件工程html
第二章 算法分析算法
- 算法效率一般用CPU使用時間來表示,算法分析是從效率的角度對算法進行分析,是計算機科學的基礎。
- 增加函數表示與該問題大小相對應的時間或空間的使用。增加函數表示問題大小與咱們但願最優化的值之間的關係。該函數表示了該算法的時間複雜度或空間複雜度。若是算法的運行效率低。那麼從長遠來講,使用更快的處理器也無濟於事。
- 要分析算法的複雜度,一般須要分析循環的運行。循環的時間複雜度等於循環體的複雜度乘以該循環運行的次數。額分析嵌套循環的複雜度時,必須將內層循環和外層循環都考慮進來。
- 大O計法:忽略該算法的增加函數中的常量和其餘次要項,只保留主項而得出的。
- 一些增加函數及其漸進複雜度
教材中的問題及解決過程
- 問題一:可移植性是軟件的質量特徵之一,那麼Java程序設計語言是如何解決該質量特徵的?
- 解決:Java程序設計語言是這樣來結局這個問題的:把Java的源代碼編譯成了字節碼,這是一種低級語言,它不是任何特定CPU的機器語言。字節碼運行在Java虛擬機上。Java虛擬機是一種解釋並執行字節碼的軟件。所以,至少從理論上講,任何具備Java虛擬機的系統都能運行Java程序。
- 問題二:在看書的時候,不是很理解對相關的工做量,爲何說提升CPU的速度並不必定能提升處理速度。
- 解決:當算法的階次爲常量(即O(1))或線性階次(即O(n))時,提升CPU速度纔會線性提升處理速度。隨着算法複雜度的增加,處理器速度的提升對複雜度的影響愈來愈小。
練習題
- EX 2.1
- 下列增加函數的階次是多少?
- 10n^2+100n+1000
- O(n^2)
- 10n^3-7
- O(n^3)
- 2^n+100n^3
- 2^n
- n^2logn
- O(n^2logn)
- EX 2.4
請肯定下面代碼段的增加函數和階次數據結構
for(int count = 0; count < n; count ++)
for(int count2 = 0; count2 < n; count2 = count2 + 2)
{
System.out.println(count , count2)app
- 內層循環是n/2,外層循環是n,因此爲O(n^2)。
- EX 2.5
結對及互評
- 博客中值得學習的或問題:
- 代碼中值得學習的或問題:
點評過的同窗博客和代碼
其餘(感悟、思考等,可選)
在家癱了一個多月後,終於又回到學校了(笑)。在上個學期有收穫,有感慨,有付出,也有回報。暑假裏沒有了在學校學習的氛圍,天然也是懈怠了很多,能力感受到確實有所降低。雖然說在暑期內作了一個小app,但練習量是遠遠不夠的,代碼仍是必需要多敲才能熟練運用並掌握。至於博客,顯然在暑假內是沒有寫過的,如今開學,這個習慣仍然要撿起來,堅持下去。在這個學期裏要繼續努力,更好的提高本身!設計
學習進度條
計劃學習時間:10小時htm
實際學習時間:5小時blog
參考資料