开始说下,写代码的时候难免会遇到算法的问题,所以无论是做什么职位,只要跟code有关,最好多多少少会一些算法,不会算法有时是很痛苦的,比如我。。。囧。
需求很简单,就是检测在一堆无序的,有向区间内的连通性,比如:
假设有如下的序列:
1-4
9-12
2-6
9-10
6-9
1-8
其中,已知有1-8这个区间,那么如果有6-9的区间进入时,就可以确定1-9是联通的,因为6-9的起点在1-8的区间内。
这里最低的起点是1,最高点是12,那么用什么办法可以快速的得到这队序列是否是联通的。
经过思考,本打算用A*来解决这个问题,但发现需要维护两个队列,并且由于区间序列是无序的,还要用二叉树堆来维护排序,也是增加很多成本,最后就决定使用首先构建出区间矩阵,并通过不停的拓展区间的起点和终点,然后通过遍历来解决这个问题,思路如下:
经过程序实现,测试后验证想法是正确的,用时0.06m测试通过了97个无序的区间队列的连通性,当然还可以算出最短路径,那就直接上Dijkstra就行了。
由于本人并未系统的学习过算法,也非数学专业的科班出身,所以很多地方还是可以继续优化的,也可以用其他更好更优的办法来做,还希望各位科班出身的人不吝赐教哈。