data-structures - 以下算法的时间复杂度如何为0(n^2)
问题描述
所以我是一个学习时间复杂度的初学者,如果有人能解释一下:
For (i := 0; i < n; i = i + 1)
For (j := i; j < n; j = j + 1)
时间复杂度为O(n 2 ),我知道这是n次工作,但是如何?另外,如果您能告诉我是什么意思,那就太好了。:=
解决方案
让我们稍微修改一下代码:
x = 0
For (i := 0; i < n; i = i + 1) //it says: let i be 1, 2, ..., until n - 1
For (j := i; j < n; j = j + 1) //it says: let j be i, i+1, ..., until n - 1
x = x + 1
的价值x
是多少?
For
很容易计算第二个将运行多少次。
它从 0 开始到 n-1,然后从 1 到 n-1,从 2 到 n-1,...,从 n-1 到 n-1。所以这意味着,在操作中:
0 1 2 ... (n-1) = (n-1) - 0 + 1 operations = n operations
1 2 ..... (n-1) = (n-1) - 1 + 1 operations = (n - 1) operations
2 ........ (n-1) = (n-1) - 2 + 1 operations = (n - 2) operations
.
.
.
(n-1) = 1 operation
___________________
(1 + 2 + 3 + ... + n)
= (n + 1) * (n / 2)
= (n² + n)/2 operations
我们可以看到这些For
累加(n² + n)/2
运算,所以x = (n² + n)/2
.
在复杂性分析中,我们遵循一些规则。我将描述在这种情况下有用的那些:
1
删除乘法常数:
O((n² + n)/2) = O(0.5 * (n² + n)) = O(n² + n)
其背后的理论是,当n
变为无穷大时,这些常数不会对函数的行为产生影响。
2
删除具有较低功率等级的项:
O(n² + n) = O(n²)
其背后的理论是,具有最大功率等级的变量(n²
在这种情况下)支配着函数的行为,而不是具有最低等级的变量。
这就是为什么我们可以说这些嵌套循环的复杂度是 O(n²)。
推荐阅读
- python - 尝试传递一个字符串以通过 Django Rest Framework url 进行查询
- c - 独占加载和存储臂指令会引发死锁吗?
- react-native - StackNavigator this.props.navigation 缓存
- java - 可执行 Jar:无法加载 main(但 main 在 ANT xml 中)
- python - 查询字符串参数一天变化几次-需要python解决方案中的requests.get
- c++ - 如何删除数组中所有具有元音的元素[C++]
- linux - 如何在 yocto 的私人仓库中存储下载文件夹
- android - AlertDialog 中的资源 ID #0x0
- postgresql-9.5 - 如何根据时间戳从单个列中检索日期
- php - PHPExcel 在剩余代码执行停止后下载?