如何测试无序区间队列的连通性问题
开始说下,写代码的时候难免会遇到算法的问题,所以无论是做什么职位,只要跟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*来解决这个问题,但发现需要维护两个队列,并且由于区间序列是无序的,还要用二叉树堆来维护排序,也是增加很多成本,最后就决定使用首先构建出区间矩阵,并通过不停的拓展区间的起点和终点,然后通过遍历来解决这个问题,思路如下:
- 创建一个map,用来维护矩阵(map用红黑树,查找效率很不错。)。
- while(插入一个区间): #设插入节点为p, p.x为区间起点, p.y 为区间终点
- map是否为空。
- 直接放入map,继续循环。
- 是否有以p.x为起点的节点。
- 检查p.y所能达到的是否比当前区间的终点要远。
- 更新当前区间的终点。
- 检查p.y所能达到的是否比当前区间的终点要远。
- 是否有以p.y为起点的节点。
- 检查p.x所能达到的是否比当前区间的起点要近。
- 更新当前区间的起点。
- 检查p.x所能达到的是否比当前区间的起点要近。
- 遍历map,查找p能插入的区间,并修改区间的起点和终点。
- map是否为空。
- 从最低起点深度遍历(此时矩阵基本是已经是一条线了)到最高顶点,成功就联通。
经过程序实现,测试后验证想法是正确的,用时0.06m测试通过了97个无序的区间队列的连通性,当然还可以算出最短路径,那就直接上Dijkstra就行了。
由于本人并未系统的学习过算法,也非数学专业的科班出身,所以很多地方还是可以继续优化的,也可以用其他更好更优的办法来做,还希望各位科班出身的人不吝赐教哈。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库