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

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

在這學期就已經大二了,也已經步入了學習專業課的核心時間,在這個階段,咱們應該瞭解本身的學習狀況,針對本身的學習能力制定不一樣的計劃,獲得對於自我能力的提高。讓咱們開啓新的一學期吧!php

教材學習內容總結

Java 軟件結構與數據結構第一章:概述

1、軟件開發
1.軟件工程:是一門關於高質量軟件開發的技術和理論的學科。
2.解決的問題:控制開發過程,實現高質量的軟件。
3.軟件工程的目標:(1)解決正確性問題;(2)按時在預算以內給出解決方案;(3)給出高質量的解決方案;(4)以合情合理的方式完成上面事情。
4.軟件質量的特徵:(1)正確性(2)可靠性(3)健壯性(4)可用性(5)可維護性(6)可重複性(7)可移植性(8)運行效率html

2、數據結構
1.程序=數據結構+算法;
小故事:Pascal之父——Nicklaus Wirth經過這一句話得到了圖靈獎!
2.軟件=程序+軟件工程;
3.數據結構:計算機存儲、組織數據的方式。java

Java 軟件結構與數據結構第二章:算法分析

1、算法效率分析
1.算法效率一般用CPU的使用時間表示;
2.算法分析是從效率的角度對算法進行分類;
3.增加函數表示與該問題大小相對應時間或空間的使用;
4.增加函數:(1)咱們但願最優化的值;(2)一般關注的比較可能是CPU的使用時間;(3)增加函數表示問題大小(n)與但願優化的值之間的關係。web

2、大O記法
1.增加函數表示了該算法的時間複雜度或空間複雜度。
2.漸進複雜度稱爲算法的階次。
注:算法

  • (1)具備階次爲n^2的時間複雜度,記爲O(n^2)。
  • (2)算法的階次是忽略該算法的增加函數的常量和其餘次要項,只保留主項。
  • (3)無論問題是大是小,運行賦值語句和if語句一次,其複雜度就爲 O(1)。
  • (4)循環語句和方法調用語句可能會致使更高階次的增加函數。
  • (5)具備相同相同類別的兩種算法,認爲有相同的效率,可是其增加函數並不必定相同。
    3.例子:

3、增加函數的比較
1.更快的處理器,並不能影響主項,只會給增加函數增長常量,仍須要重視算法分析。
2例:

注:其中裏面3.1六、2.1五、3.3的算法爲,√10≈3.16227766016837九、³√10≈2.154四、log2(10)=lg(10)/lg(2)=1/lg(2)=3.321928
3.n相對較小時,各類增加函數的比較
數據結構

n很大時,各類增加函數的比較
函數

4、時間複雜度分析(重點)
1.要分析循環運行,首先要肯定該循環體的階次n,而後用該循環須要運行的次數乘它。
例:時間複雜度爲O(n)的例子學習

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

例:若是循環的複雜程度是對數級的(時間複雜度爲O(log n)優化

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

2.嵌套循環的複雜度分析
例:時間複雜度爲O(n^2)spa

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

3.方法調用的複雜度分析
例:時間複雜度爲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);
}

5、時間複雜度的計算規律(重點)
設程序段和程序段2的時間分別爲T1(n)和T2(n),總的運行時間爲T(n)
1.加法準則:T(n,m)=T1(n)+T2(n)
2.乘法準則:T(n)=T1(n)*T2(n)
3.特例情形:算法平均時間複雜度,算法最壞狀況下的時間複雜度。

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

  • 問題1:會不會存在一個方法調用的複雜度爲O(1)的狀況,是否能夠理解爲數學的先進行n次方,而後再開n次方根?
    好比舉個例子:是否以下的代碼的時間複雜度爲O(1)
for(int count = 0;count<n;count++)
{
    {
        for(j=1;j<=count;j++) 
            {
                printsum(count);
            }
       }
}

public void printsum(int count)
{
    int a=0;
   while(a^2<=count)
       a++;
}
  • 問題1解決過程:
    以書本里的解答,我認爲是能夠這樣認爲的,由於它自己就是一個計算機問題演變出的數學問題,時間複雜度也就是循環的次數,一樣,次數多計算法就是經過一系列計算所獲得的,而問題中的計算只是一種對於對計算機問題的一種解釋的手段,因此我以爲徹底能夠這樣理解。

  • 問題2:書本中老是出現沒有底數的對數函數,那沒有底數會不會算錯呢?在何時該寫底數呢?
  • 問題2解答:
    通過查找資料,我找到這樣一篇文章,能夠有助於咱們理解數據結構在這一方面的知識,資料叫作「劍指Offer——算法複雜度中的O(logN)底數是多少」,具體文章我已放在參考資料中,有興趣的同窗能夠看看,我這裏拿重點。

教材佈置習題解答

EX 2.1 下列增加函數的階次是多少?
a.10n^2+100n+1000
解答:由於漸進複雜度稱爲算法的階次,所以該增加函數的階次爲:O(n^2)。
b.10n^3-7
解答:由於n^3的增加速度最快,因此階次爲:O(n^3)
c.2^n+100n^3
解答:由於n^3比2^n增加速度慢,因此階次爲:O(2^n)
注:

d.n^2 ·log(n)
解答:階次:O(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);
        }
}

解答:

  • 增加函數爲:F(n)=(n^2)/2
  • 階次爲:O(n^2)
    解:由於內循環須要進行的次數是n/2,外循環須要進行的次數是n,所以,由老師上課所講的乘法原理(T(n)=T1(n)*T2(n))可得,增加函數爲:F(n)=(n^2)/2;又由於階數與增加函數的最高階項有關,因此忽略次項與常數項。因此階次爲O(n^2)。

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

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

解答:

  • 增加函數:F(n)=n·log2(n)
  • 階次爲:O(n·log2(n))
    解:由於外循環須要的次數爲n次,內循環的次數是log2(n),因此由乘法原理(T(n)=T1(n)*T2(n))可得,增加函數爲:F(n)=n·log2(n);又由於階數與增加函數的最高階項有關,因此忽略次項與常數項。因此階次爲O(n·log2(n))。

結對及互評

  • 本週結對學習狀況
  • 博客中值得學習的或問題:
    • 內容詳略得當;
    • 代碼調試環節比較詳細;
  • 基於評分標準,我給本博客打分:5分。得分狀況以下:
  1. 正確使用Markdown語法(加1分):
  2. 模板中的要素齊全(加1分)
  3. 教材學習中的問題和解決過程, 一個問題加1分
  4. 代碼調試中的問題和解決過程, 一個問題加1分

  • 博客中值得學習的或問題:
    • 內容詳略得當;
    • 代碼調試環節比較詳細;
  • 基於評分標準,我給本博客打分:9分。得分狀況以下:
  1. 正確使用Markdown語法(加1分):
  2. 模板中的要素齊全(加1分)
  3. 教材學習中的問題和解決過程, 一個問題加1分
  4. 代碼調試中的問題和解決過程, 一個問題加1分

感悟

呀,新學期又到啦,咱們又要學習啦,好開心呀哈哈哈。雖然感受聽起來有點假,的確,有點假,可是開學仍是很開心的,能夠和同窗們一塊兒玩,很開心的玩啊!而後又能夠好好學習了,在家裏感受每天都在打遊戲,不想學習,但願本身在新的一學期能夠繼續努力,認真學習,沒有晚自習,本身要給本身晚自習的時間進行學習,但願本身能夠學到更多有用的東西讓本身之後的生活更好,養得起本身!

學習進度條

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

參考資料

藍墨雲班課
Java程序設計
算法運行時間一、logN、N、NlogN 、N^二、N^三、2^n之間的比較
劍指Offer——算法複雜度中的O(logN)底數是多少

相關文章
相關標籤/搜索