![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 87
江海i
不积小流,无以成江海。
展开
-
算法之动态规划
1. 动态规划(Dynamic Programming)简称DP,是求解最优化问题的常用策略。2. 找零钱题目:leetcode_322_找零钱假设有25、20、5、1的硬币,需要找给客户41的零钱,如何搬到硬币最少?假设dp(n)是凑到 n 分需要的最少硬币个数。如果第一次选择 25 的的硬币,那么dp(n) = dp(n - 25) + 1;如果第一次选择 20 的的硬币,那么dp(n) = dp(n - 20) + 1;如果第一次选择 5 的的硬币,那么dp(n) = dp原创 2022-05-26 15:18:10 · 192 阅读 · 0 评论 -
算法之贪心&分治
1. 贪心(Greedy)贪心策略,也称贪婪策略。每一步都采取当前状态下最优的选择(局部最优解),从而推导出全局最优解。应用:哈夫曼树;Prim、Kruskal;Dijkstra。1.1 加勒比海盗海盗们打劫了古董船,里面的古董都加载连城,打碎就没有加载。设船的载重量为W,没件古董的重量为wi,如何尽可能的多装古董?例如:W = 30;wi分别是:3、5、4、10、7、14、2、11。贪心: 每一次都选择重量最小的古董:/** * @Description 加勒比海盗原创 2022-05-20 20:58:15 · 614 阅读 · 0 评论 -
算法之回溯
1. 回溯(Back Tracking)原创 2022-05-19 20:45:04 · 162 阅读 · 0 评论 -
算法之递归
1. 递归(Rescursion)方法直接或者间接调用自己自身的一种变成编程技巧。1.1 递归调用过程展示Java中调用某方法会先将该方法加入到栈空间,等到方法调用完毕时,弹出栈空间/** * @Description 递归调用展示 * @date 2022/5/17 14:34 */public class ShowRecursion { public static void main(String[] args) { System.out.println(原创 2022-05-18 10:24:57 · 242 阅读 · 0 评论 -
数据结构之图最短路径
1. 最短路径(Shortest Path)两顶点之间权值之和最小的路径。无权图相当于每条边的权值都是1。不能有负权环。有向图的最短路径:从顶点A出发到达其它顶点的最短路径如下表:无法到达的顶点以∞表示无向图的最短路径:也是以A顶点为起点到达其它顶点的最短路径:无权图的最短路径:即把每条边的权值都作为1来看:负权边:只有不存在负权环时才有最短路径。-负权环:不存在最短路径,如果一种绕环,路径值可以达到无穷小。1.1 Dijkstra(迪杰斯特拉算法)1原创 2022-05-16 21:50:39 · 6864 阅读 · 0 评论 -
数据结构之图拓扑排序和最小生成树
1. 拓扑排序(Topological Sort)将AOV网中所有活动排成一个序列,使每个活动的前驱活动都排在该活动前面。1.1 AOV网(Activity On Vertex Network)将一项大的工程分为若干个小的子工程,子工程中可以存在顺序,部分子工程需要等待其它子工程完成后才可以执行。AOV网必须是一个有向完全图:明显可以看出边的终点的顶点依赖于起点的顶点。**前驱活动:**有向边起点的活动称为终点的前驱活动;**后驱活动:**有向边终点的活动称为起点的前驱活动;1.2原创 2022-05-13 20:57:45 · 543 阅读 · 0 评论 -
数据结构之图概念以及深度和广度优先搜索
1. 图(Graph)1.1 基础概念图由**顶点(vertex)和边(edge)**组成,通常表示为G = (V,E)。其中:G表示一个图,V是顶点集,E是边集。V有穷且非空。任意两个顶点之间都可以用边来表示它们之间的关系,E可以是空的。1.2 有向图(Directed Graph)边是有明确方向的。有向无环图(Directed Acyclic Graph,简称 DAG)如果一个有向图,从任意顶点出发无法经过若干条边回到改顶点,就是一个有向无环图。出度、入度原创 2022-05-11 17:15:04 · 852 阅读 · 0 评论 -
排序算法之计数排序和基数排序以及桶排序
这三种排序都不是基于比较的排序,典型的空间换时间算法。1. 计数排序(Counting Sort)1954年提出,适合对一定范围内的整数进行排序。1.0 修改父类因为父类中针对稳定性判断时泛型的其它类,但是当前排序只支持整数,需要修改。 /** * 判断稳定性 * @return */ private boolean isStable(){ if (this instanceof CountingSortPro) return.原创 2022-05-08 21:31:51 · 433 阅读 · 0 评论 -
排序算法之快速排序和希尔排序
1. 快速排序(Quick Sort)1960年由东尼·霍尔发现。1.1 执行流程从序列中选择一个轴点元素pivot;例如:这里选择是索引为 0 的元素进行比较:- 利用pivot将序列分割成两个子序列;将小于piovt的元素放到piovt前面(左侧);将大于piovt的元素放到piovt后面 (右侧);等于pivot的左右都可以。轴点元素 6 将序列分为左右两份:重复上两步操作,直到不能再进行分割(子序列剩下一个元素 )。重复进行分割:直到序列只剩下一个元素,原创 2022-05-07 15:59:02 · 175 阅读 · 0 评论 -
排序算法之归并排序
1. 归并排序(Merge Sort)1945年由冯·诺伊曼提出。1.1 执行流程不断的将当前序列平均分割成2个子序列,直到不能再分割;不断地将2个子序列合并成一个有序序列,直到最终剩下一个有序序列。1.2 分割实现1.3 归并实现两个有序的序列,新建一个序列存储合并之后的序列。从开始比较两个序列的值:显然 3 < 8 ,将3 添加到新序列中,aIndex++;循环比较bIndex索引的值和aIndex索引的值,小的放入新序列中并且索引加一。直到最后全部变原创 2022-05-05 16:07:06 · 257 阅读 · 0 评论 -
排序算法之插入排序
1. 插入排序(Insertion Sort)类似于摸牌时对扑克牌的排序。执行流程:插入排序会将序列分为两部分:头部是已经排序完毕的,尾部是待排序的状态。从头开始扫描每一个元素,每当扫描一个元素,就将他插入到头部合适的位置,使得头部数据依然保持有序。/** * @Description 插入排序实现 * @date 2022/5/3 9:33 */public class InsertionSort<T extends Comparable<T>> e原创 2022-05-03 15:58:40 · 1550 阅读 · 0 评论 -
排序算法之冒泡排序,选择排序以及堆排序
以下的排序算法都是以升序为准。1. 排序(Sorting)即将一个组无序的数据,排序成为升序或者降序。1.1 排序算法分类1.2 排序算法的稳定性(Stability)如果相等的2个元素,在排序前后的相对位置保存不变,那么这是稳定的排序算法。例如:排序前:5 1 3a 4 7 3b;稳定的排序:1 3a 3b 4 5 7;不稳定的排序:1 3b 3a 4 5 7;1.3 原地算法(In-place Algorithm)不依赖额外的资源或者依赖少数的额外资源,仅依靠输.原创 2022-05-02 14:54:03 · 218 阅读 · 0 评论