java - while循环时间复杂度内的两个条件
问题描述
而(varz > deviceNum || varz == 0);
我有这段代码,我想测量它的时间复杂度,但我很困惑它是大 O(n) 还是 o(n^2),因为它里面有两个条件
解决方案
这取决于 while 循环内部的内容,以及此示例中“N”代表的内容。假设 N 是“equipmentnumz”并且在 while 内部不存在内部循环,这是一个 O(n) 算法。
相比之下,O(n)^2 将是一个嵌套循环(例如,另一个循环内部的循环)。例子:
while ($x < 1000):
while ($y < 1000):
y = y + 1
x = x + 1
O(n) 表示法本身与算法如何处理不断增加的数据集的行为有关。如果列表大小加倍,O(n) 算法的时间正好是两倍。如果将列表加倍,上面的示例将花费两倍的时间(实际上它会花费很多倍的时间)。因为所需的迭代次数为 n^2,所以这是一个 O(n^2) 算法。
什么是 O(n)?
O(n) 算法随数据集线性扩展。以下示例都是 O(n)。
# O(n) algorithm
while (number < 1000):
number = number + 1;
# Example 2. Also O(n)
while (number < 1000):
number = number * 2;
number = number / 2;
number = number + 1;
虽然第二个例子有更多的代码并且需要更长的执行时间,但如果你将 N 的大小加倍,它仍然只需要恰好两倍的时间。因此,它是 O(n),所需的时间与数据集的大小。
计算 O(n) 的实际过程比这篇文章能够充分涵盖的要复杂得多。这篇文章有一个很好的解释和更多的信息。(此页面也可能会有所帮助。它以更简单的术语解释了其背后的概念/理论。)
推荐阅读
- macros - 在宏中嵌套 eval 调用是不好的做法吗?
- android - 通过指定边界框实现地图下载
- google-cloud-platform - 如何使用谷歌云启动 Apache 网络服务器?
- c# - 如何使用 c# 将 system.io 流对象输入到 ffmpeg
- java - Java猜数字游戏(不带扫描仪)
- c++ - 传递大括号初始化器列表参数时调用可变参数函数模板的问题
- mysql - 更新整个表的奖金计算的 MySql 程序
- java - 如何将字符串转换为 Json/maps
- python - Django:AttributeError:'AdminSite'对象没有属性'reqister'
- powershell - 用于从现代团队网站隐藏默认 WebPart 的 PowerShell 脚本或 Typescript