【问题标题】:Optimize nested for loops - Dynamic Programming优化嵌套 for 循环 - 动态编程
【发布时间】:2020-08-09 18:04:28
【问题描述】:

您好,我有一个简单的代码 sn-p,我在其中查找任意两个给定字符串 X 和 Y 之间所有公共子序列的长度。

m = len(X)
n = len(Y)
ACS = np.zeros([m+1, n+1], dtype = int)

#Computes lengths of ACS(All common substrings)

for i in range(m+1):
    for j in range(n+1):
        if X[i - 1] == Y[j - 1]:
            ACS[i][j] = ACS[i - 1][j - 1] + 1
        else:
            ACS[i][j] = 0

嵌套循环很简单,只要在索引 i-1 和 j-1 处的两个字符串之间找到匹配项,它就会在 ACS 数组的 i,j 索引处添加 1,否则将其替换为零。

我的问题是使用 numpy 的数学函数可以更快地完成吗?

【问题讨论】:

  • 如果您使用的是特定算法,也请提及

标签: python numpy dynamic-programming


【解决方案1】:

由于您已经在填充大小为m*n 的数组,因此它至少需要m*n 操作。您的循环也在O(m*n) 中运行。所以不可能再优化了。

【讨论】:

  • 我认为 OP 知道这一点,并没有询问时间复杂度的改进。 Numpy 提供了优化的向量化方法,不是从时间复杂度的角度来看,而是从低级速度的角度来看(优化缓存和内存布局,向量化操作等)。现有的循环完全在 CPython 空间中,没有利用任何低级优化,所以这个问题对我来说似乎是合理的。
猜你喜欢
  • 2012-01-27
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
  • 2017-05-28
  • 1970-01-01
  • 1970-01-01
  • 2014-11-22
相关资源
最近更新 更多