python - 使用 Big (O) 进行时间复杂度分析
问题描述
arr = [1, 2, 5, 6, 7]
total = 0
for i in range(len(arr)):
total += sum(arr[i:])
上面代码的时间复杂度是O(n^2)还是O(n^3),因为列表arr的切片造成的混乱。那么切片 arr 是如何影响时间复杂度的呢?
解决方案
对列表进行切片是切片O(k)
的k
大小,在这种情况下四舍五入为O(n)
. 但是,在这种情况下,时间复杂度仍然是O(n^2)
,因为arr[i:]
与 是相加的sum()
,而不是相乘的。如果我们将其分解为两个单独的步骤,我们可以看到这一点:
for i in range(len(arr)): # executes n times
things_to_sum_over = arr[i:] # runs in (k -> n) time
total += sum(things_to_sum_over) # operates over (k -> n) elements
这给出了一个总数 n * 2(k -> n)
,或2n^2
= O(n^2)
。
推荐阅读
- php - 将外键添加到迁移(Laravel)
- java - 按名称排序列表
- c - 带有 sprintf 的环形缓冲区
- ios - 使用 _pb_ 方法的非公共 API 使用
- android - Scrollview 在注入到 AlertDialog 的布局中不起作用
- perl - 如何在 Perl 中分叉 30 个连接
- c# - 错误:IAsyncEnumerable 不能用于实体框架上 IEnumerable 类型的参数
- c# - 防止 Google Calendar API V3 更改事件时间 C#
- javascript - React useState(<>) 中是否有可能初始状态为空 div 或组件?
- flutter - 检测用户何时停止触摸屏幕