zoukankan      html  css  js  c++  java
  • 20200917-3 白名单

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

    作业0(5分)

    修改create.cpp文件,改成由命令行参数确定生成的数据的数据量。修改readme.md的对应部分。(要求贴出修改之后的代码和read.md。)

    修改后的代码:

    int main(int argc, char* argv[])
    {
        int n;
        sscanf(argv[1], "%d", &n);
        srand((unsigned)time(NULL));
        for(int i=0; i<n; i++)
        {
            cout << rand() << "
    ";
        }
        cout << endl;
    
        return 0;
    }

    read.md文档如下:

    readme.md
    1. 安装vs;
    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分)

    对上面两段老杨写的代码任选其一进行profile,观察现象(要求有截图记录)。

    截图记录:

    作业2(10分)

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

    文字说明:代码执行最慢的地方是is_match()函数。 

    截图记录: 

     

     

      

     作业3(10分)

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

    github链接:https://github.com/siahu/HomeWork/tree/master/whitelist

     优化后的重要代码展示:

    bool is_match(int t, int w[], int w_length)
    {
        /*已修改代码*/
        int left=0,right=w_length,mid;
        //二分法查找
        while(left<right)
        {
            mid=(left+right)/2;
            if(t<w[mid])
            {
                right=mid-1;
            }
            else if(t>w[mid])
            {
                left=mid+1;
            }
            else if(t==w[mid])
            {
                return false;
            }
        }
        return true;
    }

    作业4(5分)

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

    截图记录:

    表格:

    主要参数 main总cpu/unit% is_match/unit%
    优化前 4754ms of CPU time 3283ms of CPU time
    优化后 1546ms of CPU time 42ms of CPU time

    说明:将线性查找改为二分查找后,算法时间复杂度由O(n)降为O(log2n)。

    做业5(5分)

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

    代码逻辑出错:

    (1)改正前的代码:

       改正后的代码:

      (2)文档(readme)命令行出错:

    改正前的命令行:brute -w q < whitelist > output

    改正后的命令行:brute -w whitelist < q > output

    (3)注释:

    注释可读性差,不方便读者阅读代码。

    有无关注释,代码文件不整洁。

  • 相关阅读:
    用GDB调试程序(一)
    ZOJ Problem Set
    android 去除标题
    【hadoop之翊】——基于CentOS的hadoop2.4.0伪分布安装配置
    layoutSubviews总结
    用数据说话,外贸产品选择(中篇)-google趋势分析法
    Apache介绍
    浅谈android4.0开发之GridLayout布局
    Android GridView 分页加载数据
    Android TableLayout中的使用说明
  • 原文地址:https://www.cnblogs.com/siahu/p/13701758.html
Copyright © 2011-2022 走看看