如何在字符串数组中对字符串进行排序,然后对该数组进行排序,结果是 O(a*s(loga+logs))?

How does sorting a string in an array of strings and then sorting that array come out to be O(a*s(loga+logs))?

在图像中,我不明白在对字符串数组进行排序时,额外的 O(s) 是从哪里来的。我知道对字符串数组进行排序将是 O(a log a),我不明白为什么我们也必须添加 O(s)。

在我看来,O(a log a) 已经负责对字符串数组中的所有字符串进行排序。

在你问的图像中 "why add?" 好吧,它们是独立的操作,对每个 a 个字符串进行排序,每个字符串的长度是 s,那就是 O(a * s log s),以及对 a 字符串数组进行排序的一个,每个字符串的长度是 s 以计算每两个字符串之间的潜在比较,这是另一个 O(a * s log a)。独立运营意味着"add"。添加得到 O(a * s log s + a * s log a),这是您提取公因子时得到的结果。

卡在同一个例子上了!请记住,对 n 个字符的数组进行排序需要 nlogn 时间。对于最后的排序,如果我们假设数组中的每个字符串的长度为 1,那么我们再次只是对 a 个字符进行排序,所以我们得到 aloga 项,但是每个字符串的最坏情况长度是s 所以你需要做 aloga 次比较 s 次。

什么时候使用“+(加)”和什么时候使用*(乘)

最清楚、最中肯的解释

这样理解,当您对 characters/numbers 的数组进行排序时,您可以根据两个索引元素的简单比较对该数组进行排序,复杂度为 O(N*log(N)),其中 N是数组的长度。

开始对字符串数组进行排序时会发生什么?

array[0] = "rahul" and array[1]= "raj"

如果要对以上两个索引进行字典序排序(不能像比较数字一样简单地比较两个字符串),则需要按字符进行比较。所以它会 运行 Math.max(array[0].length(), array[1].length()) 次。额外的 s 从这里进入 O(s*a log(a))