圆形划分区域(空间)
一道阿里的笔试题目(大意):一个平面空间内,使用一个圆形将空间划分,例如一个圆形将空间划分为两个区域(包括圆外面的),两个圆形最多可以划分4个区域;三个圆最多可以划分8个,4个圆可最多划分14个;。。。。。
一开始,思路:由新增的圆去切割现有的区域,考虑如何才可以切割最多区域。但是,当区域成倍的增加,图形过于复杂,搅乱思路;忽想编程之美的一道题目“光线切割区域”的思路;
考虑其相交的点入手。
首先考虑两个圆最多只能有两个交点;
假设现有 n-1个圆,区域数为 f(n-1);
现在填多一个圆进去,那么这个圆最多和所有的(n-1个)圆最多就有2*(n-1)个交点,即是说:
这个圆被2*(n-1)个交点分成了2*(n-1)段弧;关键就在这里,每一段弧就意味在其将某个空间一分为二;
这样,新添了这个圆之后将会在之前的基础上添加了2*(n-1)个区域;即f(n) = f(n-1) + 2*(n-1);
考虑边界条件,得:
f(n) = { 2 ; n=1
{ f(n-1)+ 2*(n-1); n=2,3,4...
化简一下(化为一般式):
f(n) = n^2 -n + 2;
毕