python - 递归算法的时间复杂度
问题描述
A 是一个 n×n 矩阵。考虑一个函数 algo(A),它返回:
def algo(A):
return algo(A[:n//2, :n//2]) + algo(A[:n//2, n//2:]) + algo(A[n//2:, :n//2]) + \
algo(A[n//2:, n//2:]) + A.transpose() * A
时间复杂度的公式为O(log(a*n) + n^b)
。问题要求解决a
和b
。我收集到由于矩阵乘法,b = 3。但是,什么是a?你能给我一个提示吗?谢谢!
解决方案
如果 的大小A
是N = n^2
,那么 的时间复杂度algo
就是T(N) = 4T(N/4) + N^1.5
乘法是在一个简单的情况下完成的(我的意思是我们可以使用更聪明的东西,比如 Strassen 算法)。现在,从主定理我们知道了T(N) = \Theta(N^1.5) = \Theta(n^3)
。
因此,a
可以是任何常数值。
推荐阅读
- php - yii2如何编写sql查询
- excel - VBA复制功能随机失败
- oracle - 如何维护 Sonar 表 PROJECT_MEASURES 的清理
- reactjs - 有没有办法在 react.js 应用程序中创建录像机,并可以在其中添加照片和文本?
- excel - VBA:ColumnWidth 不适用于第一列
- excel - 问题将英国日期转换为文本(返回美国格式)?
- sql - 更改列中的顺序
- python - 从终端启动脚本但不在解释器中时出现 ModuleNotFoundError
- html - next.js 中出现重复的 Css 和 Js 渲染问题
- python - Python的图形工具——用多处理计算自我网络