1. 程式人生 > 實用技巧 >Spring 學習筆記

Spring 學習筆記

此作業要求參見:https://edu.cnblogs.com/campus/nenu/2020Fall/homework/11207

作業0(5分)

修改create.cpp檔案,改成由命令列引數確定生成的資料的資料量。修改readme.md的對應部分。(要求貼出修改之後的程式碼和read.md。)

修改後的程式碼:

#include<stdlib.h>
#include<iostream>
#include<time.h>
using namespace std;
int main(int argc,char* argv[]) {
    srand((unsigned)time(NULL)); //srand()函式是隨機數發生器的初始化函式
    
int n = atoi(argv[1]); //atoi()函式將字元轉換成整數 for (int i = 0; i < n; i++) { cout << rand() << "\n"; //rand()函式是從srand()隨機發生器中隨機抽取一個數 } return 0; }

readme.md文件:

readme.md

1.安裝vs;

2.配置環境變數;

3.編譯連結creat.cpp檔案,生成creat.exe檔案

4.執行“create 10 >whitelist ”生成文whitelist;

5.執行“create 1000 >q ”生成檔案q;

6.編譯連結brute.cpp檔案;

7.執行“brute-wwhitelist < q > output”。

作業1(10分)

對上面兩段老楊寫的程式碼任選其一進行profile,觀察現象(要求有截圖記錄)。

profife截圖如下:

由上圖可知:brute.cpp程式的輸入和輸出造成程式佔用的cpu較大。輸出的cpu的佔用率達到了26.4,佔比更大,導致程式變慢。

作業2

以biggerwhitelist和biggerq作為輸入,對作業1中選擇的程式碼再次進行profile,找到程式碼執行最“慢”的地方,截圖為證並文字說明。

由上圖可知:造成程式執行變慢的原因主要是由is_match函式造成的,cpu佔有率達到了94%,所以下一步對is_match函式進行優化。

作業3(10分)

根據作業2找到的最慢的地方,優化作業1中你選擇的程式碼,在保證輸出結果正確的前提下,減少老楊程式執行的時間。(優化後的程式碼需要你提交到git上,作為教師的判斷依據。優化後的程式的名字應該是better.cpp或者better.cs。)

由作業2可知is_match函式造成了程式變慢,所以現對該函式進行優化。

coding.net程式碼地址:https://e.coding.net/xucancan1/better/better.git

優化的程式碼如下:

//二分查詢
bool is_match(int t, int w[], int w_length)
{
    int h = 0, r = w_length, m;
    while (h < r) 
    {
        m = (h + r) / 2;  
        if (t < w[m]) {
            r = m - 1;
        }
        else if (t > w[m]) {
            h = m + 1;
        }
        else if (t == w[m]) {
            return false;
        }
    }
    return true;
}

作業4(5分)

對作業3優化後的程式碼進行profile,結果與作業2的結果做對比。畫表格並文字說明

分析:從執行時間和cpu佔用率看,使用了二分查詢後,該程式的執行效率提高了,執行速度變快了。

對比表格:

效能指標 優化前 優化後 優化前後對比
執行時間 5671ms 1248ms 減少了4423ms
is_match函式cpu佔有率 11.23% 8.47% 提高了2.76%

做業5(5分)

你覺得老楊的文件(readme),註釋和程式碼風格又哪些問題,該如何改進?

問題1:註釋不規範,影響可讀性。 改進方法:當註釋是多行的時候,儘量用/* */這個來註釋,增加可讀性

例如:

// init w
////    for(int i=0;i<w_1m)
////    {
////        w[i]=-1; //填充非法資料
////    }

問題2:程式碼中存在錯誤 ,(中文的程式碼) 。 改進方法:將中文改為英文

例如:

bool is_match(int t, int w[], int w_length)
{
    for(int i=0;i<w_length;i++)
    {
        if(t!=w[i])
        {
            return true;
        }
    }
    return false;
}

問題3:程式碼總體非常亂,且重要功能沒有中文註釋,影響總體的可讀性。 改進方法:關鍵功能標註中文註釋,提高開發者的可讀性。