是否递归地构造了一个四叉树?

时间:2017-09-15 15:23:55

标签: algorithm recursion complexity-theory

考虑以下算法:

Given a list POINTS of length N containing points in the interior of a square, do:

if N=0 or 1, stop
else, divide the square into 4 subsquares and repeat the above on each subsquare

每个方块由一个节点表示,该节点与其相关联两条信息:列表 points_contained 存储广场中包含的POINTS点,以及列表 children 指向其他节点;因此 children 是空的或有4个元素。因此,上述算法生成一个四叉树,其中外部节点(叶子)表示包含最多1个点的点的正方形。

构造树的最简单方法是按字面意思遵循上述算法并在每个子方格上进行递归(一旦计算出4个子树,它们的根就成为原始方块的子项)。因此,复杂性将满足像C这样的东西( n)= 4 * C(n / 4)因此具有复杂度O(n)。

一个更智能的方法是从一个空方块(原始方块,它是根节点)开始,并为其添加点,根据需要创建子方形:

for each P in POINTS, do: add_point(P,original_square)

我们调用了函数

add_point(point, square):
  if square.points_contained is empty, add to it P
  is square.children is nonempty:
        find which subsquare s of square contains P then do add_point(P,s)
  if square.children empty: 
  '''*necessarily in this case square is an external node and contains exactly 1 point Q other than P*'''
      continue creating dividing into subsquares until P,Q are no longer contained in the same square

第二种方法据说比第一种方法好,但为什么呢?它在计算上还是在记忆方面更便宜?

0 个答案:

没有答案