20200917-3 白名单

此作业具体要求参见:https://edu.cnblogs.com/campus/nenu/2020Fall/homework/11207

白名单 SPEC

Coding地址:https://e.coding.net/lhbat/baimingdan/baimingdan.git git pull前确保git init初始化仓库。

网页访问:https://lhbat.coding.net/public/baimingdan/baimingdan/git/files

作业0(5分)

//create.cpp
#include <iostream>
#include <stdlib.h>
#include <time.h>
 
using namespace std;
 
int main(int argc, char* argv[])
{
    int number = atoi(argv[1]);//将命令行参数转数字
    srand((unsigned)time(NULL));
    for (int i = 0; i < number; i++)
    {
        cout << rand();
        if(i!=number-1) cout << "\n";
    }
    cout << endl;
    return 0;
}

read.md文档如下:

readme.md
  1. 安装vs2019;
  2. 配置环境变量;
  3. 编译create.cpp文件;
  4. 执行“create >whitelist 10”生成文件whitelist;
  5. 执行“create >q 1000”生成文件q;
  6. 编译brute.cpp文件;
  7. 执行“brute -w whitelist < q > output”。

作业1(10分)

 

运行“ -w q < whitelist > output”可以看到,当数据量较少时IO操作占比很大。

作业2(10分)

以biggerwhitelist和biggerq作为输入,对作业1中选择的代码再次进行profile,找到代码执行最“慢”的地方,截图为证并文字说明。

 

 

可以看出,当数据量较大时main函数中的is_match函数下面的cout很耗时,很大原因是is_match函数效率不高。

作业3(10分)

根据作业2找到的最慢的地方,优化作业1中你选择的代码,在保证输出结果正确的前提下,减少老杨程序运行的时间。(优化后的代码需要你提交到git上,作为教师的判断依据。优化后的程序的名字应该是better.cpp或者better.cs。)

地址:https://lhbat.coding.net/public/baimingdan/baimingdan/git/files

 

bool erfen(int t, int low, int high)
{
    int  mid;
    while (low<high)
    {
        mid = (high + low) / 2;
        if (w[mid] == t)
        {
            return true;//找到目标数字,成功
        }
        else if (w[mid] > t)
        {
            high = mid - 1;
        }
        else if (w[mid] < t)
        {
            low = mid + 1;
        }
    }    
    return false;//查找失败
}

作业4(5分)

对作业3优化后的代码进行profile,结果与作业2的结果做对比。画表格并文字说明。

可以看出,经过优化后,当数据量较多时IO操作成为占比较大的部分,这部分事无法避免的。

做业5(5分)

你觉得老杨的文档(readme),注释和代码风格又哪些问题,该如何改进?

我觉得文档的内容略少,小白不容易懂,注释掉的暂时不使用的代码可以删掉,代码中的“t!  = w[i]”应该讲不等于作为一个整体。

posted @ 2020-09-23 13:01  lhbat  阅读(171)  评论(0)    收藏  举报