此作业要求参见: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 -w whitelist < 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占有率 | 94.57% | 8.57% | 提高了86% |
做业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:readme.md文档不够详细。 改进方法:需要具体列出各个步骤的详细用法,以免影响用户体验
问题4:代码总体非常乱,且重要功能没有中文注释,影响总体的可读性。 改进方法:关键功能标注中文注释,提高开发者的可读性。