ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: aoe1981

[原创] 邯郸学步2之学有所成:随机优化分班

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-8 12:52 | 显示全部楼层
  况且,这种“方差最小方案”的寻找本身就是“大海捞针”,我们要做的是一场长跑和接力赛,比得是谁的耐心和时间更大!
  光进行一次数据的遍历是可以的,但得到的结果可能不如进行了两次遍历的,两次的又不如三次的……直到n次!
  这样多次的遍历,您觉得“选择第一个变优学生交换”还会是重大的遗憾吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-8 13:07 | 显示全部楼层
  关于交换次数的公式计算见下帖:
  http://club.excelhome.net/forum. ... 943&pid=7789908
  问题原型为:
  “n个学生分m个班,设m个班的人数分别为:
  N1、N2、N3、N4、……、Nm
  则两两交换学生的次数完整的是 combin(n,2)次,如果不考虑同班学生两两之间的交换,则有多少次呢?”
  引述自:
  http://club.excelhome.net/forum. ... 943&pid=7789253
  详细翻阅上下楼层还有更多可供参考的内容。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-8 13:09 | 显示全部楼层
  比如:
  “如 3个班,9、10、11人共30人
  则计算式= 9*(10+11)+10*11=299人次。
  如果顺序为 10、9、11人则
  则计算式= 10*(9+11)+9*11=299人次。
  即,人数顺序变化不影响计算结果。因此结论正确。”
  引用来自香川回帖:
  http://club.excelhome.net/forum. ... 943&pid=7789370

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-8 13:28 | 显示全部楼层
本帖最后由 aoe1981 于 2014-8-8 17:30 编辑

  关于代码运行的时间:
  附件中给出的时间参考,一定要慎重参考!
  首先这种时间受到的代码以外的运行软硬件环境的影响就很复杂多样且不可控……
  其次,受到不同数据体量的影响十分深刻,附件中仅以170人为例测试提供参考……
  人数的增加,带来的时间的增加是不是线性的还未可知,如果像几何级数一样……
  呵呵,恐怖的等待,遥遥无期的接力赛!不过,个人觉得应该是线性的吧……  

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-8 13:32 | 显示全部楼层
本帖最后由 aoe1981 于 2014-8-8 13:38 编辑

  最好的测试方法是:首次运行不要太贪心,一定先试一下遍历全体数据一次时是多长时间,然后适度提高……
  千万不要一上来,就来个50到100次遍历,而不考虑您的学生人数是多少……这样,您会“等到花儿都谢了”……
  最好的办法是“小步快走、少吃多餐”,一次循环遍历1次,反复来几次,这个附件也具有“愚公移山”的精神和行动,会记住上次优化结果的……

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-8 13:48 | 显示全部楼层
本帖最后由 aoe1981 于 2014-8-10 22:40 编辑

  我定义的循环变量都是长整型&,查了下其最大值是:21 4748 3647 (最小值为:-21 4748 3648),对于太大体量,太多次的循环,按理来说会有溢出的可能……
  但是,我想一般达不到,真的到了那一步,估计您得坚持个十天半月的,说不定更长……
  等一会再上测试结果。
  补充:
  结合22楼数据:http://club.excelhome.net/forum. ... 904&pid=7794631
  平均:760次/秒
  测算:21 4748 3647/760/3600/24=32.704124741106237816764132553606(天)

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-8 13:59 | 显示全部楼层
本帖最后由 aoe1981 于 2014-8-8 20:54 编辑

  以下上稍大数据测试附件:
   随机优化分班之学有所成(稍大数据测试).rar (73.54 KB, 下载次数: 76)
  附件截图:
   4.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-8 14:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  关于代码的运行时间,可以发现不是“线性的”,是很恐怖的增长,先上图,原因后面分析:
   1.jpg
   2.jpg
   3.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-8 14:05 | 显示全部楼层
  测试附件依然是954人分16班,为什么会有这样的运行时间表现呢?
  首先再次做一下相关引用:
  “假设各班人数相等,平均分下来,各班人数最多相差1,可以忽略不计,此时:
  n个学生分m个班,平均每班人数a=n/m
  根据您的公式可得简化的式子:
  两两调换总次数:
  (n*(n-n/m))/2”
  http://club.excelhome.net/forum. ... 943&pid=7789908

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-8-8 14:09 | 显示全部楼层
  注意到公式:(n*(n-n/m))/2
  n此处表示人数(可能上下字母表示的意义有所不同),如果这个人数扩大a倍,便成an人,则这个公式代表的总次数会扩大a^2倍,您可以代入试算一下,这就说明这绝对不是线性增长了,是以平方倍的方式增长,感觉貌似指数增长了!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 13:58 , Processed in 0.048859 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表