今年Mathorcup难度整体难度比较大,四道题对算法编程能力要求都较高,计算量都比较大。作为新手的话建议可以优先考虑A和D题,整体对新手稍微友好一些。这里给出D题我的思路,仅供大家参考。移动通信网络站址规划和区域聚类问题,这道题正如题目所说,需要解决的问题包含两部分,分别是网络站址规划和区域聚类问题。首先第一问:
最简单的解读就是要我们建立新基站,然后依据这些新基站画圆,其中宏基站是半径为30的圆,微基站是半径为10的圆,只要我们画的圆可以将附件一中的坐标覆盖掉就可以满足题目要求。如下图所示:其中黑色为新建基站,红色的就是不满足要求的点,蓝色的点就是满足要求的。
当然题目并不是只有这么简单,在我们进行基站建立时,题目给我们了两个附加要求,第一个是成本,我们要考虑成本最小化,第二个是与已有基站的距离不能小于10。第一个要求最简单的方法是分别建立一个只有宏基站和只有微基站的规划情况,然后对比成本,则可以得出我们现在的相对节约(但这种方法是下下策,最好是在几种两个基站都有的情况下选最优)。第二个要求则可以通过写if判断语句,将前面筛选出的点,都与已有基站进行判断,不断进行修正,直到达到最优解。
另外补充一点,在进行站点选取时,我们可以首先考虑进行数据的筛选,比如有些距离小于5的点,这些在建立基站时很有可能被包含在一个基站当中,所以我们可以将这样的点整理为1个点,提高计算效率,最后在选取之后在整体看看,这些点有没有都包含在内。(第一问的数据处理代码以及)
第二问:
第二问需要的是根据我们上一问求得的基站结果,进行进一步的处理。具体方式就是将上一问的圆简化成三个扇形,每两个扇形之间的夹角不能小于45度,这就需要我们调整三个扇形的角度,为便于计算这里给出大家的一个建议。可以根据这些扇形中包含点的数量和位置进行聚类。然后将每一类设置一种角度。在计算之后,后续需要的就是简单分析一些计算结果即可。
第三问:
第三问就是一个聚类问题,是需要我们根据距离进行聚类,这个后续会给出具体聚类的方法代码,需要大家做的是,根据我给出的代码不一定是算法复杂度最低的,我会给出大家几种聚类的代码,和你们的数据进行匹配,选出最适合你们的聚类结果即可。
上述的思路,主要是本题的分析思路,具体求解过程可以看:🍞正在为您运送作品详情
后续也会继续在面包多上面更新思路、代码以及代码讲解。尽可能给到大家帮助。