确定给定算法的递归关系

时间:2015-12-11 22:03:49

标签: algorithm recurrence

void function(int A[], int i, int j){
    if (j == i+1) 
        if (A[i] > A[j])
            swap(A,i,j)
        else {
            int k = (j-i+1)/3;
            function(A,i,j-k); 
            function(A,i+k,j);
            function(A,i,j-k); 
        }
}

这段代码取自我的算法分析课程中的过去的中期考试。有人要求学生得出一个描述该函数行为的递归关系。我在互联网上看到了一些关于如何完成这个过程的例子,但是我无法弄清楚如何将它应用于这个特定的函数,i和j索引对我来说真的很困惑。 / p>

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

[i,j-k],[i+k,j],[i,j-k]中的每一个都是2/3的{​​{1}}。因此,当每个部分是原始大小的三分之二时,您将问题划分为[i,j]部分。因此,您的递归关系为3。你可以用Master定理来解决这个问题。