algorithm - 如果通过对变量进行平方来增加内部循环,它的运行时间将是多少以及如何?
问题描述
假设这里的 n 是小于 256 的任何数字,则内循环将 4 次为真,现在随着 n 的增加,内循环遵循什么样的序列。
for ( int i=1; i<=n; i++){
for ( int j=2;j<=n; j=j*j){
}
}
解决方案
外部循环将被迭代n
次数。内部循环每次都将前一个值平方,即2 + 2^2 + 2^4 + 2^8 + ... + 2^{2^k}
. 因此,时间复杂度为n * k
。为了计算k
,我们需要找到k
这样的n = 2 + 2^2 + 2^4 + 2^8 + ... + 2^{2^k}
:
2 + 2^2 + 2^4 + 2^8 + ... + 2^{2^k} = sum_{t=0}^{k} 2^{2^t} = n
=> k = \theta(log(log(n))
因此,时间复杂度 if Theta(n log(log(n)))
。
推荐阅读
- git - 将 datalad 与 Google Cloud Storage 结合使用
- javascript - 在heroku上部署我的模型后无法在canvas html上绘图
- performance - OMNET++ 中的最大移动速度
- python - 以特定格式在列表中插入项目
- javascript - 使用 fetch 修复 CORS 问题
- python - pandas 统计过去 7 天的总数,但 groupby 的日期不同
- r - 在闪亮的 selectInput 小部件下拉选项中使用表情符号
- mariadb - CentOS 7:MariaDB 服务:无法启动
- java - 在可执行 Jar 中找不到路径
- python - Django Heroku,无法访问此站点,响应时间过长