使用合并排序算法将长度为 n 的 n 个字符串列表按字典顺序排序。此计算的最坏情况运行时间是?
我把这个问题作为家庭作业。我知道在 O(nlogn) 时间内进行归并排序。对于长度 in 的字典顺序是 n 次 nlogn 吗?还是 n^2 ?
使用合并排序算法将长度为 n 的 n 个字符串列表按字典顺序排序。此计算的最坏情况运行时间是?
我把这个问题作为家庭作业。我知道在 O(nlogn) 时间内进行归并排序。对于长度 in 的字典顺序是 n 次 nlogn 吗?还是 n^2 ?
算法的每次比较都是O(n)
[比较两个字符串是O(n)
最坏的情况-您可能会检测到仅在最后一个字符上哪个“更大”],您在合并排序中O(nlogn)
进行了比较。
这样你得到O(nlogn * n) = O(n^2 * logn)
但是根据递推关系
T(n) = 2T(n/2) + O(m*n)
当 m = n 时为 T(n) = 2T(n/2) + O(n^2)
那么结果将是 O(n^2) 而不是 O(n^2logn)。
如我错了请纠正我。
**answer is O(n^2logn)
,
we know Merge sort has recurrence form
T(n) = a T(n/b) + O(n)
in case of merge sort
it is
T(n) = 2T(n/2) + O(n) when there are n elements
but here the size of the total is not "n" but "n string of length n"
so a/c to this in every recursion we are breaking the n*n elements in to half
for each recursion as specified by the merge sort algorithm
MERGE-SORT(A,P,R) ///here A is the array P=1st index=1, R=last index in our case it
is n^2
if P<R
then Q = lower_ceiling_fun[(P+R)/2]
MERGE-SORT(A,P,Q)
MERGE-SORT(A,Q+1,R)
MERGE (A,P,Q,R)
MERGE(A,P,Q,R) PROCEDURE ON AN N ELEMENT SUBARRAY TAKES TIME O(N)
BUT IN OUR CASE IT IS N*N
SO A/C to this merge sort recurrence equation for this problem becomes
T(N^2)= 2T[(N^2)/2] + O(N^2)
WE CAN PUT K=N^2 ie.. substitute to solve the recurrence
T(K)= 2T(K/2) + O(K)
a/c to master method condition T(N)=A T(N/B) + O(N^d)
IF A<=B^d then T(N)= O(NlogN)
therefore T(K) = O(KlogK)
substituting K=N^2
we get T(N^2)= O(n*nlogn*n)
ie.. O(2n*nlogn)
.. O(n*nlogn)
因此解决了
时间复杂度递推关系为
T(a,b)=2T(a/2,b)+O(b^2)
很明显,树的高度是logn。因此时间复杂度为 O(n^2*logn)。