【问题标题】:Triangle stored as an array. Height and Length of each level?存储为数组的三角形。每个级别的高度和长度?
【发布时间】:2012-08-24 10:15:55
【问题描述】:

假设我们有一个三角形,每个节点都有 K 个孩子。

K = 2 的一个例子是:

  1
 2 3
4 5 6

K = 3 的一个例子是:

    1
  2 3 4
5 6 7 8 9

K = 4 的一个例子是:

        1
     2 3 4 5
  5 6 7 8 9 1 2

等等

  1. 我想将这些三角形存储在一个数组中。给定元素总数 T 和每个节点 K 的子节点数,我希望检索三角形的总高度(假设它们是完整的三角形)

  2. 我也在寻找数组中每个元素对每个孩子的偏移量。我知道对于上面 K = 2 的示例,数组是 [1, 2, 3, 4, 5, 6] ,其中每个级别 L 的偏移量是 L * (L + 1) / 2 (因为级别 1 有 1元素,2级有2个,3级有3个……)

编辑:这个例子是正确的。每个节点都可以访问 K 个子节点。对于 K = 3 1 可以访问 2 3 和 4。2 可以访问 5 6 和 7。3 可以访问 6 7 和 8。

这些是三角形,而不是图形或树。

【问题讨论】:

  • 您的示例不显示图表(您称为三角形),其中每个级别的 K 个节点对应于上一级的每个节点。请更准确地陈述您的问题。
  • 您能否再举一些例子(K = 4、5,甚至 1?)以使您的规则更清晰一点?
  • 你的例子正确吗?第二个例子的最后一行不应该有5 6 7 8 9 10 11 12 13的值吗?我猜你的数字是节点,你说每个节点都有K 孩子。
  • 我想他说的是每个节点,如果你觉得更像树的话,在第一个节点中,1 是第一个节点,它有 2 个孩子(2 和 3)2 有 2 个孩子,(4 和 5 ) 和 3 有 2 个孩子 (5 & 6).. 所以,如果孩子是 3,1 有,2 3 4,2 有 5 6 7,3 有 6 7 8,4 有 7 8 9 ....跨度>
  • 当您达到 K = 4 时,兄弟姐妹之间是否共享“他们的”4 个孩子中的 2 个或 3 个?

标签: c# arrays algorithm data-structures


【解决方案1】:

既然您已经阐明了您的要求...

对于 K=2 有

1
1+1
1+1+1
...

每个级别中的元素,这是系列1,2,3,.... 如果n 是级别编号,那么每个级别都有n 元素。注意这也可以写成1+1(n-1)

对于 K=3 有

1
1+2
1+2+2
...

每个级别的元素,这是系列1,3,5,...;每个级别都有1+2(n-1) 元素。

对于 K=4 有

1
1+3
1+3+3
...

每个级别的元素,这是系列1,4,7,...。每个级别都有1+3(n-1) 元素。

在每个三角形的每一层都有1+(K-1)(n-1) 元素。我希望你能从这里继续。

【讨论】:

  • 实际上问题更像是在给定当前级别 N 和每个节点 K 的当前子节点数的情况下,所有先前级别中有多少个数字
  • 我知道 K = 2 它的 N * (N + 1) / 2
【解决方案2】:

高度为h 的三角形的元素总数T 将为:

T = ∑1...h (1 + (K-1)(n-1))
T = h + (K-1) * ∑1...h (n-1)
T = h + (K-1) * ∑0..h-1 (n)
T = h + (K-1) * ((h-1)² + h-1) / 2
T = h + (K-1) * (h² + 1 - 2h + h-1) / 2
T = h + (K-1) * (h² - h) / 2

计算高度

所以要获得高度h,您插入K 的值并求解方程。这是一个简单的例子,K 等于 3。

T = h + (K-1) * (h² - h) / 2
T = h + (3-1) * (h² - h) / 2
T = h + (h² - h)
T = h²
h = √T

计算偏移量

至于偏移量,您使用与我们计算元素总数相同的公式,但将 h 设置为 height-1。这是一个获取三角形中第 3 行偏移量的示例,该三角形的 K 为 4。

偏移量(h) = h-1 + (K-1) * ((h-1)² - (h-1)) / 2
偏移量 em>(3) = 3-1 + (4-1) * ((3-1)² - (3-1)) / 2
偏移量(3) = 2 + 3 * (4 - 2) / 2
偏移量(3) = 5

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 2022-01-07
    • 2015-08-08
    • 1970-01-01
    • 2019-09-07
    • 2023-01-30
    相关资源
    最近更新 更多