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
是平均字长(字符串比较所需的时间);它简化为许多不同的东西:
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))
操作。很多不同的事情:
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))
操作。为什么会增加复杂性?有任何消息来源声称这一点吗?事实上,蒂姆