Big O分析对字符串数组中的每个字符串进行排序,然后对该字符串数组进行排序

时间:2016-11-11 10:39:34

标签: arrays string algorithm sorting

我一直在阅读Cracking the Coding Interview,对于一个特定的例子,我对作者给出的解释感到有些困惑。在书中,作者解释说我们有一个字符串数组(我编写的这些数组并没有出现在本书中):

<ul>
  <li><a class="active" href="#home">Home</a></li>
  <li><a href="#news">News</a></li>
  <li><a href="#contact">Contact</a></li>
  <li><a href="#about">About</a></li>
</ul>

此算法的第一项任务是对每个字符串进行排序,并保留:

["abc", "a", "dcglkjsl"];

然后对原始数组进行排序,如下所示:

["abc","a","cdgjklls"];

现在,作者继续逐个分析算法,得到O(a * s(log a + log s))的解决方案,其中a是数组的长度,s是长度最长的字符串。

为什么要对每个字符串的复杂度O(s log s)进行排序?我似乎无法绕过那个。作者说这是一个明显的结论,但我不明白为什么。我觉得如果我理解了这一重要信息,我就能理解作者是如何得出上述最终解决方案的。

1 个答案:

答案 0 :(得分:0)

  

为什么要对每个字符串的复杂度O(s log s)进行排序?

如果您选择std:mapbalanced Binary Search Tree来填充字符串的每个字符,则需要O(s log s)来填充地图或BST。 log s是树的深度。