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。)

    //create.cpp
    #include <iostream>
    #include <stdlib.h>
    #include <time.h>
     
    using namespace std;
     
    int main(int argc, char* argv[])
    {
        int num = atoi(argv[1]);
        srand((unsigned)time(NULL));
        for (int i = 0; i < num; i++)
        {
            cout << rand();
            if(i!=num-1) cout << "
    ";
        }
        cout << endl;
     
        return 0;
    }

    作业1(10分)

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

    我是用的是vs2019版本 选择对C++代码进行profile

    执行完成的结果如下图:

     从代码中我们可以看到对于数据的输出部分占比最大。

    1) 读入两个文件,一个用控制台,一个用命令行参数指出文件名。

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

     

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

     2) 在文件biggerq中查找所有不在biggerwhitelist中的整数,重定向输出到一个文件中。

     3) 写一份如何部署运行代码的readme。

    作业2(10分)

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

     profile了大数据之后可以发现,输出部分不是问题所在之处,而是ismatch函数。

    作业3(10分)

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

    #include <fstream>
    #include <iostream>
    #include <cstring>
    using namespace std;
    
    const int w_1m = 1000000;
    int w[w_1m];
    
    bool binarysearch(int t, int w[], int w_length)
    {
        int left = 0, right = w_length - 1, mid;
        //二分法查找
        while (left < right)
        {
            mid = (left + right) / 2;
            if (t < w[mid])
            {
                right = mid - 1;
            }
            else if (t > w[mid])
            {
                left = mid + 1;
            }
            else
                return false;
        }
        return true;
    
    }
    
    // brute -w whitelist < T
    int main(int argc, char* argv[])
    {
        if (argc != 3 || strcmp(argv[1], "-w"))
        {
            return 1;
        }
    
        // init w
        ////    for(int i=0;i<w_1m)
        ////    {
        ////        w[i]=-1; //填充非法数据
        ////    }
        ifstream infile;
        infile.open(argv[2]);
        int i = 0;
        cout << argv[2] << endl;
        while (infile >> w[i++])
        {
        }
        int w_length = i - 1;
        cout << w_length << endl;
        // check t
        int t = 0;
        while (cin >> t)
        {
            if (binarysearch(t, w, w_length))
            {
                cout << t << endl;
            }
        }
    }

    代码地址:https://jianghui2.coding.net/public/better/lib1/git

    作业4(5分)

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

     

     对优化后的代码再次进行profile,发现ismatch的复杂度降低了。

    做业5(5分)

    你觉得老杨的文档(readme),注释和代码风格又哪些问题,该如何改进?面试结束了,你和老杨握手,对他说出了面试的结果。你说的内容,不是今天的作业题,也许是若干年以后你想对当年教你的教师说的,也许是你希望未来的面试官对你说的。你想说的是什么呢?

     答:老杨的文档有错误,最后一句“brute -w q < whitelist <output”应改为"brute -w whitelist < q <output”.注释不够清晰,希望能再清晰明了一些。函数ismatch()逻辑出错,应改为:

    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;
    }

     我希望为未来面试官对我说”放平心态,把自己的能力与优势发挥到极致!”

  • 相关阅读:
    python模块—socket
    mac os系统的快捷键
    教你如何将UIImageView视图中的图片变成圆角
    关于ASP.NET MVC
    iOS 日期格式的转换
    将App通过XCode上传到AppStore 出现这个错误“An error occurred uploading to the iTunes Store”的解决方法
    关于MAC OS下面两个软件的功能改进——Dictionary和Fit 输入法
    分享一下上个星期的香港行程
    【博客园IT新闻】博客园IT新闻 iPhone 客户端发布
    解决Entity Framework Code First 的问题——Model compatibility cannot be checked because the database does not contain model metadata
  • 原文地址:https://www.cnblogs.com/Jh-123/p/13715567.html
Copyright © 2011-2022 走看看