当前位置: 首页 > 知识库问答 >
问题:

断词的时间复杂度分析

公羊晟
2023-03-14

以下代码的时间复杂度分析和空间复杂度分析是什么:

class Solution:
    def wordBreak(self, s: str, wordDict: List[str]) -> bool:
        if not s or not dict:
            False

        N=len(s)
        ans=[False for i in range (N+1)]
        ans[0]=True


        for index in range(N):
            if ans[index]:
                for word in wordDict:
                    L=len(word)
                    if index+L <= N and s[index:index+L]==word:
                        ans[index+L]=True

        return ans[-1]

给定一个非空字符串S和一个包含非空单词列表的字典Worddict,确定S是否可以被分段为一个或多个字典单词的空格分隔序列。

共有1个答案

祁增
2023-03-14

此解决方案的时间复杂度为O(n*m*k)-其中:

  • n是字符串s的长度。
  • MWorddict中的字数。
  • kWorddict中单词的平均长度。

解释一下,重复n次,每次检查Worddict(mtotal)中的每个单词,每次重复都读取整个单词(长度k)。

空间复杂性为O(n)-您的辅助数组与Worddict中的单词数或长度无关,并且没有额外的空间分配1取决于字典。

(1)我不确定python是如何实现s[index:index+l]的,但是无论哪种方式,它都不会与n相乘,并且一次不会分配一次以上,如果l>n,也不会分配--所以无论哪种方式都不会影响空间复杂性。

 类似资料:
  • 我遇到了单词中断问题,它是这样的: 给定一个输入字符串和一个字典,如果可能,将输入字符串分割成一个空间分隔的字典单词序列。 然而,在Quora中,一个用户发布了一个线性时间解决方案 我不知道它怎么会是线性的。他们在时间复杂度计算上有什么错误吗?这个问题的最佳可能最坏情况时间复杂度是多少。我在这里发布了最常见的DP解决方案

  • 主要内容:时间复杂度,空间复杂度《 算法是什么》一节提到,解决一个问题的算法可能有多种,这种情况下,我们就必须对这些算法进行取舍,从中挑选出一个“最好”的。 算法本身是不分“好坏”的,所谓“最好”的算法,指的是最适合当前场景的算法。挑选算法时,主要考虑以下两方面因素: 执行效率:根据算法所编写的程序,执行时间越短,执行效率就越高; 占用的内存空间:不同算法编写出的程序,运行时占用的内存空间也不相同。如果实际场景中仅能使用少量的内

  • 3. 算法的时间复杂度分析 解决同一个问题可以有很多种算法,比较评价算法的好坏,一个重要的标准就是算法的时间复杂度。现在研究一下插入排序算法的执行时间,按照习惯,输入长度LEN以下用n表示。设循环中各条语句的执行时间分别是c1、c2、c3、c4、c5这样五个常数[23]: void insertion_sort(void) 执行时间 { int i, j, key; for (j = 1;

  • 有人能帮我了解一下这个代码片段的时间和空间复杂性吗?请参考leetcode问题-单词中断II。给定一个非空字符串s和一个包含非空单词列表的字典单词dict,在s中添加空格来构造一个句子,其中每个单词都是有效的字典单词。返回所有这些可能的句子。

  • 假设T是具有n个节点和高度h的二叉查找树。T的每个节点x存储一个实数x。键。给出以下算法Func1(T. root)的最坏情况时间复杂度。你需要证明你的答案。 x.left() 对于最坏情况下的运行时,我认为这将是O(树的高度),因为这基本上类似于最小()或最大()二元搜索树算法。然而,它是递归的,所以我对是否将O(h)作为最坏的运行时编写有点犹豫。 当我考虑它时,最坏的情况是如果函数执行if(s

  • 遍历顶点的每个相邻边的时间复杂度是,例如,,其中是相邻边的数量。因此,对于顶点数,时间复杂度变为=,其中是图中的边总数。既然从队列中移除和添加顶点是,为什么它会作为添加到BFS的总体时间复杂度中?