此作业参见:https://edu.cnblogs.com/campus/nenu/2020Fall/homework/11207
git代码地址:https://etherealh.coding.net/public/wf_homework/hanzhichao/git/files/master/better
在做此作业之前先说明一下遭遇的情况:
当我打开安装很久但从从来没用过的vs时,输出一句简单的helloworld都会报错,我以为是安装的环境里没有c++,就这样反复安装了两次,后来才知道是在编写完代码要生成项目才会有exe文件。期间浪费了我一天的时间。
这两次作业占据了我每天大约50%的时间,但收获并没有和投入等比例的得到,收效甚微,清楚自己基础薄弱是致命的弱点。让人焦虑的不是知道自己不会什么,而是不知道自己不会什么。
修改create.cpp文件,改成由命令行参数确定生成的数据的数据量。修改readme.md的对应部分。(要求贴出修改之后的代码和read.md。)
修改之后代码如下:
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main(int argc, char* argv[])
{
int a = atoi(argv[1]);
srand((unsigned)time(NULL));
for (int i = 0; i < a; i++)
{
cout << rand() << "
";
}
cout << endl;
return 0;
}
修改之后readme如下:
对上面两段老杨写的代码任选其一进行profile,观察现象(要求有截图记录)。
我选择得是brute c++ 版做的profile 。
运用VS205自带的性能探查器。查看CPU使用率
profile如下:
详细分析如下:
ReadMe部分:
作业2(10分)
以biggerwhitelist和biggerq作为输入,对作业1中选择的代码再次进行profile,找到代码执行最“慢”的地方,截图为证并文字说明。
执行部分展示:
profile如下:
执行效率慢的主要原因可能是循环次数太多导致,
根据作业2找到的最慢的地方,优化作业1中你选择的代码,在保证输出结果正确的前提下,减少老杨程序运行的时间。(优化后的代码需要你提交到git上,作为教师的判断依据。优化后的程序的名字应该是better.cpp或者better.cs。)
通过分析发现影响效率的代码如下:
bool is_match(int t, int w[], int w_length) { for (int i = 0; i<w_length; i++) { if (t == w[i]) { return false; } } return true; }
经过优化改进后采用折半查找得方法。
代码如下:
bool is_match(int t, int low, int high) { int med; while(low <= high) { med = (low + high) / 2; if (t == w[med]) { return false; } else if (t < w[med]) { high = med - 1; } else { low = med + 1; } } return true; }
对作业3优化后的代码进行profile,结果与作业2的结果做对比。画表格并文字说明
profile如下:
详细分析如下:
前后对比表格:
主要参数 | 函数占比 | 优化后改进 |
brute.cpp | 15% | 0 |
better.cpp | 11% | 88.9% |
你觉得老杨的文档(readme),注释和代码风格又哪些问题,该如何改进?
readme部分可以写的再详细一点,比如安装vs之后如何配置环境变量,以及之后写完brute.cpp代码如何生成brute.exe文件最好说明一下。注释方面,最好多一些说明代码含义的注释,少一些无用代码的注释。
代码在定义变量的时候多用一些见名知意的名称。
面试结束了,你和老杨握手,对他说出了面试的结果。你说的内容,不是今天的作业题,也许是若干年以后你想对当年教你的教师说的,也许是你希望未来的面试官对你说的。你想说的是什么呢?
那我此时应该站在未来的我的维度来评论今天的事情,不论经历了什么困难挫折,我都感谢曾经教过我的老师,我不是一个聪慧的人,传教授业给我不是一件容易的事。