Data structures 数字墙的数据结构

Data structures 数字墙的数据结构,data-structures,Data Structures,我想知道数字墙的好数据结构是什么。两个邻居加起来等于他们上面的数字。请看附件中的图片 首先,我想说它是一个图形,因为其中一部分涉及到to项。但它可能是复杂的搜索。第二个想法是使用一棵树,将一片叶子/节点加倍 最后,我需要自下而上填充墙,并将某些阴影遮罩(图案)应用于未填充节点和树叶。所以在最后,我需要找到直接的邻居和他们的父母来填写表格 你觉得怎么样?我可以推荐一个向量的向量吗? i、 e.元素向量,使得索引i处的元素本身是大小i的向量 考虑到墙的底行将有n编号 创造 创建n元素的向量V,其

我想知道数字墙的好数据结构是什么。两个邻居加起来等于他们上面的数字。请看附件中的图片

首先,我想说它是一个图形,因为其中一部分涉及到to项。但它可能是复杂的搜索。第二个想法是使用一棵树,将一片叶子/节点加倍

最后,我需要自下而上填充墙,并将某些阴影遮罩(图案)应用于未填充节点和树叶。所以在最后,我需要找到直接的邻居和他们的父母来填写表格


你觉得怎么样?

我可以推荐一个向量的向量吗? i、 e.元素向量,使得索引
i
处的元素本身是大小
i
的向量

考虑到墙的底行将有
n
编号

创造
  • 创建
    n
    元素的向量
    V
    ,其中索引
    i
    处的元素本身就是大小
    i
  • 使用起始元素将底部行向量(
    V[n-1][0]
    中的每个索引分配给
    V[n-1][n-1]
  • 给定行
    i
    中每个元素
    j
    的值可以用一个简单的公式计算:

    V[i][j] = V[i+1][j] + V[i+1][j+1]
    
  • 这允许您使用两个for循环填充结构的其余部分(从第二行到底行一直到顶部):

    for (i = size(V)-2; i >= 0; i--) // starting with the second-to-bottom row
        for (j = 0; j < size(V[i]); j++)
            V[i][j] = V[i+1][j] + V[i+1][j+1]
    
    for(i=size(V)-2;i>=0;i--)//从倒数第二行开始
    对于(j=0;j
更新 上面的for循环可以理解为数据结构的更新步骤,在底层行元素更改时运行

延伸 通过简单地添加一个大小为
n+1
的向量作为新行
V[n+1]
并执行更新步骤,可以扩展此结构

通道 给定任何元素
V[i][j]

  • 它正好有两个子项
    V[i+1][j]
    V[i+1][j+1]
    (当然,除非它在最下面一行)
  • 它至少有1个(顶部元素除外)和最多2个父元素
    • V[i-1][j]
    • V[i-1][j-1]

好的结构取决于您想如何使用它。你需要定义一些你想要的常用操作,然后决定你需要使用什么样的数据结构。谢谢@XiaotianPei。我添加了一些注释。我在考虑中忽略了这个简单的解决方案。谢谢你!