algorithm - 矩阵链乘法的蛮力方法的时间复杂度和空间复杂度是多少?
问题描述
我知道使用动态编程的时间复杂度和空间复杂度matrix chain multiplication
是 O(n^3) 和 O(n^2)。
但我想知道这个问题的蛮力方法的时间和空间复杂度,可以用下面的代码来实现。
def MatrixChainOrder(p, i, j):
if i == j:
return 0
_min = sys.maxsize
for k in range(i, j):
count = (MatrixChainOrder(p, i, k)
+ MatrixChainOrder(p, k + 1, j)
+ p[i-1] * p[k] * p[j])
if count < _min:
_min = count
# Return minimum count
return _min
#arr = [1, 2, 3, 4, 3]
#n = len(arr)
# p is array name
# i=1
#j= n-1
请详细说明...
解决方案
堆栈深度是线性的,因此空间使用也是线性的。
至于时间,我们得到一个复发
T(1) = 1
T(n) = sum_{k=1}^{n-1} (T(k) + T(n-k)) = 2 sum_{k=1}^{n-1} T(k).
我们可以验证解决方案是
T(1) = 1
T(n) = 2 (3^(n-1))
所以运行时间是 Θ(3 n )。
推荐阅读
- python - 将数据框设置为系列或显示第 n 个标签
- reactjs - 异步 Web 请求后 React js 状态为空
- ansible - 确定从任务返回的对象的返回类型
- java - 为不同的 JVM 版本创建 mulipul jar
- mongodb - 在mongodb中计算折扣
- javascript - Webpack 没有捆绑导入和使用的函数
- c# - 在 C# 中接受来自 URL 的特殊字符作为输入
- python-3.x - 从参数到读取文件的粘糊糊
- python - 将许多 python 文件从一个单独的文件夹导入到一个单独的其他 python 文件中
- javascript - 如何在 AgGrid 中使用反应图标?