0

我需要帮助我正在处理的一个项目:假设所有输入没有特定顺序,我如何在嵌套集模型中计算左右。

分发了 4 张表格,每张表格带 4 人,每 4 人带另外 4 人。该网络向下增长直到 7 代。假设我决定选择任何级别的节点,我如何找到下线和上线?

     A
|    |   |   |
B    C   D   E 
             |
         ------------
         |   |   |   |
         F   G   H    J
         |
     ----------
     |   |  |  |
     W   X  Y  Z

解释:

A brings A B C D
E then brings F G H J
F brings WXYZ

等等等等。在第 7 代,我们经历了停顿。同时,每个节点开始一个沿袭下词。

4

1 回答 1

2

计算左右访问次数是一个迭代的程序操作。它不能在单个查询中完成,但您可以使用递归调用自身的单个过程来完成。

您的过程需要有两个参数:

  • 您正在处理的节点的 ID
  • 迄今为止使用的最高访问次数(下一个 LEFT 是 this + 1)

该过程需要返回它应用的最高访问次数(最后一个 RIGHT)。

在该过程中,您运行查询以查找具有给定 ID 的节点的所有子节点。如果它们是有序的,您可以相应地排序 - 或者您可以使用任意顺序。对于找到的每个孩子,设置左边的数字,然后在该孩子上递归调用该过程。当递归调用返回时,使用返回码设置正确的访问次数。

Joe Celko 在书中有一整章专门介绍如何聪明高效地计算访问次数。如果您的数据集非常大并且经常编辑,您可能需要阅读它 - 否则您可以在每次编辑节点列表时重新计算所有访问次数。

于 2012-04-28T12:49:02.147 回答