上面我给出的算法是精确的,因为我们打所有的可能都知道了,当然精确了。但haha担心的速度问题是肯定存在的,随着人数和班级的增加,可能连计算机算几千年也算不出来,那么说算法没有意义吗?当然不是,地跪和跌代是有本质差别的,地跪是我们要知道最后算出来的值才可以知道结果,而跌代事每一次算出得值可以作为下次值的查考或修正,其实上面的算法只要加上几个条件就可以了。每一次运算不用算完,只要算几个数就知道这次的分法是不是比上次好,不行直接退出就可以了。
还有其实当人数大到一定程度的时候,最好的方法就是没有方法,闭上眼睛随机分就可以了,我们用计算机模拟过,结果很有现实意义。
概率上看,分数分配符合正态分布,也就是说80%的分数会在一个相对比较集中的区域,你可以画一个曲线图,可以看出所有学生的分数都在平均线上下浮动,你可用比较粗的毛笔延平均线画,用毛笔抹掉的学生是可以不参加计算的。这样10000名学生,估计也就剩下2000名了。
如果是100学生按三门功课分2班,从线性袋鼠看,就是解一个矩阵方程组,求使俩个50*4的矩阵和减平均矩阵的向量长度最短的解。我还没用matlab算过,以后又时间可以看看,估计也快不到哪里,应为本质还是我最开始说的一样,不过作为矩阵计算可能会有些巧妙的方法,maybe。
当然,还可以用计算机模拟,每个班一个班主任,让他们随机轮流选择学生,当然是选者分数最高的那个了,不过没关系,there is banlance we can not see but we can feel it。最后看看结果,或许你会大吃一惊。从概率上看当人数越多,越符合实际情况,人数不多那最好,直接跌归去好了。