zoukankan      html  css  js  c++  java
  • 整数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相同时,进一步使用区间的其他稳定可比较信息可以解决。

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

  • 相关阅读:
    事务
    一、python 基础之基础语法
    二、python 中五种常用的数据类型
    三、python函数详解
    四、 面向对象(一)
    五、面向对象(二)——继承与重写
    六、异常处理、日志打印、文件操作
    scrapy(一):基础用法
    # scrapy(二):get请求
    scrapy(三):post请求
  • 原文地址:https://www.cnblogs.com/robird/p/4549493.html
Copyright © 2011-2022 走看看