匹配算法的局部最优解

【算法背景】

某班要准备进行小组学习,每组2人,剩下的可以是3人一组。其中比较麻烦的一件事情是水平差距比较大的同学不适合结组。另外男女生结组要优先考虑,这个你懂得。。。。那么如何设计一个算法来进行分组,来保证整体最优?

        

       鑫超同学开始给我讲这个问题的困难点:比如A同学和B同学比较合适,B同学优先考虑A,其次考虑别人,如果A和B结组,那么就意味着这个选择对B造成了损害。所以这是一个牵一发而动全身的选择,如何选择能让每个人满意呢?


【谈方法】

第一步:问题抽象。

把人和人之间适合度量化,作为人和人之间的距离。

        第二步:利用已有知识

                我第一感觉就想到了矩阵,然后想着想着自然而然地利用了图。上述问题就是一个比较大的有向图,在这个图中人作为节点,而人和人之间的适合度作为节点距离。现在的问题就是如何在图中两个两个分组,使总距离之和最大。

第三步:站在巨人肩膀上

                 因为我之前学习数据结构的时候,听说过什么布鲁斯卡尔算法,里面好像有什么选择最大路径的过程。借鉴一下,面对我现在的这个问题,就像从有向图中选择一条回路(类比珍珠项链),包括所有节点,然后两个两个分组,断成多个火柴棍。

                具体做法:从任意节点开始,选择最大路径,跳到第二节点。选择最小路径,标记为需要断裂的路,跳到第三个节点。选择最大路径,跳到第四节点。选择最小路径,标记为需要断裂的路,跳到第五个节点。。。以此类推。

【悟道理】

        1、读书是为了学习别人的思想,为读书而读书的行为,效率较低。这样能在特定场景下利用前人的思想。

        2、技术的本质是为了改善生活,通过个人技术谋求整体最大化利益的行为才是技术的本质。一个人技术再牛逼,造福的人少,产生的社会价值小,个人价值也就不会很大。

        3、跟人学习的效率最高。一个活生生的人包含了知识,情感,人格,修养,这些东西也通过人与人之间打交道相互借鉴吸收,最终成为高手 。

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值