递归代码的复杂性

时间:2017-12-06 01:11:18

标签: algorithm recursion time-complexity

我在课堂评论中遇到了这个问题,我很难理解教授的理由和对解决方案的解释。 问题: 以下代码计算给定n的2 ^ n。确定执行的总行数。证明你的答案。

    Power2(int n)       
    1) if(n=0)
    2)     return 1
    3) else
    4)     k=Power2(n/2)
    5)     k=k*k;
    6)     if(k is even) 
    7)       return k
    8)     else
    9)       return 2*k

理由 The professor's explanation

我不理解“因此”部分。如果有人可以为我打破这些步骤,并描述这些步骤是如何相同的,那将是一个很大的帮助。

2 个答案:

答案 0 :(得分:0)

t(2^k) =                //this is because 2^k is even so
[t(2^(k-1))] + 1        //you apply the first rule for t(n)
t(2^(k-1)) + 1 =        //note that 2^(k-1) is also even
[t(2^(k-2)) + 1] + 1    //so you apply the same t(n) rule

每个2 ^(i = 0 ... k)将是偶数(除了2 ^ 0),因此您可以对所有步骤应用第一个t(n)规则,在 k-1 步骤。

然后,您注意到如果要评估 t(2 ^ k),则必须执行 k 操作, k = lg(2) ^ k),所以Power2是一个对数时间函数,

答案 1 :(得分:0)

$years = $wpdb->get_results( "SELECT YEAR(post_date) AS year FROM wp_posts WHERE post_type = 'post' AND post_status = 'publish' GROUP BY year DESC" ); foreach ( $years as $year ) { // get posts for each year $posts_this_year = $wpdb->get_results( "SELECT * FROM wp_posts WHERE post_type = 'post' AND post_status = 'publish' AND YEAR(post_date) = '" . $year->year . "'" ); echo '<h2>' . $year->year . '</h2><ul>'; foreach ( $posts_this_year as $post ) { echo '<li>' . $post->post_title . '</li>'; } echo '</ul>'; }错误,应该阅读7)

关于7) if (n is even)部分,他们采取

  

n = 2 k

并显示 k 次迭代。然而,从上面的等式我们得到

  

k = log 2 (n)

因此 k 迭代具有 log 2 (n)次迭代。

算法是 O(log(n))