白名单

此作业参见: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() << "\n";
    }
    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文件最好说明一下。注释方面,最好多一些说明代码含义的注释,少一些无用代码的注释。

代码在定义变量的时候多用一些见名知意的名称。

面试结束了,你和老杨握手,对他说出了面试的结果。你说的内容,不是今天的作业题,也许是若干年以后你想对当年教你的教师说的,也许是你希望未来的面试官对你说的。你想说的是什么呢?

那我此时应该站在未来的我的维度来评论今天的事情,不论经历了什么困难挫折,我都感谢曾经教过我的老师,我不是一个聪慧的人,传教授业给我不是一件容易的事。

posted @ 2020-09-23 18:29  我刀呢?  阅读(180)  评论(0编辑  收藏  举报