performance - 在 for 循环中分析时间复杂度
问题描述
我想问为什么有些人说我们应该将 for 循环中的内容与n相乘,而其他人说我们必须与n相乘然后加上“1”,因为我们有停止语句,例如 i < n。
for(int i = 0 ; i < n ; i ++){
// Code
}
因此,有人说我们必须将Code
与“n”相乘,因为它重复 n 次,并让它像这样,所以我们将有 TimeInsideLoop n 次循环,即 O(n)。其他人说我们必须在乘法后加 1,因为最后 i 和 n 之间的最后比较i < n
会停止循环,所以我们将 TimeInsideLoop n+1 用于循环。
但我的问题是,如果我们想在计算时间复杂度时如此精确,为什么不添加 TimeInsideLoop*n + 2,因为我们i = 0
一开始就有。
因此,我们将//Code
TimeInsideLoop 与 n 相乘,因为它会发生n 次,然后对于最后一个比较,我们将添加另一个“1”,因为它是恒定时间,并且因为在循环开始时我们声明了一个新的变量i = 0
我们再加 1,所以我们会有 TimeInsideLoop*n+2。
解决方案
推荐阅读
- c# - 后台工作人员行为怪异?
- xaml - ItemsControl 各部分的完整列表是什么?
- linux - 如何开发仅在 Bash 脚本中更新日志文件时关闭程序的条件
- python - 为什么 Kivy 标签在另一个函数运行时不更新?
- c++ - 在 C++ 中采样 3 个整数而不进行替换
- java - Hibernate/JPA - 使用 IS NULL 比较时,UUID 的集合无法确定数据类型
- facebook - 谷歌登录无法在应用浏览器中的 Facebook 中工作
- brightway - 验证影响评估方法数据时的错误和区域特征因素的问题
- java - jboss如何像http://localhost:8088/plant/app/一样加载lnk?
- python - Python:chardet.detect 带有一个大的二进制对象