【发布时间】:2019-04-01 02:57:30
【问题描述】:
我正在看《Cracking the Coding Interview 6th edition》第 49 页,示例 8。
假设我们有一个算法,它接收一个字符串数组,对每个字符串进行排序,然后对整个数组进行排序。运行时是什么?
如果最长字符串的长度是s,数组的长度是a,书上说对每个字符串进行排序是:
O(a*s log s)
我的理解是复杂度取决于这种情况下的上限,所以应该是:
O(s log s)
例如,如果s 是最长字符串的长度,s1、s2、s3 是其他字符串的长度,则复杂度为:
O(s log s + s1 log s1 + s2 log s2 + s3 log s3)
最终是:
O(s log s)
因为s 的值最高。为什么我们需要与a相乘?
【问题讨论】:
-
O(a*s log s)表示运行时间受该时间限制,它不一定等于a*s log s- 如果每个字符串的长度为 s,就会发生这种情况。大 O 代表最坏的情况。当您使用 Big O 分析时间复杂度时,您需要考虑最坏的情况。 -
我明白我在这里感到困惑。感谢您的回复。
标签: algorithm time-complexity big-o