我有一个算法来确定两个字符串是否是彼此的排列。代码可以在这里找到: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
我知道浏览器的排序实现会改变它,但我假设是快速排序。
只是想知道我的想法是否正确。
答案 0 :(得分:0)
关于时间复杂度,for
循环(直线顺序)不得乘以sort
的总和。
如果算法由n
步骤组成,则算法的顺序是其顺序的总和:
O(alg) = O(step_1) + O(step_2) + ... + O(step_n)
在您的情况下,n = 3
(sort
和for
):
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)