算法的概念
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。
- 描述:算法是一种解决特定问题的思路
- 常见算法:
递归
概念 递归,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。也就是说,递归算法是一种直接或者间接调用自身函数或者方法的算法。
递归三要素
- 递归结束条件:既然是循环就必须要有结束,不结束就会OOM了
- 函数的功能:这个函数要干什么,打印,计算…
- 函数的等价关系式:递归公式,一般是每次执行之间,或者与个数之间的逻辑关系
Demo案例
public class PrintHelloWorld {
public static void print(String ss, int n) {
if(n>0){
System.out.println(ss);
print(ss,n-1);
}
}
public static void main(String[] args) {
print("Hello World", 5);
}
}
public class FibonacciSequenceTest {
public static int fun2(int n) {
if (n <= 1) return n;
return fun2(n - 1) + fun2(n - 2);
}
public static void main(String[] args) {
System.out.println(fun2(9));
}
}
规律:从第3个数开始,每个数等于前面两个数的和递归分析:函数的功能:返回n的前两个数的和递归结束条件:从第三个数开始,n<=2函数的等价关系式:fun(n)=fun(n-1)+fun(n-2)
分治算法
概念 分治算法(divide and conquer)的核心思想其实就是四个字,分而治之 ,也就是将原问题划分成 n个规模较小,并且结构与原问题相似的子问题,递归地解决这些子问题,然后再合并其结果,就得到原问题的解。 关于分治和递归的区别 分治算法是一种处理问题的思想,递归是一种编程技巧 分治算法的递归实现中,每一层递归都会涉及这样三个操作:
- 分解:将原问题分解成一系列子问题
- 解决:递归地求解各个子问题,若子问题足够小,则直接求解
- 合并:将子问题的结果合并成原问题
Demo案例: 将字符串中的小写字母转化为大写字母“abcde”转化为"ABCDE" 利用分治的思想将整个字符串转化成一个一个的字符处理
public class CharUpCase {
public static char[] toUpCase(char[] arr,int i){
if(i>=arr.length){
return arr;
}
arr[i]=toUpCaseUnit(arr[i]);
return toUpCase(arr,i+1);
}
private static char toUpCaseUnit(char a){
if((int)a<97||(int)a>122){
return ' ';
}
return (char)Integer.parseInt(String.valueOf((int)a-32));
}
public static void main(String[] args) {
char[] arr=toUpCase("abcdde".toCharArray(),0);
System.out.println(arr);
}
}
public class Pow {
public static int dividpow(int x,int n){
if(n==1){
return x;
}
int half=dividpow(x,n/2);
if(n%2==0){
return half*half;
} else {
return half*half*x;
}
}
public static void main(String[] args) {
System.out.println(dividpow(2,10));
}
}
贪心算法
回溯算法
动态规划
0-1背包问题
|