20200917-3 白名单
作业要求 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[]) { srand((unsigned)time(NULL)); int num = atoi(argv[1]); //把命令行参数中文件名后的第一个字符串转化为整数 for (int i = 0; i < num; i++); { cout << rand() << "\n"; } cout << endl; return 0; }
你看了一下代码,又说道:“老杨,你这结果倒是能对……但是”。你觉得代码的执行效率会比较低。但是你想引导他独立完成修改,你说:“我认为你应该profile一下你的代码,找到代码最慢的地方。”
profile?还好老杨看过《构建之法》,那本书中提到过效能分析。不过老杨不明白为啥要进行效能分析,但毕竟是在面试也不好把太多疑义说出来。所以只好照做。
作业1.
作业2
明显可以看出is_match函数耗时
作业三
bool is_match(int t, int w[], int w_length) { //修改成折半查找 int low, high, mid; low = 0; high = w_length - 1; while(low<=high) { mid=(low+high)/2; if (w[mid]==t) return false; else if(w[mid]>t) high = mid - 1; else if(w[mid]<t) low = mid + 1; } return true; }
代码 https://e.coding.net/wowcy/brute/btute.git
作业四
is_match函数cpu占比 |
运行时间 | |
修改前 | 92.94% | 19分51秒 |
修改后 | 1.60% | 3分48秒 |
可以明显看出使用折半查找后is_match函数cpu占比减少,程序运行时间也缩小很多。
作业五
我觉得老杨的在每个.cpp文件开头都写上注释,标记上名字还是很值得我学习的。
我认为老杨的readme不是特别详细,比如
7 执行“create >q”生成文件q;
8 编译brute.cpp文件;
9 执行“brute -w q < whitelist > output”
在执行第九条之前应该将生成的q文件和whitelist放进和brute.cpp同一个目录下
这个地方让我费了好长时间。
不积跬步无以至千里,不积小流无以成江海。