背包问题
背包问题 在解决 0-1 背包问题时,我们的目标是选择若干物品放入背包,使得背包内物品的总价值最大,同时遵循背包容量的限制。具体来说,给定一组物品,每个物品都有一个 重量 和 价值,并且背包的容量也是有限的。我们需要从这些物品中选择一些,放入容量有限的背包中,要求背包内物品的 总重量不超过背包的容量,而 总价值最大。 0-1 背包的动态规划解法: 设有 $n$个物品,每个物品 $i $的 价值 为 $ v[i]$,重量 为 $w[i]$,背包的最大容量为 $C$。 定义一个二维数组 $ dp[i][j] $,表示考虑前 $ i $ 个物品,背包容量为 $j $ 时,能够获得的最大价值。即$ dp[i][j] $ 是当前背包容量 $j $ 和物品选择方案下的最大价值。 递推公式: 初始化: $dp[0][j] = 0 $(表示没有物品时,背包的最大价值为 0) $dp[i][0] = 0 $(表示背包容量为 0 时,无论选择哪些物品,总价值也为 0) 状态转移: 对于每个物品 $ i $和每个容量 $j$: 如果当前物品的重量 $w[i] >...
汉诺塔问题
汉诺塔问题 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。 思路: 如果是有一个盘, A->C 如果我们有 n >= 2 情况,我们总是可以看做是两个盘——一是最下边的盘,二是上面的其余所有盘 先把 最上面的盘 A->B,中间需借助C盘,即hanoiTower(num-1,a,c,b) 再把最下边的盘 A->C,System.out.println("第"+num+"个盘从 "+"A->C") 最后把B塔的所有盘 从 B->C,中间需借助A盘,即hanoiTower(num-1,b,a,c) 代码实现 HanoiTower 1234567891011121314151617181920212223package...
广度优先搜索
介绍BFS
深度优先搜索
介绍了DFS算法
斐波那契查找
介绍斐波那契查找
插值查找
introduce插值查找算法
二分查找
介绍二分查找的使用、使用条件(有序)
堆排序
介绍了堆排序
基数排序
介绍了基数排序(桶的思想)
归并排序
介绍了归并排序算法,归并归并,先归后并,分而治之。










