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

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

教材學習內容總結

本週內容主要爲書第一章和第二章的內容:

  • 第一章

    • 軟件質量:
      • 正確性(軟件達到特定需求的程度)
      • 可靠性(軟件發生故障的頻率和危害程度)
      • 健壯性(很好處理錯誤狀況的狀況)
      • 可用性(用戶在軟件中掌握和運行任務的容易程度)
      • 可維護性(軟件進行修改的容易程度)
      • 可重用性(軟件組件可被其餘軟件系統開發使用的容易程度)
      • 可移植性(軟件組成可用於多種計算機環境中的容易程度)
      • 運行效率(不浪費資源的狀況下軟件完成其目標的程度)
    • 數據結構(計算機存儲、組織數據的方式):數組 棧 隊列 鏈表 二叉樹 哈希表 堆 圖
    • 程序 = 數據結構 + 算法
    • 軟件 = 程序 + 軟件工程
  • 第二章

    • 算法分析
    • 大O記法(實質上是算法複雜度發展趨勢的反應)
      html

    • 增加函數:表示問題(n)大小與咱們但願最優化的值之間的關係
      • 時間複雜度(定量描述了該算法的運行時間)--CPU使用時間
      • 空間複雜度(運行完一個程序所需內存的大小)--內存空間
    • 漸進複雜度稱爲算法的階次(忽略該算法的增加函數中的常量和其餘次要項,只保留主項而得出的)java

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

  • 問題1:提升CPU的速度並不必定能提升處理速度
  • 問題1解決方案:算法的階次爲常量[即複雜度爲O(1)]或是線性階次[即複雜度爲O(n)],提升CPU速度纔會線性地提升處理速度。隨着算法複雜度的增加,處理器的速度對複雜度的影響愈來愈小。不一樣的複雜度,在提升相同倍速的處理器,其運行效率是不一樣的。
  • 問題2:時間複雜度的分析
  • 問題2解決方案:
    • 循環的時間複雜度等於循環體的複雜度乘以該循環運行次數。時間複雜度O(n)
    for(int count = 0;count<n;count++)
    {
    //*複雜度爲O(1)的步驟系列
    }
    • 循環出現嵌套時,循環的複雜度等於內層循環的複雜度乘之外層循環的複雜度。時間複雜度O(n^2)
    for(int count = 0;count < n;count++)
    {
       for(int count2 = 0;count2<n;count2++)
       {
           //複雜度爲O(1)的步驟系列
       }
    }
    • 方法調用的複雜度,要考慮循環體的階和調用方法的階。時間複雜度O(n^2)
    for(int count = 0;count<n;count++)
    {
        printsum(count);
    }
    public void printsum(int count)
    {
        int sum = 0;
        for(int I = 1;I<count;I++)
            sum += I;
        System.out.println(sum);
    }
    • 總結:
  • 問題3:增加函數的比較
  • 問題3的解決方案:增加函數函數圖
    • n較小時:
    • n較大時:
    • 結論:c < log2N < n < n * Log2N < n^2 < n^3 < 2^n < 3^n < n!

  • (1)下列增加函數的階次是多少?

  • (2)請肯定下面代碼段的增加函數和階次
  • 答案:

  • (3)請肯定下面代碼段的增加函數和階次
  • 答案:

結對與互評

點評(王禹涵)

  • 博客中值得學習的或問題:
    • 沒有什麼問題,很完美的博客。
  • 基於評分標準,我給本博客打分:5分。
    • 得分狀況以下:
    • 正確使用Markdown語法(加1分)
    • 模板中的要素齊全(加1分)
    • 教材學習中的問題和解決過程, 一個問題加1分
    • 代碼調試中的問題和解決過程, 無問題
    • 感想,體會不假大空的加1分
    • 點評認真,能指出博客和代碼中的問題的加1分

點評(方藝雯)

  • 博客中值得學習的或問題:
    • 圖片運用恰當,很清晰的解釋了問題和相關內容
  • 基於評分標準,我給本博客打分:6分。
  • 得分狀況以下:
    • 正確使用Markdown語法(加1分)
    • 模板中的要素齊全(加1分)
    • 教材學習中的問題和解決過程, 二個問題加2分
    • 代碼調試中的問題和解決過程, 無個問題
    • 感想,體會不假大空的加1分
    • 點評認真,能指出博客和代碼中的問題的加1分

互評對象

  • 本週結對學習狀況
    20172314方藝雯
    20172323王禹涵算法

  • 結對學習內容:軟件質量 算法分析 增加函數 大O記法 時間複雜度 空間複雜度數組

感悟

本學期的第一篇博客,又到當初寫博客的時候了(ಥ_ಥ)。一口氣學了兩章內容,好在兩章內容不是不少,隨便翻了一下書,發現大部分是棧、隊列以及鏈表之類的,開始系統的學習算法結構與分析。假期裏作了幾個程序沒有讓本身忘了太多的內容,撿起來也會容易得多。上學期在程序設計的課上取得滿分,因此這學期要保持上學期的精神狀態繼續學習。做爲新大二的學生,我更要爲新大一的學弟學妹作個好頭。加油!(ง •̀_•́)ง

學習進度條

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

參考資料

相關文章
相關標籤/搜索