20172328 2018-2019《Java軟件結構與數據結構》第一週學習總結

20172328 2018-2019《Java軟件結構與數據結構》第一週學習總結

概述 Generalization

本週學習了軟件質量、數據結構以及算法分析的具體內容,主要依託於所用教材的第一章和第二章。

教材學習內容總結 A summary of textbook

  • 第一章:概述
  • 1.1軟件質量
  • 軟件工程:是一門關於高質量軟件開發的技術和理論的學科。
  • 軟件工程的目標:解決正確性問題、按時且在預算以內給出解決方案、給出高質量的解決方案、以合情合理的方式完成上面事情。
  • 高質量軟件的特徵
    html

  • 重要解讀:
  • 有關可靠性:可靠的軟件不多發生故障,即便發生了故障,也能夠將該故障的影響降到最低。java

  • 有關可維護性:軟件系統必須通過細心設計、編碼和文檔說明,以便爲開發人員、維護人員和用戶的工做提供支持。算法

  • 有關可移植性:Java的源代碼被編譯成了字節碼,這是一種低級語言,他不是任何特定CPU的機器語言。字節碼運行在Java虛擬上(JVM)。JVM是一種解釋並執行字節碼的軟件。數組

  • 有關運行效率:軟件必須高效地使用諸如CPU時間存儲器之類的資源。數據結構

  • 1.2數據結構
  • 數據結構:計算機存儲、組織數據的形式。
  • 程序 = 數據結構 + 算法
  • 軟件 = 程序 + 軟件工程
  • Java工具包提供了強大的數據結構。常見的數據結構有數組(Array)、棧(Stack)、隊列(Queue)、鏈表(Linked list)、樹(Tree)、哈希表(Hash)、散列表(Hash Table)等。
  • 棧會顛倒數據集的結構,而隊列能夠保持數據集的結構。
  • 可用於給數列集排隊的經常使用數據結構有有序列表、堆和散列表。函數

  • 第二章:算法分析
  • 2.1算法效率分析
  • 算法分析:計算機科學中主要關注軟件算法效率的主題。算法分析是計算機科學的基礎。
  • 2.2增加函數與大O記法
  • 增加函數:表示與該問題大小相對應的時間或者空間的使用,表示問題(n)大小與咱們但願最優化的值之間的關係。該函數表示了該算法的事件複雜度或空間複雜度。
  • 漸進複雜度:稱爲算法的階次。如書中示例,第二個洗盤子的算法具備階次爲n^2的時間複雜度,記爲O(n^2),這種記法稱爲O()或者大O記法。算法的階次是忽略該算法的的增加函數中的常量和其餘次要項,只保留主項而得出的
  • 一些增加函數及其漸進複雜度[圖片展現]
  • 從而算法的階次爲增加函數提供了一個上界。
  • 2.3增加函數的比較
    工具

  • 標註:√10≈3.16227766016837九、³√10≈2.154四、log₂(10)=lg(10)/lg(2)=1/lg(2)=3.321928,從最後一組數據來看,其實問題的關鍵不是提速CPU(由於提速處理器後幫助卻小的可憐),而是要在算法上簡化問題,大大提升程序運行的速度。
  • 增加函數的比較圖

  • 2.4時間複雜度分析
  • 2.4.1循環運行的複雜度分析
  • 要分析某個算法的階次,經常須要去肯定某個特定語句和某個語句集運行的次數。要分析循環運行,首先要肯定該循環體的階次n,而後用該循環運行的次數乘以它。記請住,n是表示問題的大小。
  • 就算循環有時會跳過幾個數,增加函數變了,但常數不影響漸進複雜度,所以階次不變。
  • 2.4.2嵌套循環的複雜度分析
  • 分析嵌套循環時,將內存循環和外層循環都要兼顧到,而且用乘法來計算複雜度。
  • 方法調用的複雜度分析:與循環體的複雜度有關。學習

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

  • 問題:在作老師課上的考試題時,一直以爲有道題運行次數是n(n-1),故複雜度應該表示爲O(n(n-1)),但當時在書本實例中都沒有看到有這種表示,先作了題,但沒有深刻了解。
  • 解決:其實這個問題是本身沒有認真看書的後果。書本15頁下有這樣一段話:優化

    在這種狀況下,內層循環索引被初始化爲外層循環索引的當前值。外層循環運行了n次,內層循環第一次被執行n次,第二次執行n-1次,等等……可是,記住,咱們只對主項感興趣,而忽視其餘常數項或其餘任何次要項。若是複雜度是線性的,則無論通過多少個元素,其階次依舊是O(n),所以,上面的代碼的複雜度爲O(n^2)。編碼

課後習題做答 Exercise

  • EX 2.1:下列增加函數的階次是多少?
    • a.10n^2+100n+1000
    • 解答:階次爲:n^2。
    • b.10n^3-7
    • 解答:階次爲:n^3
    • 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,階次爲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),又因階數與增加函數的最高階項有關,要忽略次項與常數項,因此階次爲n·log2(n)。

結對及互評 Group Estimate

-20172301
-20172304

點評模板:

  • 博客中值得學習的或問題:
    • 20172301:博客果真又很精彩,在教材學習中的問題和解決過程當中花費了不少精力學習了一些本章中淺嘗輒止的內容。優秀👏!
    • 20172304:此次段志軒同窗交的最先,並且博客風格較上學期有了很大改變。內容也很是詳實,很是好的新學期態勢,加油💪!
    • 對咱們小組新學期的想法:三人行,必有我師焉。這學期課程量少,那就沒有理由再很差好學習專業課。嘿!讓咱們一塊兒攜手努力吧😁

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

      莫聽穿林打葉聲,何妨吟嘯且徐行。

      學習進度條 Learning List

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

參考資料 Reference

相關文章
相關標籤/搜索