20172319 《程序設計與數據結構》 第一週學習總結

20172319 2018.09.03-09.09

《程序設計與數據結構》第1周學習總結

目錄


教材學習內容總結

第一章 概述:

  • 1.1 軟件質量: 軟件符合明確敘述的功能和性能需求、文檔中明確描述的開發標準、以及全部專業開發的軟件都應具備的和隱含特徵相一致的程度。
      軟件質量的特徵: 1.正確性:軟件在多大程度上知足其特定需求;
        2.可靠性:軟件故障發生的頻率及危險程度;
        3.健壯性:出錯狀況下能夠獲得處理的程度;
        4.可用性:用戶學習和執行任務的難易程度;
        5.可維護性:對軟件進行修改的難易程度;
        6.可重用性:軟件組件可重用於其餘軟件系統開發的難易程度;
        7.可移植性:軟件組件能夠在多個計算機環境下使用的難易程度;
        8.運行效率:在不浪費資源的狀況下軟件完成其目標的程度。html

  • 1.2 數據結構: 計算機存儲數據的方式。算法

第二章 算法分析:

  • 2.1 算法效率分析: 算法分析(analysis of algorithms)是計算機科學的一個基礎,涉及多種技術和概念。
    決定一個程序運行速度的主要因素是爲完成某一特定任務所使用的算法的效率。
  • 2.2 增加函數與大O記法
        增加函數(growth function)表示問題(n)大小與咱們但願最優化的值之間的關係。該函數表示了該算法的時間複雜度(time complexity)
    與空間複雜度(space complexity)。
        漸近複雜度(asymptotic complexity),也稱爲算法的階次(order),是咱們主要關注點。
        大O記法:用O(階次)來表示某一算法具備某一階次的時間複雜度的方法。
    數據結構

  • 2.3 增加函數的比較:
    函數

  • 2.4 時間複雜度分析:
        1.循環運行的時間複雜度分析:循環體的複雜度乘以該循環的運行次數。
        時間複雜度:O(n)性能

for (int count = 0; count < n; count++)
{
  // 複雜度爲O(1)的步驟系列
}

    時間複雜度:O(logn)學習

count = 1;
while(count < n)
{
count *=2;
//複雜度爲O(1)的步驟系列
}

    2.嵌套循環的時間複雜度分析:內外層循環均需考慮。
    內層循環的複雜度O(n),外層循環運行次數:n,總複雜度O(n^2)優化

for(int count = 0;count < n;count++)
{
   for(int count2 = 0;count2<n;count2++)
    {
        //複雜度爲O(1)的步驟系列
    }
}

    3.方法調用的複雜度分析:具體問題具體分析。
    時間複雜度:O(n^2)spa

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);
}

返回目錄.net


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

  • 問題EX2.1: 下列增加函數的階次是多少?
    a.10n^2 + 100n +1000
    b.10n^3 -7
    c.2^n+100n^3
    d.n^2logn
  • 解決:由大O記法以及漸近複雜度的定義可知:階次與主項有關;因此應取n變化時,變換最快的一項做爲主項。
    a.n^2
    b.n^3
    c.2^n
    d.n^2logn設計

  • 問題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,增加函數爲n^2/2;時間複雜度爲:O(n^2),階次爲n^2.

  • 問題EX2.5:肯定下面代碼段的增加函數和階次:

for (int count = 0; count < n; count++)
    for(int count2 = 1 ; count2 < n; count2 = count2 * 2 )
        {
            System.out.println(count,count2)
}
  • 解決:內層循環爲(log2n )- 1,外層循環爲n,增加函數爲 : (nlog2n )- 1時間複雜度O(nlog2n),階次:nlog2n。

返回目錄


代碼調試中的問題和解決過程

  • 問題1:
  • 解決:

返回目錄


代碼託管

返回目錄


上週考試錯題總結

  • 錯題1:

返回目錄


結對及互評

點評過的同窗博客和代碼

返回目錄


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

返回目錄


學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 3000行 15篇 300小時
第一週 0/0 1/1 12/12 百廢待興

返回目錄


參考資料

時間複雜度&空間複雜度分析
算法的時間複雜度和空間複雜度計算

返回目錄

相關文章
相關標籤/搜索