1. 穷举思想
基本思想:在所有可能的情况中,搜索正确的答案。
方式:循环、条件判断
适用:没有明显规律可循的场景
举例:鸡兔同笼
鸡兔同笼问题:
今有鸡兔同笼,上有三十五头,下有九十四足,问鸡兔各几何?
public class Main {
public static void main(String[] args) {
int chickedCount = 0;
int rabbitCount = 0;
for (int i = 1; i <= 35; i++) {
int j = 35 - i;
int footCount = 2 * i + 4 * j;
if (footCount == 94) {
chickedCount = i;
rabbitCount = j;
break;
}
}
System.out.println("鸡有:" + chickedCount);
System.out.println("兔有:" + rabbitCount);
}
}
2. 递推思想
基本思想:根据问题导出明确的计算公式
适用:有明显公式规律的场合
举例:兔子产仔问题
兔子产仔问题:
如果一对两个月大的兔子以后每一个月都可以生一对小兔子,一对新生的兔子出生两个月后才可以生小兔子。假定一年内没有兔子死亡事件,那么一年后共有多少对兔子?
public class Main {
public static void main(String[] args) {
int a12 = countFn(12);
System.out.println(a12);
}
private static int countFn(int n) {
if (n == 1 || n == 2) {
return 1;
}
return countFn(n - 1) + countFn(n - 2);
}
}
3. 分治思想
基本思想:待求解问题化简为若干个小规模相同问题,通过逐步划分,达到一个易于求解阶段而直接求解。
举例:寻找假币问题
寻找假币问题:
一个袋子里有 30 个硬币,其中一枚是假币,并且假币和真币一样,肉眼很难分辨,目前只知道假币比真币重量轻一点,请问如何区分出假币?
思想:暴力算法、分治算法(分而治之、递归思想)、动态规划、贪心、回溯法、分治界限法
技术:递归、迭代
比较笨的枚举算法思想
聪明一点的递推算法思想
充分利用自己的递归算法思想
各个击破的分治算法思想
贪心算法思想并不贪婪
试探法算法思想是一种委婉的做法
迭代算法
模拟算法思想