一個常用的檔案操作類
此作業的要求參見:https://edu.cnblogs.com/campus/nenu/2020Fall/homework/11207
作業0(5分)
修改create.cpp檔案,改成由命令列引數確定生成的資料的資料量。修改readme.md的對應部分。(要求貼出修改之後的程式碼和read.md。)
修改後的程式碼:
#include <iostream> #include <stdlib.h> #include <time.h> using namespace std; int main(int argc, char* argv[]) { int num = atoi(argv[1]); srand((unsigned)time(NULL)); for (int i = 0; i < num; i++) { cout << rand() << "\n"; } cout << endl; return 0; }
readme.md
readme.md |
安裝vs vs下載官網[https://visualstudio.microsoft.com/zh-hans/] 配置環境變數; 編譯create.cpp檔案; 執行“create 10>whitelist”生成檔案whitelist; 執行“create 1000 >q ”生成檔案q,; 編譯brute.cpp檔案; 執行“brute -w whitelist < q > output” |
作業1(10分)
對上面兩段老楊寫的程式碼任選其一進行profile,觀察現象(要求有截圖記錄)。
改正後的程式碼:
bool is_match(int t, int w[], int w_length) { for (int i = 0; i < w_length; i++) { if (t== w[i]) { returnfalse; } } return true; }
作業2(10分)
以biggerwhitelist和biggerq作為輸入,對作業1中選擇的程式碼再次進行profile,找到程式碼執行最“慢”的地方,截圖為證並文字說明。
發現最主要的就是查詢函式花費了接近百分之九十的時間,19116ms.
作業3(10分)
根據作業2找到的最慢的地方,優化作業1中你選擇的程式碼,在保證輸出結果正確的前提下,減少老楊程式執行的時間。(優化後的程式碼需要你提交到git上,作為教師的判斷依據。優化後的程式的名字應該是better.cpp或者better.cs。)
git地址: [https://github.com/talm966/white_list.git]
使用二分查詢優化演算法:
int left = 0, right = w_length-1, mid; //二分法查詢 while (left < right) { mid = (left + right) / 2; if (t < w[mid]) { right = mid - 1; } else if (t > w[mid]) { left = mid + 1; } else return false; } return true;
作業4(5分)
對作業3優化後的程式碼進行profile,結果與作業2的結果做對比。畫表格並文字說明。
版本 | main | is_match |
brute | 21394ms | 19116ms |
better | 8762ms | 54ms |
做業5(5分)
你覺得老楊的文件(readme),註釋和程式碼風格又哪些問題,該如何改進?
1.在brute.cpp中的is_match函式邏輯出錯,已在前文中修改指出。
2.readme.md中的執行語句出錯,這是很嚴重的問題。
應該是brute-wwhitelist < q > output”