void programB(int n) {
long prod = 1;
for (int c=1;c<n;c=c*3)
prod = prod * c;
我不知道如何计算第3行代码的时间复杂度。是n ^ 3吗?
答案 0 :(得分:2)
如果你没有参加考试并且有足够的时间,我总是建议尝试一些数字:
n=10:
c = 1, 3, 9
n=20:
c = 1,3,9
n=30:
c=1,3,9,27
正如您所看到的,迭代次数不仅低于n^3
,还远小于n
。基本上你检查在这个循环中你可以在n
内乘以3的次数,这是我的提示。
答案 1 :(得分:0)
如果你有
void programB(int n) {
long prod = 1;
for (int c=1;c<=n;c=c+1)
prod = prod * c;
这将贯穿n
事物,因此是O(n)。
用
void programB(int n) {
long prod = 1;
for (int c=1;c<=n;c=c+1)
for (int c=1;c<=n;c=c+1)
prod = prod * c;
这会为每个n
事物运行n
项,给你O(n ^ 2)
要获得n ^ 3,您需要另一个for循环:
void programB(int n) {
long prod = 1;
for (int c=1;c<=n;c=c+1)
for (int c=1;c<=n;c=c+1)
for (int c=1;c<=n;c=c+1)
prod = prod * c;
你的案例没有完成所有n
事,因为它以c=c*3
的步长跳跃,给出了3的幂,如kabanus&#39;所示。回答:1,3,9,27 ......
这给你log_3 n或O(log(n)) - 因为基数并不重要。
答案 2 :(得分:0)
此for循环的时间复杂度为 log n base a
int n,a;
for(int c=1;c<n;c=c*a)
{
//Some code
}