如何对字符串数组中的字符串进行排序然后对该数组进行排序为O(a * s(loga + logs))?

时间:2016-11-19 22:27:14

标签: algorithm sorting time-complexity big-o

Question from Cracking the Coding Interview

在图像中,我不明白在对字符串数组进行排序时额外的O(s)来自何处。我得到的排序字符串数组将是O(一个日志a),我不明白为什么我们也要添加O(s)。

在我看来,O(一个日志a)负责整理字符串数组中的所有字符串。

4 个答案:

答案 0 :(得分:4)

在图片中你要问"为什么要添加?"好吧,它们是独立的操作,可以对每个a个字符串进行排序,每个字符串的长度为s,以及O(a * s log s),以及对a数组进行排序的字符串。 1}}字符串,每个字符串的长度为s,用于计算每两个字符串之间的潜在比较,即另一个O(a * s log a)。独立运营意味着"添加"。添加提供O(a * s log s + a * s log a),这是您在提取公共因子时获得的。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

enter image description here最清楚的一点是何时使用“ +(加)和何时使用*(相乘)

答案 3 :(得分:0)

以这样一种方式理解,当您对字符/数字数组进行排序时,您可以根据两个索引元素的简单比较对该数组进行排序,复杂度将为 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))