我的Big O近似值是否正确?

时间:2016-11-22 17:43:10

标签: big-o

我有一个算法来确定两个字符串是否是彼此的排列。代码可以在这里找到:https://jsfiddle.net/bxohcgjn/

N = String A
M = String B
For time complexity, i have: O(N(N logN + M logM))
For space complexity, I have: O(N + M)

N logN = for sorting A
M logM = for sorting B

我知道浏览器的排序实现会改变它,但我假设是快速排序。

只是想知道我的想法是否正确。

1 个答案:

答案 0 :(得分:0)

关于时间复杂度,for循环(直线顺序)不得乘以sort的总和。

如果算法由n步骤组成,则算法的顺序是其顺序的总和:

O(alg) = O(step_1) + O(step_2) + ... + O(step_n)

在您的情况下,n = 3sortfor):

O(is_permutation) = O(sort_A) + O(sort_B) + O(for)
                  = O(n logn) + O(m logm) + O(n)

最大值是:

O(is_permutation) = max(O(n logn), O(m logm), O(n))

但是,既然你在测试之前测试了两个字符串的大小在应用sort之前必须是相同的,在最坏的情况下(这是你正在分析的),只有一个大小,所以,表达式被翻译为:

O(is_permutation) = max(O(n logn), O(n logn), O(n))
                  = max(O(n logn), O(n))
                  = O(n logn)