zoukankan      html  css  js  c++  java
  • 白名单

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

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

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

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

  • 相关阅读:
    C++拷贝构造函数(深拷贝,浅拷贝)
    C++标准库和标准模板库
    MFC 定制控件(Customize Control) 及 MFC CWnd和WIN32 HWND关联方法
    MFC 对象与Win32 SDK 句柄的映射关系
    关于函数返回值的几种情况
    CreateWaitableTimer和SetWaitableTimer函数
    关于C++/C中防止头文件的重复包含的解决办法
    MFC 分割窗体(Splitter Windows)
    MFC中对话框的数据交换(DDX)和数据校验(DDV)
    MFC 消息映射表 及 相关宏定义
  • 原文地址:https://www.cnblogs.com/Ethereal-hzc/p/13698740.html
Copyright © 2011-2022 走看看