我在课堂评论中遇到了这个问题,我很难理解教授的理由和对解决方案的解释。 问题: 以下代码计算给定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
我不理解“因此”部分。如果有人可以为我打破这些步骤,并描述这些步骤是如何相同的,那将是一个很大的帮助。
答案 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)规则,在
然后,您注意到如果要评估 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))