time-complexity - 半尺寸嵌套循环的时间复杂度
问题描述
void function(int n)
{
int count = 0;
// outer loop
for (int i=n/2; i<=n; i++)
// middle loop
for (int j=1; j+n/2<=n; j = j++)
// inner loop executes log n times
for (int k=1; k<=n; k = k * 2)
count++;
}
我正在做一些练习,有人可以帮我弄清楚上述算法的 Big-Oh 吗?我知道最里面的循环执行 log n 次。最外层循环和中间循环呢?那也是 log n 还是 n/2 ?
解决方案
假设您的代码完全缩进是这样的:
void function(int n)
{
int count = 0;
// outer loop
for (int i=n/2; i<=n; i++){
// middle loop
for (int j=1; j+n/2<=n; j++){
// inner loop executes log n times
for (int k=1; k<=n; k = k * 2){
count++;
}
}
}
}
时间复杂度可以计算如下:
- 最里面的循环执行(log n)次,所以它的复杂度是O(log n)。
- 以 j 作为循环变量的中间循环执行 n / 2 次,最里面的循环执行,每次都在其迭代中。因此,中间循环的时间复杂度为(n / 2) * O(log n) = O(n * log n)。
- 类似地,最外层循环也执行(n / 2)次,中间循环在每次迭代中完全执行。因此,它的时间复杂度将是(n / 2) * O(n * log n) = O(n * n * log n)。
因此,整体时间复杂度将为O(n^2 * log n)。
推荐阅读
- java - 有什么方法可以提高以下代码的性能?
- python-3.x - 有人可以解释如何将 Python 列表中的所有元素大写吗?
- html - 我应该移动哪个 CSS 属性来回退按钮
- python - 在 For 循环中打印编织列表中的项目
- python - 抓取基于 js 的网站以获取从 python 下载的 javascript 生成的 .csv
- python - 过滤多个 df 列,其中任何列或无列 = 值
- python - OpenCV python不显示转换为OpenCV关键点格式的python包装的Cuda SIFT关键点
- json - 在范围内找不到“LocationsData”
- python - 使用numpy在矩阵中划分一行
- excel - 将 Excel VBA 中的超链接添加到 Outlook 约会