zoukankan      html  css  js  c++  java
  • 分圆问题:一个诡异的数列规律

    问题

    在圆上任取$n$个点,将每对点用直线连接起来,并规定任意三条线不能交于同一点,这些直线会将圆分割成多少份?

    首先我们列出简单情况来寻找规律:

    • 2个点将圆分成2份
    • 3个点将圆分成4份
    • 4个点将圆分成8份
    • 5个点将圆分成16份

    看来这个数列的规律非常明显:每增加一个点,分割的份数都将乘2。然而,当点数增加到6个的时候,分割的份数不是我们预料的32,而是31。

    为了找到这个数列的通项公式,我们使用欧拉示性数公式(Euler’s Characteristic Formula)来进行推导:

    $$V-E+F=2$$

    这个公式的意思是,在任何联通平面简单图中,顶点数减边数加上面数等于2。

    为了利用这个公式得到分割的份数(即为面数),我们需要先求出顶点和边的数量。

    首先求顶点数:圆内的每个交点都对应圆上的4个点交叉相连,因此圆内的交点共有$C_n^4$个,加上圆上的$n$个点,因此$V=n+C_n^4$。

    再求边数:圆内的那个交点的度数(度数是与点相连的边的个数)为4,圆上的点都与除此之外的每个点相连,因此度数是$n-1$,所以总度数为$4*C_n^4+n*(n-1)$,由于每条边对于总度数的贡献为2,再加上连接圆上顶点的弦的数目,最后得边的数量$E=2*C_n^4+C_n^2+n$。

    将结果带入欧拉公式,并考虑园外区域也算一个面,则分割的份数为:

    $$egin{aligned}
    F-1 &= E-V+2-1 \
    &= (2*C_n^4+C_n^2+n)-(n+C_n^4)+1 \
    &= C_n^4+C_n^2+1
    end{aligned}$$

    由排列组合公式,上式可以继续分解:

    $$C_n^4+C_n^2+1 = C_{n-1}^4+C_{n-1}^3+C_{n-1}^2+C_{n-1}^1+C_{n-1}^0$$

    这也就解释了当$n<6$时结果总是成2的幂。

    参考链接:

  • 相关阅读:
    Nginx进阶使用-负载均衡原理及配置实例
    代理服务技术-正向代理、方向代理、透明代理简析
    Docker入门教程-Linux环境安装Nginx及入门使用
    Mybatis进阶使用-一级缓存与二级缓存
    结对第2次作业——WordCount进阶需求
    团队展示
    原型设计(顶会热词统计)
    C++读取文件统计单词个数及频率
    软工实践第一次作业
    课程作业八
  • 原文地址:https://www.cnblogs.com/lfri/p/10329711.html
Copyright © 2011-2022 走看看