zoukankan      html  css  js  c++  java
  • 结对第二次作业

    第二次结对作业

    姓名:郭剑南 学号031502609
    队友姓名:胡武成 学号031502610

    Github:https://github.com/winforbest/Dep-Stu

    生成程序:

    原理:
    因为这次作业的背景是部门筛选问题,所以我们讨论出最后生成的数据还是要接近实际。

    • 首先是学生的空闲时间段和部门的活动时间段。考虑到生活作息,我们规定两者的时间段在早8am-10pm之间选出连续的两个小时。一天可能有多个空闲时间或活动时间,同一天的时间段不会重复或重叠。

    • 其次是兴趣标签。每个部门和学生的兴趣标签个数为T(2≤T≤10),同一部门或同一学生不存在重复标签。

    • 先随机生成K个兴趣标签。
    • 每个部门从K个标签中随机选取T个标签,所有的部门从K个标签中共选出L个标签(L<K)。
    • 每个学生再从L个标签中随机选取T个标签,所有学生从L个标签中共选出M个标签(M<L),这样保证学生的兴趣标签一定是部门标签中的一个。
    • 接着是随机生成部门编号和学生编号,部门格式为Dxxxxxx,学生格式为Sxxxxxx
    • 最后是随机生成每个学生的部门意愿,数量在0-5之间。
      数据:input_data

    匹配程序:

    原理:

    • 首先是部门选择的先后顺序,学生意愿选择最多的部门最先开始选择。
    • 其次是部门选择学生的算法思路
    • 先考虑部门活动时间与学生空闲时间冲突情况,不冲突或冲突较少的优先选择。
    • 再考虑学生的兴趣标签与部门标签相同的数量,数量多的优先选择。
    • 接着考虑学生意愿,像填报志愿一样,意愿靠前(第一志愿)优先考虑。

    代码规范:

    • 每个函数实现一个功能,保证函数独立性。
    • 使用注释,结构清晰。

    部分代码:

    // ----------------------------- 计算标签度 -----------------------------------
    
    // 标签度 = 吻合的兴趣标签个数 / 部门兴趣标签数 
    double calTag(int a, int b) {
    	int i, j, cnt = 0;
    	int len = dep[b].tlen;
    	for (i = 0; i < len; ++i) {
    		int len2 = stu[a].tlen;
    		for (j = 0; j < len2; ++j) {
    			if (dep[b].tags[i] == stu[a].tags[j]) {
    				++cnt;
    			}
    		}
    	}
    	return 1.0*cnt / len;
    }
    
    // ----------------------- 计算重视程度(第几志愿) -----------------------
    
    // 重视程度 = 第x志愿 / 总志愿数
    double calChoose(int a, int b) {
    	int i;
    	int len = stu[a].alen;
    	string dno = dep[b].department_no;
    	for (i = 0; i < len; ++i) {
    		if (stu[a].applications_department[i] == dno) break;
    	}
    	return 1.0*i / len;
    }
    

    结果评测:
    x = 中选学生数/总学生数
    y = (各部门接收人数/各部门纳新人数上限)/总部门数
    执行测试样例, 计算结果 x = 0.73 , y = 0.64. 还算可以。


    结对感想:对我来说,这次结对作业印象最深的地方就是在看到题目后两个人探讨的部分。我们分析了许多可能存在的因素和问题,并在基于实际情况下,提出解决各种问题的方案,就像是让这个程序在现实使用中可以发挥出作用。一个人提出观点,另一个人改进这个观点,在不断的改进的过程中往往能发现解决问题的方法。
    当然代码部分还是要紧紧抱住大佬的大腿。。生成程序的代码多亏了大佬的帮助才得以完成。大佬也教了我许多代码的小技巧以及规范方面的东西。希望能在以后的作业和两人的头脑风暴中不断收获和进步。

  • 相关阅读:
    【Web技术】561- 网站性能优化之度量篇
    【拓展】什么是Deno?跟Node.js有何区别?
    【Web技术】560- 一个简洁、有趣的无限下拉方案
    【Web技术】559- 一文带你彻底搞懂跨域
    【TS】558- 5000 多字,让你一文掌握 TS 枚举
    【拓展】你真的会写 Markdown 么?
    【调试】557- 11 个Chrome骚技巧让你为所欲为
    ios 地图
    ios 7 20像素解决
    保存图片到相册
  • 原文地址:https://www.cnblogs.com/micheallll/p/7643225.html
Copyright © 2011-2022 走看看