在图像中,我不明白在对字符串数组进行排序时额外的O(s)来自何处。我得到的排序字符串数组将是O(一个日志a),我不明白为什么我们也要添加O(s)。
在我看来,O(一个日志a)负责整理字符串数组中的所有字符串。
答案 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
,因此您需要进行aloga
次s
比较。
答案 2 :(得分:0)
答案 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))