• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
笼中鸟
stay hungry stay foolish
博客园    首页    新随笔    联系   管理    订阅  订阅
20200917-3 白名单

此作业要求参见: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:代码总体非常乱,且重要功能没有中文注释,影响总体的可读性。 改进方法:关键功能标注中文注释,提高开发者的可读性。

 

posted on 2020-09-23 18:54  xucancan  阅读(112)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3