Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在数据库中存储金字塔结构_Node.js_Algorithm - Fatal编程技术网

Node.js 如何在数据库中存储金字塔结构

Node.js 如何在数据库中存储金字塔结构,node.js,algorithm,Node.js,Algorithm,我想在数据库中存储金字塔结构,最好是像NoSQL一样mongodb 所以如果我有一个如下的结构 0 0 0 <-tier 2 0 0 0 <-tier 1 0 0如果金字塔结构是规则的,则可以在不浪费空间的情况下将每个元素存储在数组中,并且仍然可以从元素的位置计算出元素在数组中的位置,反之亦然 如果每行中的元素数为1,2,3,4,5。。。如图所示,前n行中的元素数(从1开始计数)为1+2+3+…n=n(n+1)/2(这只是算术级数的总和)。再次从1开

我想在数据库中存储金字塔结构,最好是像NoSQL一样
mongodb

所以如果我有一个如下的结构

    0
  0   0    <-tier 2
0   0   0  <-tier 1
0

0如果金字塔结构是规则的,则可以在不浪费空间的情况下将每个元素存储在数组中,并且仍然可以从元素的位置计算出元素在数组中的位置,反之亦然


如果每行中的元素数为1,2,3,4,5。。。如图所示,前n行中的元素数(从1开始计数)为1+2+3+…n=n(n+1)/2(这只是算术级数的总和)。再次从1开始计数,第j行中的元素i位于从j(j+1)/2+i-2的零开始计数的阵列偏移量处。要从数组偏移量中找到行号,可以使用二进制切分。

哦,我明白了,但是如果金字塔结构可能不是规则的呢?比如说,它可能真的扩展到金字塔的左侧,但在金字塔的右侧没有那么多?如果我使用数组,我也必须填充空白。此外,计算效率似乎与每个节点存储其父节点的对象id并向上层叠相同?如果您有一个规则结构,您就知道需要检索哪些偏移量,而不必遵循指针。如果跟随指针比计算偏移量更昂贵(例如,如果跟随db中的指针意味着访问外部存储),那么这是一个优势。如果结构不规则,有一些策略可以使用相当标准的SQL,但问题很严重,一些数据库将其视为特例-