Javascript 字符串分割映射组合的时间复杂度
我想知道如何计算这种组合的时间复杂度:Javascript 字符串分割映射组合的时间复杂度,javascript,algorithm,time-complexity,Javascript,Algorithm,Time Complexity,我想知道如何计算这种组合的时间复杂度: "some string" .split(" ") // O(n) .map( word => doSomething(word) // word length = j, doSomething(word) => O(j) ) // O(n * j) => O(n^2) ??? doSomething是一个线性复杂度函数,不知道它在做什么 因此,根据.split(“”的时间复杂度将是O(n) 在下一行中
"some string"
.split(" ") // O(n)
.map(
word => doSomething(word) // word length = j, doSomething(word) => O(j)
) // O(n * j) => O(n^2) ???
doSomething
是一个线性复杂度函数,不知道它在做什么
因此,根据.split(“”的时间复杂度将是O(n)
在下一行中,我们在单词数组上有一个.map
,当所有单词都包含一个字符时,最坏的情况可能是O(n/2)
=>O(n)
在map函数中,我们对长度为j
=>O(j)
的单词执行一些操作。考虑到这一点,该单词可以是完整字符串的大小(无空格)O(j)=>O(n)
因此,我们的总体时间复杂度O(n^2)
但若我们在.map步骤O(n)
中有最坏的情况,那个么我们就不能在map中有最坏的情况,因为所有单词长度的总和就是输入字符串的大小。所以我们不能将O(j)转换为O(n)
那么,时间复杂性将是什么
更新 好的,我做了一些实验,这是我在电脑上得到的 X轴=>时间毫秒 Y轴=>输入字符串长度 随机生成的数据 复杂性显然是线性的 代码是O(n),其中n是字符串的长度: 我同意拆分为O(n) 有趣的部分是
地图
。在这里,您为复杂性的上限提供了正确的参数。的确,代码也是O(n²)(注意,O(n)是O(n²)的一个子集,这并不矛盾)。但是,可以进行更精确的评估。请注意,您估计的最坏情况不能同时发生:
- 如果一个单词是整个字符串的大小,则不能有多个单词
- 如果每个单词有一个字符(最大字数),那么每个单词就有一个字符
地图
。在这里,您为复杂性的上限提供了正确的参数。的确,代码也是O(n²)(注意,O(n)是O(n²)的一个子集,这并不矛盾)。但是,可以进行更精确的评估。请注意,您估计的最坏情况不能同时发生:
- 如果一个单词是整个字符串的大小,则不能有多个单词
- 如果每个单词有一个字符(最大字数),那么每个单词就有一个字符
由于恒定数量的O(n)操作的顺序链接仍然是O(n),因此我们得到了上面提到的O(n)的总体复杂性,其中n是字符数。@ASDFGerte这对于数组本身的操作是正确的,但对每个元素运行
doSomething(…)
中的处理。因此,该函数的复杂性将乘以map
的迭代次数。复杂性应为O(n)
,因为所述的doSomething(…)
与拆分字符串的长度有关。它最多只能对长度为n
的字符串执行一次操作,或者处理单个字符n/2
次。无论如何,处理完全是基于字符串长度的线性函数,因此O(n)
@DanielWStrimpel根据他的示例,doSomething
是O(j),其中j是字长。你每个字都这么做,那又是n。您执行一个O(n)操作,split
,然后执行另一个O(n)操作,map
(使用doSomething
),结果总共是O(n)。实际上,我想强调的主要一点是,首先进行拆分
,然后进行映射
,两者之间不是相乘的。你把两个O(n)操作连在一起,这并不能让你得到O(n^2),这是他在问题中提出的。我认为困惑来自我没有完全理解OP的问题所在。在你的论证中,你在做一个“复杂度明显小于或等于”,最坏的情况下可以是O(n/2)=>O(n)”和“单词可以是整个字符串的大小”。这是可能的,您得出的结论是,它最多为O(n²)。然而,这是没有用的。由于每个单词的字符总数等于字符串字符长度,因此复杂性将低于您选择的上限。为了进一步说明,您假设两点为最坏情况,而这两点不能同时发生。如果一个单词是整个字符串的大小,则不能有多个单词,另一方面,如果每个单词有一个字符,则每个单词有一个字符。总和将始终相同,即原始字符串的总长度。Nice:)。很抱歉最初的混乱。我认为这是因为我没有缓慢而严格地阅读问题,因此没有清楚地理解您在理解哪一部分时遇到的问题。@ASDFGerte这对于数组本身的操作是正确的,但是doSomething(…)
中的处理是针对每个元素运行的。因此,复杂性