匹配算法的局部最优解

来源:互联网 发布:mac爱奇艺弹幕 编辑:程序博客网 时间:2024/06/05 02:50

【算法背景】

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

        

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


【谈方法】

第一步:问题抽象。

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

        第二步:利用已有知识

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

第三步:站在巨人肩膀上

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

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

【悟道理】

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

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

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

        

原创粉丝点击