python - Python - 嵌套列表中二进制搜索算法的时间复杂度
问题描述
我有一个嵌套的数字列表,其中有 n 行和列,并且每个数字在每一行和每一列中都在增加。
例如:
A = [[19, 30, 31, 45, 57],
[25, 32, 32, 51, 69],
[33, 35, 38, 58, 78],
[34, 49, 67, 84, 102],
[44, 54, 73, 90, 115]]
我需要使用二进制搜索来查找一个元素是否在列表中,并且算法最坏情况下的时间复杂度必须为 O(n)。
我有这个代码:
def find(A, v):
i = 0
for row in A:
num = binary_search(v, row, 0, len(row) - 1)
if num != -1:
return(i, num)
i += 1
return None
def binary_search(v, row, left, right):
if left > right:
return -1
mid = (left + right) // 2
if row[mid] == v:
return mid
elif row[mid] > v:
return binary_search(v, row, left, mid - 1)
elif row[mid] < v:
return binary_search(v, row, mid + 1, right)
我认为这段代码的时间复杂度为 O(n log n),但我不太确定。那么这段代码的实时复杂度是多少呢?
解决方案
推荐阅读
- html - 在 CSS 中动态格式化样式
- sql - 使用数据样式 NULL 转换为 int
- memory-management - 在 Linux、windows 和 OX 中绕过内存管理系统
- java - 在 CodeDeploy 中访问 CodeBuild 运行时
- python - 有没有办法将会话从 python 传输到浏览器?
- javascript - 获取错误在控制台中提供了比在 catch 方法中更多的错误信息
- javascript - 使用钩子(setState,useEffect)从屏幕中提取重复代码的最佳方法?
- scala - 通过 slick codegen 导入从另一个项目构建的依赖项时,“对象不是包的成员”
- python - 如何在 pytest 会话结束时清理资源?
- sql - 为什么我的 WHERE 子句会影响我的 LEFT JOIN?