algorithm - 确定给定算法的递归关系

标签 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); 
        }
}

这段代码取 self 的算法分析课上的期中考试。要求学生推导出描述此函数行为的递归关系。我在 Internet 上看到了一些关于如何完成此过程的示例,但我只是想不通如何将其应用于此特定功能,i 和 j 索引让我感到很困惑。

有什么想法吗?

最佳答案

每个 [i,j-k],[i+k,j],[i,j-k] 都是 [i] 的 2/3 ,j]。所以当每个部分都是原始大小的三分之二时,您将问题分成 3 部分。因此,您的递归关系是 T(n) = 3*T(n*2/3)。您可以使用主定理解决这个问题。

关于algorithm - 确定给定算法的递归关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34233291/

相关文章:

algorithm - 带中断的循环不变量

arrays - 查找给定数组中每个窗口大小的最大值和最小值

algorithm - 具有 2 x 1 和 2 x 2 矩形的平铺网格

algorithm - 解决旅行推销员的复杂递归关系

algorithm - 如何找到给定数字数组的最大跨度?

python - 求解递归序列

algorithm - 写出函数的递推关系

基因 DNA 序列优化的算法选项? (涉及到TSP,动态规划)

algorithm - 给定一个数字找到下一个稀疏数字

algorithm - 如何找到根据立方根定义步骤的递归的复杂性?