• 结对第二次作业


    第二次结对作业

    姓名:郭剑南 学号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. 还算可以。


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

  • 相关阅读:
    Windows下Yarn安装与使用
    Node.js安装及环境配置之Windows篇
    sharding-jdbc—分片策略:Inline行表达式分片策略InlineShardingStrategy(2)
    sharding-jdbc—分片策略:标准分片策略StandardShardingStrategy(1)
    sharding-jdbc—分片策略(总)
    ShardingJdbc 数据脱敏
    ShardingJdbc 数据分布式事务
    Spring Boot整合Sharding-JDBC实现分库分表+读写分离org.apache.shardingsphere+mybatis-plus(4)
    jenkins docker
    nps 使用
  • 原文地址:https://www.cnblogs.com/micheallll/p/7643225.html
Copyright © 2020-2023  润新知