版权声明:本文为博主原创文章,未经博主允许可以转载,但要注明出处 https://blog.csdn.net/wang3312362136/article/details/83003126
问题
一个平面内的
n个点,以这
n个点为顶点,最多能构成多少个矩形?点的排列是自己决定的。
先说结论:构成矩形的个数,上界是
O(n2n
),下界是
Ω(n2)。
上界
记
Ca,b表示
a,b为直径的圆。
对于每一个点
pi,如果
pa,pb,pc,pd能构成一个矩形,当且仅当
Cpa,pc=Cpb,pd。
记
di为
Ci上相反的点对个数,就是说
di=∣{(pj,pk)∣Ci=Cpj,pk}∣。
可以得出,矩形个数就是
∑i=1m2di×(di−1),
∑i=1mdi=2n×(n−1)。
我们假设
d1≥d2≥⋯≥dn。记
k满足
dk>2n
,dk+1≤2n
,由于两圆只可能交于两点,因此可以得到
k≤n
。
证明:如果
k>n
,那么可以发现点的个数
≥∑i=1k(2di−2(i−1))>4kn
−k(k−1)>4n−n+n
>n,因此
k必定
≤n
。
那么矩形个数就是
i=1∑m2di×(di−1)≤i=1∑mdi2=i=1∑kdi2+i=k+1∑mdi2≤i=1∑n
di2+i=1∑n(2n
)2≤i=1∑n
(2n)2+4n2=O(n2n
)
因此,
n个点能够构成的矩形个数的上界是
O(n2n
)。
下界
构造一个网格,边长为
n
,每选择两个点,必定能构成一个边平行于坐标轴的矩形,这样的矩形个数显然是
Ω(n2)。显然还有可能其他的矩形,这里不做考虑。