python - 使用内置函数的这个函数的时间复杂度是多少?
问题描述
假设您有以下compute
函数,使用 python 内置sum
函数:
def compute(a_list):
for i in range(0, n): #Line 1
number = sum(a_list[0:i + 1])/(i+1) #Line 2
return number
像这样的事情的时间复杂度是什么样的?
Line 1
执行 n 次,但是Line 2
,具有内置sum
函数 (O(n)),它会执行 n^2 次吗?因此算法将是 O(n^2)。
对于 i 的每次迭代,Line 2
执行 1 + 2 + 3 + ... + n-2 + n-1 + n。这些项的总和是
这个对吗?
解决方案
我会说第 1 行执行一次,这会导致第 2 行执行n
多次。列表下标是O(n),sum
也是O(n)。除法,加法和赋值都是O(1)。
compute
因此是 O(N^2),因为最大的项正在评估 O(n) 操作 O(n) 次。
请注意,正如所写,它会丢弃所有中间结果,因此可以将其重写为:
def compute(a_list):
return sum(a_list[0:n])/n
这将是 O(n)。
推荐阅读
- python - 如何从列表中获取一个值,然后在基本数学方程式中使用它?
- android - 进度条未显示在工具栏内
- pandas - 在存储在 SPARK Dataframe 中的数据上应用 sklearn 库中的 SVM 分类器的多类版本
- https - jmeter中的ERR_SSL_PROTOCOL_ERROR
- ansible - Ansible 剧本无法选择 openshift
- php - 如何在 PHP Post 方法中返回/获取列表?
- r - 使用减号删除变量和选择那些想要的变量有什么区别?
- python - 从随机数中选择所有数字的概率是否相等?
- javascript - 使用下拉菜单动态更改条形图
- ios - 如何在响应所有设备的 react-native 应用程序中设置 marginLeft 和 marginRight