假设我们有一个算法,它接收一个字符串数组,对每个字符串进行排序,然后对整个数组进行排序。运行时间是什么?

时间:2019-05-27 08:06:52

标签: algorithm time-complexity

问题是:

假设我们有一个算法,它接收一个字符串数组,对每个字符串进行排序,然后对整个数组进行排序。运行时间是什么?

解决方案如下: enter image description here

我在上述解决方案中发现的特殊之处是:"You should also take into account that you need to compare the strings. Each string comparison takes O (s) time.There are O (a log a) comparisons, therefore this will take O (a*s log a) time."

我们需要进行比较吗?

对字符串进行排序需要s log s时间。假设有a个字符串,因此总花费为a*s log s

现在,问题已简化为仅对给定数组进行排序,您可以在a log a时间内完成,因此总花费为a*s log s + a log a = a (s log s + log a)

在思考过程中我哪里出错了?

该问题摘自破解编码面试

1 个答案:

答案 0 :(得分:1)

对数字列表进行排序的假设是,比较在O(1)恒定时间内进行,因此从比较数的角度考虑,nlogn的复杂性。但是,当我们对一个其成员需要时间x进行比较的枚举对象进行排序时,运行时将变为xnlogn。这是因为我们执行的操作需要x时间,nlogn次。

但是,我还必须指出,字符串是对以26为底的直接双射。由于我们认为以10为底的比较是在恒定时间内进行的,因此没有理由不将其扩展到本质上是以底为底的数字的字符串。 26.这实际上取决于字符串比较机制的实现。因此,根据完成字符串比较的方式,我们最终得到两个可能的运行时。

您是正确的,当且仅当我们假设字符串要以26为底进行比较,并且假定可以在固定时间内完成。

否则,排序通常需要(比较时间)x nlogn