
算法那点事
分享一些学习心得
千楼
这个作者很懒,什么都没留下…
展开
-
经典算法kmp实现
public class Code { public static int getIndexOf(String s, String m) { if (s == null || m == null || m.length() < 1 || s.length() < m.length()) { return -1; } char[] str1 = s.toCharArray(); char[] str2原创 2022-02-09 20:44:42 · 364 阅读 · 0 评论 -
3分钟了解分治
分治,也就是分而治之。 它的一般步骤是: 将原问题分解成若干个规模较小的子问题(子问题和原问题的结构一样,只是规模不一样) 子问题又不断分解成规模更小的子问题,直到不能再分解(直到可以轻易计算出子问题的解 利用子问题的解推导出原问题的解 因此,分治策略非常适合用递归 需要注意的是:子问题之间是相互独立的 分治的应用 快速排序 归并排序 Karatsuba算法(大数乘法) 分治策略通常遵守一种通用模式 解决规模为 n 的问题,分解成 a 个规模为n/b的子问题,然后在 O (n^d) 时间内将子原创 2021-10-03 15:29:31 · 100 阅读 · 0 评论 -
聊聊贪心吧(Greedy)
贪心策略,也称为贪婪策略,每一步都采取当前状态下最优的选择(局部最优解),从而希望推导出全局最优解。 应用: 哈夫曼树 最小生成树算法:Prim、Kruskal 最短路径算法:Dijkstra 练习1:最优装载问题(加勒比海盗) 在北美洲东南部,有一片神秘的海域,是海盗最活跃的加勒比海。有一天,海盗们截获了一艘装满各种各样古董的货船,每一件古董都价值连城,一旦打碎就失去了它的价值,海盗船的载重量为 W,每件古董的重量为 i,海盗们该如何把尽可能多数量的古董装上海盗船? 比如 W 为 30,i 分别为原创 2021-09-25 20:49:13 · 180 阅读 · 0 评论 -
聊聊n皇后
什么是n皇后? 在n×n格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n皇后问题等价于再n×n的棋盘上放置n个皇后,任何2个皇后不妨在同一行或同一列或同一斜线上。 剪枝 + 回溯 解决 思路: 1、查找第一行,从左往右查找,发现合适的位置,放下第一个皇后 2、查找第二行,从左往右查找,发现合适的位置,放下第二个皇后 3、查找第三行,从左往右查找,发现合适的位置,放下第三个皇后 。 。 。 n、查找第n行,从左往右查找,发现合适的位置,放下第n原创 2021-09-23 17:58:50 · 152 阅读 · 0 评论 -
图的遍历(DFS,BFS)
图的遍历:从图中某一顶点出发访问图中其余顶点,且每一个顶点仅被访问一次 图有2种常见的遍历方式(有向图、无向图都适用): 广度优先搜索(Breadth First Search,BFS),又称为宽度优先搜索、横向优先搜索 深度优先遍历(Depth First Search, DFS) 广度优先搜索 理解 类似于树的层序遍历 无向图,从A点开始 第一层: A 第二层: B C D F 第三层: G E H 所以,最终的遍历顺序:A -> B -> C -> D ->原创 2021-09-21 22:27:57 · 237 阅读 · 0 评论 -
图(Graph)的实现
如果所示,一幅图包含了若干个顶点和若干条边,每条边含有权重。 废话不说,下面讲讲如何实现一幅图吧 由图可知,一幅图由两部分组成,顶点和边,而边依赖于顶点,每条边包含了两个顶点和权重,由此可得到,每个顶点可抽象出一个类,每条边可抽象一个类。 顶点: static class Vertex<V, E> { V value; //以当前顶点为起点的边的集合 Set<Edge<V, E>> inEdges = new HashSet&l.原创 2021-09-21 22:15:00 · 413 阅读 · 0 评论