【问题标题】:Recurrence Analysis (Time complexity)递归分析(时间复杂度)
【发布时间】:2020-09-19 02:21:45
【问题描述】:

我正在编写一个布尔函数来计算两个二叉树是否相同。 让我们看看程序:

boolean func(Node head1 , Node head2){
if(head1 == null || head2 == null) return head1 == null && head2 == null;
return func(head1.left , head2.left) && (head1.right,head2.right);
}

我知道在最坏的情况下,程序会检查 n 元素,因此它的 O(n)。 我想在 T(n) 中描述这个递归函数。 我不知道要开始,因为我不知道停止点的价值是多少, 我认为函数是 T(n,m) = 2*t(n-1,m-1) + n + m。

【问题讨论】:

    标签: recursion time-complexity recurrence


    【解决方案1】:

    n 为二叉树中的节点数。如果二叉树有不同数量的节点,那么n 会小于这两种大小(因为一旦到达一棵树的末端就会停止比较)。

    在每次调用时,您都会在树的节点之间进行一些比较。这将是一个常数时间,所以你可以调用这个时间花费d,它代表一些任意常数。

    最后,您正在对当前节点的 2 个子节点进行 2 次递归调用。请注意,在最坏的情况下,每个孩子都是一个子树的根,它拥有树中节点总数的一半。换句话说,如果您有一棵带有n 节点的树,并且您正在查看根节点,那么根的每个子节点在它下面大约有 n/2 个节点(包括它)。

    所以你的重复如下:

    T(n) = 2*T((n-1)/2) + d

    您可以将其简化为:

    T(n) = 2*T(n/2) + d

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-29
      • 1970-01-01
      • 2022-06-22
      • 2022-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多