光影切割

在一个平面内有一个矩形区域,直线穿过矩形可以将其分割为不同的区域,且在这个平面中不存在三条直线相交一点的情况。求当有N条直线穿过矩形时,它被分割为多少个区域?

解法一:
      平面倍划分成多少块的问题可以转化为直线的交点有多少个的问题。
      两条直线-->一个交点-->空间分成4个部分
      三条直线-->两个交点-->空间分成6个部分
      三条直线-->三个交点-->空间分成7个部分

每增加一条直线,如果增加M个交点,那么这条直线被新增加的M个交点,分成M+1段。每一段直线会将原来一块区域分成两块,因此,新增加M+1块新区域。

如果总共有N条直线,M个交点,那么区域的数目为N+M+1。如何证明?将N条直线逐一投影到坐标区间上,假设第K条直线与之前的K-1条直线的焦点为Nk个,那么它使得区间内的区域块增加Nk+1个。则N条直线投影完毕后,所有区域块的数目为:
      1+sigma(Nk+1)(1-->n)=1+N+sigma(Nk)(1-->n)=1+N+M

因此,求出所有直线两两相交的交点,然后再查找落在区间内的交点,就可以计算出划分的区域块数。将所有交点存储于数组Intersect中,然后计算。这样,算法的复杂度就转化为查找交点数组的问题了。

数组初始化,即计算所有交点,时间复杂度为O(N^2)。每次查询的时间复杂度为O(M)。
如果在初始化后对所有交点按X轴坐标排序,则复杂度为O(N^2+M*logM),之后进行二分查找,每次查找的时间复杂度为O(logM)。

解法二:
      一个交点的情况,两条直线与左边界的交点顺序为(a,b),与右边界的交点顺序为(b,a),顺序反过来了。如果没有交点,则顺序不变。
      区域内的交点数目等于一个边界上交点顺序相对另一个边界交点顺序的逆序总数(利用到条件“没有三条直线相交于一个点”)。

问题转化为求一个N个元素数组的逆序数。

求解逆序数的直接方法时间复杂度为O(N^2),若用分治策略,可降为O(N*logN)。分治思想如下:求前N/2个元素的逆序数,再求后N/2个元素的逆序数,最后在排序过程中合并前后两部分之间的逆序数。

https://blog.csdn.net/lonelycatcher/article/details/7907333

BCZM : 1.7的更多相关文章

  1. BCZM: Chapter 2

    2.1 二进制数中 1 的个数 实现一个函数,输入一个无符号整数,输出该数二进制中的1的个数.例如把9表示成二进制是1001,有2位是1,因此如果输入9,该函数输出2 分析与解法 解法1:利用十进制和 ...

  2. BCZM: Chapter 1

    1.1 CPU 占用率 https://www.cnblogs.com/TenosDoIt/p/3242910.html 1.2 中国象棋将帅 https://blog.csdn.net/kabini ...

  3. BCZM : 2.1

    1.问题描述 实现一个函数,输入一个无符号整数,输出该数二进制中的1的个数.例如把9表示成二进制是1001,有2位是1,因此如果输入9,该函数输出2 2.分析与解法 解法1:利用十进制和二进制相互转化 ...

  4. BCZM : 1.16

    24点游戏 解法一:穷举法 解法二:分治法

  5. BCZM : 1.15

    数独 解法一:广度优先搜索. 解法二:先填满中间矩阵,其他区域通过矩阵置换求出.

  6. BCZM : 1.9

    有n个学生参加见面会,分别对m个研究组中的若干个感兴趣,为了满足所有学生的要求,每个学生都能参加自己感兴趣的见面会,如果每个见面会的时间为t,如何安排才能使得所有见面会的总时间最短? 分析: 先建立模 ...

  7. BCZM : 1.8

    问题:      所有的员工均在1楼进电梯的时候,选择所要到达的楼层.然后计算出停靠的楼层i,当到达楼层i的时候,电梯停止.所有人走出电梯,步行到所在的楼层中.求所有人爬的楼层数目和的最小值. 解法一 ...

  8. BCZM : 1.6

    https://blog.csdn.net/kabini/article/details/2311946 题目大意: 水房能容纳饮料的总量是V,有一批饮料,每种饮料单个容量都是2的方幂,每种饮料信息如 ...

  9. BCZM : 1.5

    https://blog.csdn.net/zs634134578/article/details/18046317 有很多服务器存储数据,假设一个机器仅存储一个标号为ID的记录,假设机器总量在10亿 ...

随机推荐

  1. 20140610 PP中可以绘制表格;PPT组合之后再加效果

    PPT绘制表格(行人检测的cell和block) 动画:组合之后再加效果

  2. 基于OpenResty与Consul实现服务网格ServiceMesh

    一.逻辑架构 1.基于OpenResty开发智能代理: 利用其动态可编程特性,动态化配置nginx服务路由: 2.需要向OpenResty添加weibo开源的upsync服务发现模块: 3.基于con ...

  3. web 服务中上传文件大小控制

    参考文章:https://rensanning.iteye.com/blog/2388353 项目场景: Vue + Nginx + Java + Tomcat Nginx作为反向代理服务器,访问To ...

  4. 完美编译街机模拟器MAME(Android版)基于MAME4all

    重新编译MAME4droid源码 github上开源项目MAME4all可将MAME模拟器运行在iOS和Android上,还有一个比较有名的叫MAME4droid(MAME for android), ...

  5. K-mean matlab 实现代码

    一.K均值聚类算法 算法步骤如下: 1.初始化 已知数据集合X,及事先指定聚类的总类数N,在X中随机选取N个对象作为初始的聚类中心. 2.设定迭代终止条件 通常设置最大循环次数或者聚类中心的变化误差. ...

  6. Apache Tomcat下载、安装、环境变量配置以及项目部署

    前言 针对在本地访问文件或资源出现的跨域问题,可以通过搭建本地服务器来解决,本篇随笔主要介绍通过搭建Apache Tomcat服务器来解决跨域.包括Apache Tomcat的下载.安装.环境变量的配 ...

  7. 针对list<object>中的对象数据的一些简单处理

    一    首先创建一个实体类(PersonData ): package hello; public class PersonData { String Id; String Name; String ...

  8. C# 与 C/C++ 网络传输字符串解决方案

    { 不管你的数据加没加密,只要有中文,请转16进制后再处理,把16进制再转为GB2312的byte再发送, 接收的话同样 c++ 发送时转16进制再发送,c#16进制转字符串后再转GB2312就可以了 ...

  9. delphi RTL是什么?

    第一种解释: RTL Run-Time Library,支持程序运行执行的函数库.是运行时间库,在运行时需要.Delphi的RTL包括System,SysUtils,Math三个单元RTL提供的大部分 ...

  10. 使用idea开发分布式项目中优化tomact的方法

    1. idea内存优化 找到idea安装目录,我的是在D:\IDEA\bin目录中 找到idea.exe.vmoptions和idea64.exe.vmoptions文件 这两个文件全部改成如下配置, ...