查找具有楼层和天花板的递归日志算法的复杂性

时间:2017-02-15 20:51:25

标签: recursion time-complexity big-o

我有这个丑陋的算法(是的,它是一门计算机科学课程,所以它的目的很难看)。我们必须使用不同的方法找到它的复杂性。其中一种方法是向后替换。通过查看算法,很明显它的复杂性将位于(log(n - m))范围内,因为每次递归调用时实例大小除以3。

Function WeirdSort(Array[m..n])
    if (m < n) then
        if (A[m] > A[n]) then
            temp = A[m]
            A[m] = A[n]
            A[n] = temp
        end if
        if (m + 1 < n) then
            index = floor((n - m + 1) / 3)
            WeirdSort(A[m..n - index])
            WeirdSort(A[m + index..n])
            WeirdSort(A[m..n - index])
        end if
    end if
end Function

但我试图了解如何通过向后替换方法达到这个答案。更具体地说,我一直试图处理开始显示数组大小的众多floor()和ceiling(),以及我应该如何处理它们。

我的直觉告诉我,他们不能被抛到一边,但也许这就是我应该做的事情?

另外,考虑到如果数组已经排序,算法没有提前结束的事实,我认为最坏和最好的情况是相同的,但这也可能是错误的。

1 个答案:

答案 0 :(得分:1)

很抱歉告诉您,但复杂性远离log(x)

假设最坏的情况,m=1你做的是2/3的元素3次递归。

T(n) = 3*T(2n/3) + 1

使用master theorm ==> T(n) = O(n^2.7~)