vb.net 分班算法请教

itcaicai 2015-12-03 02:54:18
各位大神,请教一个算法的设计问题,还请各位大神帮忙!
问题描述:在excel表中有学生的考试成绩,如班级、姓名、性别、是否住宿、语文、数学、英语、总分。(共1000人)。现在需要把这个电算表的学生分成15个班,要求各班平均分接近,总人数均衡、性别、男女住宿及住宿总数均衡。如果能各科平均分均衡就更好了。
之前的算法比较简单,按照总分降序,然后按S形排列如1,2,3,4,5,5,4,3,2,1,这样的形式分班。先分男生住宿再分女生住宿,在分男生在分女生。这样能够做到基本均衡。但是会使各班各科的平均分差距较大,
请教大家:1、如何设计一个算法,实现学生的分班呢?2、如果按照总分的S形分班,会造成各班男女生比例失衡,如何实现学生的调班呢。比如1班男生多,需要到3班(他们男生少),然后对应调换回来一个与1班这个男同学分数接近的男生,这样的算法如何实现。3、如果按照各科都进行一次S形分班,就会得到每个学生可能去的班级,如A同学语文分应该去2班、数学分应该去3班、英语分应该去2班,那么这个学生就去2班,请问这样的算法是否具有可行性?多谢!
...全文
190 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mjzxlmg 2015-12-08
  • 打赏
  • 举报
回复
http://club.excelhome.net/thread-1034379-2-1.html
MMNStar 2015-12-04
  • 打赏
  • 举报
回复
引用 6 楼 xdashewan 的回复:
[quote=引用 5 楼 itcaicai 的回复:] 这样可以均衡总平均,如果想要各科也基本平衡应该如何处理?
各科稍许有些麻烦,首先你按上述分完班,然后求出每个班级的各科平均分,自己定一个基准线,比如允许的波动值在上下5分,那么先找到大于这5分科目的班级,找到该科中最低或者比较低(是否取最低又关系到排位,你自己衡量)的人。再找到该科目小于或者最接近小于5分的班级,按照分数低于平均线,性别相同,住宿条件相同,其他科目成绩也最接近于平均线的那人,和之前找出人做班级交换。重新计算各科成绩,重复上述操作,直到所有班级所有科目都入允许的波动值内。[/quote] 对,我也有同样的想法,先分班,然后再根据一定条件调换就行了。实在不行先保存一个快照,然后随机调换两人,再计算总平均值、各科平均等,两班差值如果比原来的小,就保留,否则就还原原始的快照,重新再随机调换两人;然后添加个计数器,按这个方式循环几千次就停止。
xdashewan 2015-12-03
  • 打赏
  • 举报
回复
引用 5 楼 itcaicai 的回复:
这样可以均衡总平均,如果想要各科也基本平衡应该如何处理?
各科稍许有些麻烦,首先你按上述分完班,然后求出每个班级的各科平均分,自己定一个基准线,比如允许的波动值在上下5分,那么先找到大于这5分科目的班级,找到该科中最低或者比较低(是否取最低又关系到排位,你自己衡量)的人。再找到该科目小于或者最接近小于5分的班级,按照分数低于平均线,性别相同,住宿条件相同,其他科目成绩也最接近于平均线的那人,和之前找出人做班级交换。重新计算各科成绩,重复上述操作,直到所有班级所有科目都入允许的波动值内。
itcaicai 2015-12-03
  • 打赏
  • 举报
回复
引用 4 楼 xdashewan的回复:
[quote=引用 3 楼 itcaicai 的回复:] 这种分配的结果可能导致如果分四个班,某个班级前十名人数会比其他班级多2-3个而且前两名可能会被分到一个班级
得到前两名的班级必然也会得到两个极差生,你要保证的是平均分,又不是按排名来分,你实在不想前2在一起,你先把前2分了,再去套这套逻辑不就好了[/quote] 这样可以均衡总平均,如果想要各科也基本平衡应该如何处理?
xdashewan 2015-12-03
  • 打赏
  • 举报
回复
引用 3 楼 itcaicai 的回复:
这种分配的结果可能导致如果分四个班,某个班级前十名人数会比其他班级多2-3个而且前两名可能会被分到一个班级
得到前两名的班级必然也会得到两个极差生,你要保证的是平均分,又不是按排名来分,你实在不想前2在一起,你先把前2分了,再去套这套逻辑不就好了
itcaicai 2015-12-03
  • 打赏
  • 举报
回复
这种分配的结果可能导致如果分四个班,某个班级前十名人数会比其他班级多2-3个而且前两名可能会被分到一个班级
Poopaye 2015-12-03
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
我是这么想的,首先先分为男住宿池,女神住宿池,男归宅池和女神归宅池,每个池都按分数高低排好序,假设要分为4个班。首先从男住宿池里拿出分数最高者放入班A,次高者放入班B,班C和D也依次放入第三第四名,接着从女神住宿池里拿到成绩最高的女神放入分数最低的班D,次高者放入班级C,后面以此类推。放入一对狗男女以后,对班级ABCD按当前平均分重新排一次序,排序后再按之前规则再放入一对狗男女,重复上述操作直到男女住宿池中的一个用完,然后开始从归宅池里抓。
xdashewan 2015-12-03
  • 打赏
  • 举报
回复
我是这么想的,首先先分为男住宿池,女神住宿池,男归宅池和女神归宅池,每个池都按分数高低排好序,假设要分为4个班。首先从男住宿池里拿出分数最高者放入班A,次高者放入班B,班C和D也依次放入第三第四名,接着从女神住宿池里拿到成绩最高的女神放入分数最低的班D,次高者放入班级C,后面以此类推。放入一对狗男女以后,对班级ABCD按当前平均分重新排一次序,排序后再按之前规则再放入一对狗男女,重复上述操作直到男女住宿池中的一个用完,然后开始从归宅池里抓。

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧