我的 Big O 近似值正确吗?

Is my Big O approximations correct?

我有一个算法可以确定两个字符串是否是彼此的排列。代码可以在这里找到: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

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

只是想看看我的想法是否正确。

关于您的时间复杂度,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)