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>
有什么想法吗?
答案 0 :(得分:1)
[i,j-k],[i+k,j],[i,j-k]
中的每一个都是2/3
的{{1}}。因此,当每个部分是原始大小的三分之二时,您将问题划分为[i,j]
部分。因此,您的递归关系为3
。你可以用Master定理来解决这个问题。