三角形存储为数组。每个级别的高度和长度?

时间:2012-08-24 10:15:56

标签: c# arrays algorithm data-structures

假设我们有一个三角形,每个节点都有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 ...)

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

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

2 个答案:

答案 0 :(得分: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)个元素。我希望你能从这里继续。

答案 1 :(得分:0)

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

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)2 + h-1)/ 2
T = h +(K-1)*(h 2 + 1 - 2h + h-1)/ 2
T = h +(K-1)*(h 2 -h)/ 2

计算高度

因此,要获得高度h,请插入K的值并求解等式。以下是K等于3的简单案例示例。

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

计算偏移量

对于偏移量,您使用的是我们用于计算元素总数的相同方程式,但将h设置为height-1。以下是在K为4的三角形中获取第3行的偏移量的示例。

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