递归算法的时间复杂度分析

Master定理也叫主定理。它提供了一种经过渐近符号表示递推关系式的方法。应用Master定理能够很简便的求解递归方程。算法

T(N)=a(N/b)+N^d
其中 n 表示原始的样本量, a 表示子过程发生的次数,n/b 表示子过程的样本量,d 表示除子过程其余的操做,通常为常量数组

  • log(b,a)<d 则递归算法复杂度为O(n^log(b,a))
  • log(b,a)=d 则递归算法复杂度为O(n^d*log(b,a))
  • log(b,a)>d 则递归算法复杂度为O(n^d))

例子ide

/**
     * 二分查找递归实现。
     * @param srcArray  有序数组
     * @param start 数组低地址下标
     * @param end   数组高地址下标
     * @param key  查找元素
     * @return 查找元素不存在返回-1
     */
    public static int binSearch(int srcArray[], int start, int end, int key) {
        int mid = (end - start) / 2 + start;
        if (srcArray[mid] == key) {
            return mid;
        }
        if (start >= end) {
            return -1;
        } else if (key > srcArray[mid]) {
            return binSearch(srcArray, mid + 1, end, key);
        } else if (key < srcArray[mid]) {
            return binSearch(srcArray, start, mid - 1, key);
        }
        return -1;
    }

a = 2,b=2,d=0
则算法复杂度为 n^log(b,a)=ncode

相关文章
相关标签/搜索