【发布时间】:2021-10-19 17:18:39
【问题描述】:
j = n;
while (j>=1) {
i = j;
while (i <= n) { cout<<"Printed"; i*= 2; }
j /= 2;
}
我的目标是找到 T(n)(为我们提供算法执行次数的函数),其顺序预计为 n.log(n),但我需要至少在 n=1 到 n 时可以正常工作的精确函数=10 个数据
我尝试过预测函数,最后以 *T(n) = floor((n-1)log(n)) + n结束>
仅适用于 n=1 和 n=2。
我应该提一下,通过将原始代码转换为 for 循环,我发现该函数不准确,如下所示:
for ( j = 1 ; j <= n ; j*= 2) {
for ( i = j ; i<= n ; i*=2 ) {
cout << "Printed";
}
}
最后,感谢您提前找到确切的 T(n) 的帮助。 ????
【问题讨论】:
-
我编辑了您的帖子以提高可读性。我想知道:在您的第一个和第二个示例中,
i和j的类型是什么? -
@GuillaumeRacicot ,问题中没有提到它,所以考虑它是短整数和 10 Q 4 版本
-
@GuillaumeRacicot 和两种算法都做同样的事情,只是语法不同,所以我可以使用 log rep 公式
-
内部循环执行 log(j) 次。外部循环执行 log(n) 次。由于 j ≤ n,可以安全地得出 T(n) = O((log n)²) 的结论,尽管证明 T(n) = Θ((log n)²) 可能需要更多的工作。跨度>
标签: c++ for-loop data-structures time-complexity complexity-theory