假设我们有一个字符串数组str = [" foo"," bar"," zebras"," topper"]需要排序以获得[" bar"," foo"," zebra"," top"],排序复杂性将为O (nlogn)其中n是数组的长度。但我们也进行字符串比较,它应该是O(m),其中m是最长字符串的长度(例如斑马和顶层)。所以最终的复杂性应该是O(m * nlogn)。如果我错了,请纠正我。
这个问题与here不同,因为在这里我将所有字符串与所有字符串进行比较,而不是仅使用一个固定字符串。
答案 0 :(得分:1)
如果您仅使用普通字符串比较执行排序,则会获得此结果。
通过了解您的输入是字符串,您可以获得更好的性能(但我现在没有任何实现)。例如,如果依次按每个字符对字符串进行排序,则得到O(n m | alphabet |)。
答案 1 :(得分:0)
问题在于我们以两种不同的方式使用N。在一种情况下,它是字符串的长度(哪个字符串?)。 在另一种情况下,它是数组的长度。 您可以通过完全不使用变量“ N”或仅使用变量来防止此错误 当关于N可以代表什么没有歧义的时候。 实际上,我什至不会在这里使用a和b,或者m和n。太容易忘记哪个是哪个,然后将它们混合在一起。 O(a2)运行时与O(a * b)运行时完全不同。 让我们定义新的术语,并使用合乎逻辑的名称。
现在我们可以分部分进行操作:
如果将这两个部分加起来,则得到O(a * s(log a + log s))。 就是这个。无法进一步降低它。