【问题标题】:Finding the total number of configurations by forming triangles in N clockwise points通过在 N 个顺时针点中形成三角形来查找配置的总数
【发布时间】:2015-03-02 00:41:58
【问题描述】:

有固定的 N 个点,编号为 1 到 N,按顺时针方向在一个圆圈内。 我们想通过选择任意三个点来创建三角形。

我们可以创建尽可能多的三角形,但没有两个三角形应该相互交叉,一个点只能共享一个三角形。那么有多少种这样的配置是可能的?

比如设10个点:

  • 点 1,2,3 可以创建一个三角形,如果只有这个三角形存在,它将是一种配置。
  • 只有三角形 (2,3,4) 是其他配置。
  • 三角形 (1,2,3) 和 (4,5,6) 将形成其他配置。
  • (2,4,5)也可以是三角形
  • (2,4,5) 和 (1,3,6) 不能是一个配置,因为两个圆圈会相互交叉。

我可以部分解决:

  • 对于只有一个三角形,我们可以以 nC3 方式选择任意三个点并创建一个三角形。
  • 对于两个三角形,我们可以选择 nC6 方式中的任意六个点,并且可以通过 3 方式形成两个三角形

我无法解决更多数量的三角形。

【问题讨论】:

    标签: math geometry combinations


    【解决方案1】:

    出于以下考虑,我也想将“根本没有三角形”视为有效配置。你可以在最后减去一个来摆脱它。

    所以递归地考虑这个问题。给定 n 个点,你有两种选择:要么选择“根本没有三角形”并返回,要么选择三个点形成一个三角形,然后递归。如果您有三个角,它们会将您的圆圈分成三个范围。所有后续三角形都必须具有来自单个范围的角,否则它们会重叠。如果您将它们限制在其中一个范围内,它们将不会与您的第一个三角形相交。对于递归,您可以将这些范围中的每一个都视为一个小圆圈(自己检查关于交叉点的语句在那里仍然有效)。

    好的,上面将生成所有可能的有序三角形序列。如果您不关心顺序,则必须以某种方式消除它。一种可能性是将每个计数除以 n!,其中 n 是最终生成的三角形的数量。另一种方法是固定三角形的完整顺序(即按最小角索引排序),并确保递归永远不会生成比之前选择的三角形的三角形。

    有了这些想法,您应该能够编写一个小脚本来枚举几个点的三角形配置。您甚至可以手动检查一些案例。也许拥有该脚本就足够了。如果没有,您可以将该序列(由于“根本没有三角形”而带有或不带有偏移量)提供给the On-Line Encyclopedia of Integer Sequences™,看看他们是否有适合您的公式。或者自己找一个,可能在generating function 的帮助下。如果一切都失败了,你可能想把它带到Math SE

    编辑:
    除非我在实现自己的小脚本时出错,否则您要求的序列(包括“根本没有三角形”实例)是 OEIS A071879。还有一个公式。我使用以下 Python 代码生成了该序列:

    c = [1, 1, 1]
    for n in range(3, 30):
        s = 1
        for i1 in range(0, n - 2):
            for i2 in range(i1 + 1, n - 1):
                for i3 in range(i2 + 1, n):
                    s += c[i2 - i1 - 1]*c[i3 - i2 - 1]*c[n - i3 - 1]
        assert len(c) == n
        c.append(s)
        print(s)
    

    【讨论】:

    • 我没有想到递归。我会尝试的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 2010-12-21
    相关资源
    最近更新 更多