编程之美 1.7光影切割问题

问题:如何快速计算某个时刻,在X[A,B]区间上的地板被光影划分成多少块?

解法一:

两条直线+一个交点=>空间分成4块

三条直线+2个交点=>空间分成6块

三条直线+3个交点=>空间分成7块

n条直线+m个交点=>空间分成n+m+1块

初始化时间复杂度O(N^2),找出所有的交点

每次查询时间复杂度O(m),哪些交点在X[A,B]区间内

若初始化后将交点按x轴排序,初始化需O(N^2+mlogm)

然后每次查询二分查找O(logm)

解法二:

image

可以看出图中的逆序数等于直线的交点数,因为没有3条直线相交于一个点。

直接求解逆序数的方法是O(N^2)

可以用分治的思想降为O(NlogN),可通过归并排序或树状数组求得。

转载于:https://www.cnblogs.com/Linkabox/p/3363424.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值