算法(二)—分治法Divide-and-conque

来源:互联网 发布:php如何防止xss攻击 编辑:程序博客网 时间:2024/05/17 07:57

1、二分查找法-Binary Search

·非递归方法:

    /*      * 非递归二分查找算法      * 参数:整型数组,需要比较的数.      */      public static int binarySearch(Integer[]srcArray,int des){          //第一个位置.          int low=0;          //最高位置.数组长度-1,因为下标是从0开始的.          int high=srcArray.length-1;          //当low"指针"和high不重复的时候.          while(low<=high){              //中间位置计算,low+ 最高位置减去最低位置,右移一位,相当于除2.也可以用(high+low)/2              int middle=low+((high-low)>>1);          //与最中间的数字进行判断,是否相等,相等的话就返回对应的数组下标.          if(des==srcArray[middle]){              return middle;          //如果小于的话则移动最高层的"指针"          }else if(des<srcArray[middle]){              high=middle-1;          //移动最低的"指针"           }else{              low=middle+1;              }          }          return-1;          }        }  

·递归方法

    /**      * 递归方法实现二分查找法.      * @param Array数组      * @param low 数组第一位置      * @param high 最高      * @param key 要查找的值.      * @return 返回值.      */      int BinSearch(int Array[],int low,int high,int key)      {          if (low<=high)          {              int mid = (low+high)/2;              if(key == Array[mid])                  return mid;              else if(key<Array[mid])                  //移动low和high                  return BinSearch(Array,low,mid-1,key);              else if(key>Array[mid])                  return BinSearch(Array,mid+1,high,key);          }          else              return -1;      }  

  ·T(n)=T(n/2)+θ(1);

    时间复杂度为O(logn);


2、一个数的乘方:

/**     * 求一个整数的乘方     * @param num 要乘方的数字     * @param power 多少次方     * @return     */    public static int power(int num,int power){        if(power == 1){            return num;        }        if(power % 2 == 0){            return power(num, power / 2) * power(num, power / 2);                    }else{                        return num * power(num, power / 2) * power(num, power / 2);                    }    }
    ·T(n)=T(n/2)+θ(1)

  时间复杂度为O(logn);


3、斐波那契数-Fibonacci numbers

               a1=0,

F(n) =    a2=1,

              an=an-1+an-2(n>=3,n∈N*)

可归纳为



4、N阶矩阵-Matrix Multiplication:

未完

0 0
原创粉丝点击