整数1维碰撞检测

直接两两检测是n方级别的时间复杂度,其实可以提高的。以下是一种基于排序的方法,针对1维,整数精度的情况,也就是许多整数区间中哪些相交的问题。

基本思想是对所有区间的下界和上届都混在一起进行排序,并记下每个端点的序号,如果某个区间的上界序号不是下界序号+1的话,那就说明发生了相交。在此基础上,可以二分查找和哪些个端点相交了。无碰撞情况时间复杂度是logN(快排,数量很大的话用计数基数排可以进一步降到N) + N(检查)。全碰撞情况时间复杂度是logN + NlogN。这方法在时间和空间上算是做个折中吧。

对于序号相同和排序稳定性引起的可能漏检的问题,比如两个长度为1完全重合的区间,很可能排序成aSt,aEd,bSt,bEd的情况。为此,在排序前先对各区间的范围做个变换使得st一定排在ed前。st' = st*2, ed'=ed*2+1。但还是会可能出现aSt,bSt,bEd,aEd的情况,这时需注意,检测不是双向的,仅有a能检测到b与之相交,b却发现不了包在他外面的a。如果使用稳定的排序算法,或者进一步进行坐标变换,使得st相同时,进一步使用区间的其他稳定可比较信息可以解决。

 

接下来考虑和基于桶的排序比较下哪种更适用于目前的情况。在做规约冲突的识别。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值