【问题标题】:What is the time complexity of longest common substring finding algorithm done with recursive vs iteration? [closed]使用递归与迭代完成的最长公共子串查找算法的时间复杂度是多少? [关闭]
【发布时间】:2022-01-19 07:14:09
【问题描述】:

选择递归还是迭代实现最长公共子串查找算法是否重要?它们是否具有相同的运行时复杂性?请解释一下,非常感谢!

【问题讨论】:

  • 当您说 算法时,您是否想到了一个特定的算法?在我的经验中,通常的一种是动态编程算法,它更适合迭代而不是递归(尽管动态编程在概念上与递归密切相关)。或者,您可以使用递归加记忆,但这根本不适合迭代。

标签: algorithm time-complexity


【解决方案1】:

假设递归意味着记忆,迭代意味着自下而上的 DP。根据实际实现和一些优化,两种方法的时间复杂度会略有不同。

基本记忆

时间复杂度 = O(M*N^2)

  • 在最坏的情况下,我们需要用 O(N) 次来解决每个子问题,N 是我们当前正在检查的字符串的长度。由于一个字符串有 M 个可能的索引,并且 N 为第二个字符串。你最终得到 O(M*N^2)。

空间复杂度 = O(M*N)

  • 有 M*N 个 O(1) 空间的子问题。

迭代

时间复杂度 = O(M*N)

  • 我们正在解决 M*N 个子问题,每个问题都需要 O(1) 的工作量。

空间复杂度 = O(M*N)

  • 存储 DP 表需要二维数组,即要存储 M*N 个子问题。

希望这有点用处。

【讨论】:

    猜你喜欢
    • 2021-05-21
    • 2018-09-09
    • 2023-03-24
    • 1970-01-01
    • 2016-04-13
    • 2019-05-08
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多