20172308《Java軟件結構與數據結構》第一週學習總結

教材學習內容總結

第 1 章 概述

  1. 軟件質量的特徵:正確性、可靠性、健壯性、可用性、可維護性、可重用性(別人寫的組件本身能夠拿過來用)、可移植性、運行效率
  2. 數據結構:計算機存儲、組織數據的方式
    程序 = 數據結構 + 算法

第 2 章 算法分析

a. 增加函數:表示問題(n)大小與咱們但願最優化的值之間的關係(該函數表示了該算法的時間或空間複雜度)html

b. 大O記法:算法

  • 漸進複雜度稱爲算法的階次;
  • 漸進複雜度這一特性基於該表達式的主項(即表示問題大小n的表達式中增加最快的那一項),隨着n的增加,常量與次項很快能夠忽略不計
  • 大O記法的類別有多種,但相同兩個類別的算法具備相同的算法,可是其增加函數不必定相同

c. 算法效率:一般用CPU的使用時間表示數據結構

d. 更快的CPU並不能影響主項,只會給增加函數增長常量(因而可知,須要重視算法分析)函數

e. 時間複雜度分析學習

  • 循環運行的複雜度分析:等於循環體的複雜度乘以該循環運行的次數
  • 嵌套循環的複雜度分析:須要考慮內層和外層循環
  • 方法調用的複雜度分析:(注:只有可運行的語句纔會增長時間複雜度)

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

問題1:軟件質量特徵中的可靠性與健壯性的區別?
問題1解析:書本上定義:可靠性 「 軟件故障發生的頻率和危險程度 」 ;健壯性 「 出錯狀況下能夠獲得恰當處理的程度 」。雖說得清楚,一個是表示故障發生前的預測故障發生的頻率,一個是故障發生後的機器處理的程度。但仍是以爲理解不夠清晰:健壯性是指程序在運行過程當中出現通常性的錯誤,程序會自動進行錯誤處理函數(出錯了也能繼續運行的能力);可靠性(程序出錯的機率的高低)是指程序在運行過程當中出現錯誤的機率,通常會作一些可靠性試驗來測試

【參考資料】百度知道測試

課後練習題

EX 2.1 下列增加函數的階次是多少?

a. 10n^2+100n+1000 (找主項,忽略次項與常量:O(n^2))優化

b. 10n^3-7 (同上,O(n^3))code

c. 2^n+100n^3 (隨着n的增大,指數爆炸,O (2^n) )htm

d. n^2 ·log(n) (O(n^2 ·log(n)))blog

EX 2.4 肯定下面代碼段的增加函數和階次:

for(int count = 0 ; count < n ; count++)
    for(int count2 = 0 ; count2 < n ; count2 = count2 + 2)
        {
            System.out.println(count,count2);
        }
}

這是一個嵌套循環的複雜度分析。內層循環每次都增長2,故循環了n/2次,外層循環了次,根據乘法準則,增加函數爲 (n/2)*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);
        }
}

這是一個嵌套循環的複雜度分析。內層循環每次變爲前一次的2倍,則有2^x = n,即內層循環的次數x = (以2爲底n的對數 - 1)次;外層循環了n次,根據乘法準則,增加函數爲n(log(2)n-1),忽略掉次項,則階次爲O(O(nlog2n))(2是對數的底)

結對及互評

  • 博客中值得學習的或問題:
    • 侯澤洋同窗的博客排版工整,界面很美觀
    • 問題總結作得很全面
    • 對於書上的疑惑總會想辦法解決它,這種探索的精神值得我去學習
  • 本週結對學習狀況
    • 20172302
    • 結對學習內容
      • 第1、二章內容

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 0/0 1/1 4/4
相關文章
相關標籤/搜索