算法(二)—分治法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
- 算法(二)—分治法Divide-and-conque
- 【分治思想理解】divide and conque
- 分治算法(Divide-and-Conquer Algorithm)二
- 分治算法(divide and conquer)
- 分治法(divide-and-conquer)
- 漫谈算法(四)分治算法 Divide and Conquer Algorithm
- 漫谈算法(四)分治算法 Divide and Conquer Algorithm
- 算法入门(1)——分治算法(Divide and Conquer)
- 分治法,divide and conqure
- 分治算法(Divide-and-Conquer Algorithm)一
- 基础算法1——分治(divide and conquer)【未完待续】
- 分治算法Divide-and-Conquer概述
- 分治算法 Divide and Conquer Algorithm
- 分治法——树的遍历(Divide and Conquer
- 分治法——主定理(Divide and Conquer
- 分治 Divide and Conquer
- 算法第二周: Divide and Conquer-分治算法
- 【Python排序搜索基本算法】之归并排序&分治法(Merge Sort and Divide & Conquer)
- 补充:修改Myeclipse的servlet模板
- Mybatis 相关知识(一)
- JAVA STRING FORMAT 简介
- Eclipse开发Android程序引入第三方jar包的方法
- 常用sql语句
- 算法(二)—分治法Divide-and-conque
- UVA 494-Kindergarten Counting Game
- C++之常量与指针
- HDU 5318(The Goddess Of The Moon-矩阵乘法)[Template:矩阵]
- 九度OJ 题目1075:斐波那契数列
- Android layer-list的属性和使用详解
- 安卓监听ScrollView是否滚动
- c++ primer plus 第七章《编程题7.13.1-求两个数的调和平均数》
- C++学习笔记(一)函数模板与类模板