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

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

    git地址:https://github.com/ZigHello/learngit.git

    coding.net地址:https://e.coding.net/nenuteamwork/whitelist/WhiteList.git

    作业0(5分)

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

    //create.cpp
    #include <iostream>
    #include <stdlib.h>
    #include <time.h>
    
    
    using namespace std;
    
    int main(int argc, char* argv[])
    {
        //atoi()将字符串转换为int型,形参是const char*
        int num = atoi(argv[1]);
        
        srand((unsigned)time(NULL));
        for (int i = 0; i < num; i++)
        {
            cout << rand() << "
    ";
        }
        cout << endl;
        return 0;
    }

    修改后的readme.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,找到代码执行最“慢”的地方,截图为证并文字说明。

    1.修改命令行参数:-w biggerwhitelist <biggerq> biggeroutput

    2.profile:

      从报告可以看出,是is_match()查找耗时最长,可以考虑效率更高的查找算法。

     

    作业3(10分)

    根据作业2找到的最慢的地方,优化作业1中你选择的代码,在保证输出结果正确的前提下,减少老杨程序运行的时间。

    (优化后的代码需要你提交到git上,作为教师的判断依据。优化后的程序的名字应该是better.cpp或者better.cs。)

    1.优化后的代码,将is_match()转变为折半查找:

     1 int Half_Search(int t, int low, int high)
     2 {
     3     int  mid;
     4     mid = (high + low) / 2;
     5     if (w[mid] == t)
     6     {
     7         return false;
     8     }
     9     else if (low >= high)
    10     {
    11         return 1;
    12     }
    13     else if (w[mid] > t)
    14     {
    15         return Half_Search(t, low, mid - 1);
    16     }
    17     else if (w[mid] < t)
    18     {
    19         return Half_Search(t, mid + 1, high);
    20     }
    21     return true;
    22 }

     

    作业4(5分)

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

    优化后的profile:

      main/CPU match函数/mian
    优化前 99.63% 88.89%
    优化后 92.53% 1.49%

    说明:改进查找算法后,查找的时间复杂度提升至O(logn)

     

    做业5(5分)

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

    1.注释太过简介,没有注明函数功能

    2.代码变量取名过于随意并且逻辑有错误

    逻辑错误,改正后:

    3.readme文档表述不清,

    例如没有说明create和brute是两个项目工程?没有标明文件是否需要在同一目录中?

    文档命令行出错:

    (题目要求:文件 whitelist,包含1列整数10个,随机生成(要求老杨自己想办法),通过命令行参数指出文件名。

    文件 q,包含1列整数1000个,随机生成(也要求老杨自己想办法),通过控制台读入。)

    改正前:brute -w q < whitelist > output

    改正后:brute -w whitelist < q > output

     

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

    我们来谈谈薪资!

  • 相关阅读:
    网站安全编程 黑客入侵 脚本黑客 高级语法入侵 C/C++ C# PHP JSP 编程
    【算法导论】贪心算法,递归算法,动态规划算法总结
    cocoa2dx tiled map添加tile翻转功能
    8月30日上海ORACLE大会演讲PPT下载
    【算法导论】双调欧几里得旅行商问题
    Codeforces Round #501 (Div. 3) B. Obtaining the String (思维,字符串)
    Codeforces Round #498 (Div. 3) D. Two Strings Swaps (思维)
    Educational Codeforces Round 89 (Rated for Div. 2) B. Shuffle (数学,区间)
    洛谷 P1379 八数码难题 (BFS)
    Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords (贪心)
  • 原文地址:https://www.cnblogs.com/ZigHello/p/13720270.html
Copyright © 2011-2022 走看看