Javascript 链式排序和减少是否会将时间复杂度从O(n)增加到O(n^2)?

Javascript 链式排序和减少是否会将时间复杂度从O(n)增加到O(n^2)?,javascript,algorithm,time,Javascript,Algorithm,Time,就时间复杂性而言,这是: let string = "I am a little teapot" let wordArray = string.split(' ').sort() let store = wordArray.reduce( (acc, word) => { acc[word] = acc[word] + 1 || 1; return acc; }, {}) 还有比这更好的吗 let string = "I am a little t

就时间复杂性而言,这是:

let string = "I am a little teapot"
let wordArray = string.split(' ').sort()
let store = wordArray.reduce( (acc, word) => {
       acc[word] = acc[word] + 1 || 1;
       return acc;
     }, {}) 
还有比这更好的吗

let string = "I am a little teapot"
let store = string.split(' ').sort().reduce( (acc, word) => {
      acc[word] = acc[word] + 1 || 1;
      return acc;
    }, {}) 

我相信每一个都有时间复杂性O(n)。我说得对吗?

不,这没有任何区别(实际上,可能非常非常小,但从O(n)到O(n^2)的复杂度非常高)

您是正确的,您的代码是O(n logn),n是字符串中的字数


排序方法可能是使用快速排序实现的,在一般情况下是O(n log n),而reduce是一个简单的循环O(n)。

不,这没有任何区别(实际上,可能非常非常非常小,但复杂度从O(n)增加到O(n^2))

您是正确的,您的代码是O(n logn),n是字符串中的字数

排序方法可能是使用快速排序实现的,在一般情况下是O(n logn),而reduce是一个简单的循环O(n)

链接是否会增加时间复杂性

不,中间变量不会改变时间复杂度,算法完全相同

我相信每一个都有时间复杂性
O(n)
。我说得对吗

没有,尽管您没有说明什么是
n
度量

算法的复杂性可以表示为
O(s+(s/w)w log w)
,其中
s
string
的长度,
w
是其中的字数,
s/w
是平均字长(字符串比较所需的时间);它简化为
O(s log w)

链接是否会增加时间复杂性

不,中间变量不会改变时间复杂度,算法完全相同

我相信每一个都有时间复杂性
O(n)
。我说得对吗

没有,尽管您没有说明什么是
n
度量


算法的复杂性可以表示为
O(s+(s/w)w log w)
,其中
s
string
的长度,
w
是其中的字数,
s/w
是平均字长(字符串比较所需的时间);它简化为许多不同的东西:

  • 在这种情况下,链接不会以任何方式影响时间复杂性。这只是句法上的差异

  • 我假设n设计了你想要处理的句子中的字数。O(n)是对时间复杂度的错误估计。有效的比较排序通常需要O(nlog(n))比较。除此之外,您正在比较字符串,因此比较不是在固定时间内进行的(相对于字符串的长度)。但这并没有改变复杂性为O(nlog(n))的事实,因为字符串的长度可能不依赖于n

  • O(3n)=O(2n)=O(n)根据定义,这正是O的意思。看看你的简历

  • 编辑:在评论之后,让我更清楚地说明复杂性的原因

    sort
    函数是根据在空格上拆分句子的结果调用的,这归结为对一系列单词应用
    sort

    我不知道
    sort
    是如何实现的,但它很可能是一种比较排序,这意味着它大致可以进行
    O(n*log(n))
    比较,其中n是被排序的项目数:这里是句子的单词


    现在,我们知道我们将进行
    O(n*log(n))
    字符串比较,这与字符串的长度无关。字符串比较在最坏情况下采用L操作,L长度是被比较的两个字符串的最小长度。现在让我们将L作为正在排序的字符串的最大长度。根据前面所说的,我们将大致执行
    O(L*n*log(n))
    操作来对数组进行排序。因为没有理由让L依赖于n,所以我们有时间竞争的
    O(L*n*log(n))=O(n*log(n))
    操作。

    很多不同的事情:

  • 在这种情况下,链接不会以任何方式影响时间复杂性。这只是句法上的差异

  • 我假设n设计了你想要处理的句子中的字数。O(n)是对时间复杂度的错误估计。有效的比较排序通常需要O(nlog(n))比较。除此之外,您正在比较字符串,因此比较不是在固定时间内进行的(相对于字符串的长度)。但这并没有改变复杂性为O(nlog(n))的事实,因为字符串的长度可能不依赖于n

  • O(3n)=O(2n)=O(n)根据定义,这正是O的意思。看看你的简历

  • 编辑:在评论之后,让我更清楚地说明复杂性的原因

    sort
    函数是根据在空格上拆分句子的结果调用的,这归结为对一系列单词应用
    sort

    我不知道
    sort
    是如何实现的,但它很可能是一种比较排序,这意味着它大致可以进行
    O(n*log(n))
    比较,其中n是被排序的项目数:这里是句子的单词

    现在,我们知道我们将进行
    O(n*log(n))
    字符串比较,这与字符串的长度无关。字符串比较在最坏情况下采用L操作,L长度是被比较的两个字符串的最小长度。现在让我们将L作为正在排序的字符串的最大长度。根据前面所说的,我们将大致执行
    O(L*n*log(n))
    操作来对数组进行排序。因为L没有理由依赖于n,所以我们有时间竞争的
    O(L*n*log(n))=O(n*log(n))
    操作。

    为什么会增加复杂性?有任何消息来源声称这一点吗?事实上,蒂姆