试图找出我的功能的运行时间

时间:2016-02-18 00:53:35

标签: python asymptotic-complexity

我有这个python代码用于查找最长的子字符串。我试图找出它的渐近运行时间并且我已经得到了答案,但我不确定它是否正确。这是代码:

def longest_substring(s, t):
    best = ' '
    for s_start in range(0, len(s)):
        for s_end in range(s_start, len(s)+1):
            for t_start in range(0, len(t)):
                for t_end in range(t_start, len(t)+1):
                    if s[s_start:s_end] == t[t_start:t_end]:
                        current = s[s_start:s_end]
                            if len(current) > len(best):
                                best = current
    return best

显然这个功能的运行时间非常慢。它就是这样设计的。我的方法是因为有一个for循环有3个嵌套的for循环,运行时就像O(n ^ 4)。我不确定这是否正确,因为并非每个循环都在迭代输入大小。此外,假设s = t = n(输入大小)。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

如果您不相信它是O(n ^ 5),请尝试计算仅为字符串s(即外部两个循环)运行的循环数。当s_start == 0时,内循环运行n + 1次;当s_start == 1时,内循环运行n次,依此类推,直到s_start = n - 1,内循环运行两次。

总和

(n + 1) + (n) + (n - 1) + ... + 2

是公式为

的算术系列
((n + 1) + 2) * n / 2

是O(n ^ 2)。

另一个n因子来自s[s_start:s_end] == t[t_start:t_end],即O(n)。

相关问题