zoukankan      html  css  js  c++  java
  • 结队项目——第二次作业

    031502533 熊立强
    031502538 俞鋆
    作业
    github


    ###最好的数据及分析 [数据](https://github.com/juin1997/Couple-Homework-/blob/master/Project_IntelligebtPairing/input_data.txt) 随机生成的数据分布教均匀,最大差距在20左右。 ![](http://images2017.cnblogs.com/blog/1011927/201710/1011927-20171009214653668-708748452.png) ![](http://images2017.cnblogs.com/blog/1011927/201710/1011927-20171009214709199-500383790.png) ![](http://images2017.cnblogs.com/blog/1011927/201710/1011927-20171009214729262-1228922629.png) ![](http://images2017.cnblogs.com/blog/1011927/201710/1011927-20171009214742152-1822634196.png) ![](http://images2017.cnblogs.com/blog/1011927/201710/1011927-20171009214755105-1600277791.png) ![](http://images2017.cnblogs.com/blog/1011927/201710/1011927-20171009214805559-737441224.png) ![](http://images2017.cnblogs.com/blog/1011927/201710/1011927-20171009214820387-181377669.png)
    • 原理
      学生编号和部门编号都是固定的,只需要有一个初始值,后面一个一个加上去即可。
      其他的数据都是用随机数生成的,为了使随机数分布均匀,先使用srand(time(NULL))让生成的随机数不容易重复,时间中的星期几用字符串数组随机生成,开始时间随机一个822的数字,使生成的时间合理化,结束时间随机一个从开始时间后到23点的时间,选择的部门也只要在019间随机就行,标签用字符串数组,随机数字即可选中。

    • 考虑因素
      数据是不是固定的,有没有范围限制,这样的数据合不合理,一般人的数据会是怎么样的。

    数据建模及匹配程序的思路及实现方法

    • 思路
      数据建模的问题主要是需要生成分布比较均匀合理的数据,不能太多人选同一个部门,也不能一个部门没人选,学生的空闲时间和部门的活动时间都不能是大晚上,一个人和部门的标签在现实中也不会太多;而匹配程序的问题主要在于优先级,标签,志愿和时间这三个的优先级,根据这三个的数据给部门分配学生。

    • 实现方式
      我数据建模的实现方式很直接,固定的数据就用一个初始值,后面一个一个加上去即可。其他数据就随机生成。匹配的实现方式就是将学生部门时间的匹配程度,标签匹配程度,学生的志愿都算出一定的分数,学生进入志愿中分数最高的部门,如果一个部门满了就将分数低的踢出去。

    时间随机生成

    for(tLoop=0;tLoop<i;tLoop++)
    			{
    				if(tLoop==0) tWeek=Rand(0,7);
    				else tWeek=(tWeek+1)%7;
    				tString=Week[tWeek];
    			        tStart=Rand(8,22);        //活动开始时间限制在8点到22点
    				tString+=ToString(tStart);
    				tString+=":00~";
    				tString+=ToString(Rand(tStart+1,24));        //活动结束时间限制在24点
    				tString+=":00\"";
    				if(tLoop==i-1) 
    					fout<<"                \""+tString<<endl;
    				else
    				fout<<"                \""+tString+","<<endl;
    			}
    

    读取文件,用cJSON解析文件

        string d;
        ifstream infile;
        infile.open("input_data.txt");        //打开输入文件
        string s;
        while(getline(infile,s))        //将文件中的内容全部转为字符串               
        {
            d=d+s;
        }
        cJSON* json = cJSON_Parse(d.c_str());  
    

    代码规范

    1.标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解。
    实例:

            int i,stu,         //定义学生循环的变量
    	tLoop,         //定义循环生成时间的变量
    	tWeek,       //定义生成时间是星期几的变量
    	tStart,          //定义时间开始时间的变量
    	appliDepart,          //定义学生报的部门循环的变量
    	appliDepartNum,         //定义学生报的部号
    	depart,                   //定义部门循环的变量
    	tags,                        //定义标签循环的变量
    	tagStart;                 //定义开始标签的变量
            string tString;           //定义用来输出的字符串
    
    1. 一般情况下,源程序有效注释量必须在20%以上。

    2. 注释的内容要清楚、明了,含义准确,防止注释二义性。

    3. 边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。

    4. 注释应与其描述的代码相近,对代码的注释放在其上方或者右边,不可放在下面,放于上方则需与其上面的代码用空行隔开。

    5. 数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,必须加以注释。对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释放在此域的右方.

    实例:

    struct Student                                   //定义学生结构体
    {
    	LISTSTRING FTDay;               //定义学生空闲时间是星期几
    	LISTINT FTStart;                      //定义学生空闲时间的开始时间   
    	LISTINT FTEnd;                        //定义学生空闲时间的结束时间
    	string StudentNo;                      //定义学生的学号
    	string ApliDepart[5];                   //定义学生报的部门
    	LISTSTRING Tag;                      //定义学生的兴趣标签
    };
    
    

    结果评估(完成中)

    结对感受

    • 感受
      首先,我觉得本次结对作业我和我的队友是很失败的。失败的理由有三:
      一、我们就只在放假前讨论了一下,之后都是线上交流,有时候等对方回一句话都要几个小时,效率十分低下。
      二、分工的时候我写生成和读取数据程序,我的队友写匹配程序,这样的话如果我不写完的话,他根本无法对程序进行评估,有什么不足,最终导致了我们的程序无法在规定的时间完成,只写了生成和读取数据程序。
      三、我们的积极性不够,放假期间没怎么做作业,等到假期快结束才开始做,也是无法完成作业的重要原因。
      在本次作业中,我也学到了很多,比如了解到了JSON的格式和使用方法,学会使用C语言的第三方库cJSON来解析文件,中途遇到了很多编译上的困难,最终大都克服了。
    • 建议
      不要应该是同学就不好意思开口,有些时候只要问一下对方就能解决问题了,但由于是同学不好意思开口,就自己一个人搞呀搞,最后发现一直在做无用功,太浪费时间了。在学校的时候就应该多在一起讨论问题,不能依赖于线上交流,在线上注意力不够集中,完全不能专心讨论。
  • 相关阅读:
    5.4 省选模拟赛 修改 线段树优化dp 线段树上二分
    一本通 高手训练 1782 分层图 状压dp
    luogu P3830 [SHOI2012]随机树 期望 dp
    5.2 省选模拟赛 或许 线型基
    luogu P4562 [JXOI2018]游戏 组合数学
    一本通 高手训练 1781 死亡之树 状态压缩dp
    luogu P4726 【模板】多项式指数函数 多项式 exp 牛顿迭代 泰勒展开
    4.28 省选模拟赛 负环 倍增 矩阵乘法 dp
    HDU 1756 Cupid's Arrow 计算几何 判断一个点是否在多边形内
    一本通 高手训练 1763 简单树 可持久化线段树 树链刨分 标记永久化
  • 原文地址:https://www.cnblogs.com/yujohn/p/7643223.html
Copyright © 2011-2022 走看看