(三十九)常用 10 种算法——普里姆算法
摘要:###1.应用场景-修路问题 看一个应用场景和问题: 有胜利乡有 7 个村庄(A, B, C, D, E, F, G) ,现在需要修路把 7 个村庄连通 各个村庄的距离用边线表示( 权) 如 ,比如 A – – B 离 距离 5 公里 问:如何修路保证各个村庄都能连通,并且总的修建公路总里程最短?
阅读全文
posted @
2021-07-30 15:56
whn051799
阅读(487)
推荐(0)
(三十八)常用 10 种算法——贪心算法
摘要:###1.应用场景-集合覆盖问题 假设存在下面需要付费的广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有的地区都可以接收到信号 ###2.贪心算法介绍 贪婪算法(贪心算法)是指在对问题进行求解时, 在每一步选择中都采取最好或者最优( 即最有利) 的选择,从而希望能够导致结果是最好
阅读全文
posted @
2021-07-30 15:44
whn051799
阅读(609)
推荐(0)
(三十七)常用 10 种算法——KMP 算法
摘要:###1.应用场景-字符串匹配问题 字符串匹配问题: 有一个字符串 str1= 硅硅谷 尚硅谷你尚硅 尚硅谷你尚硅谷你尚硅你好,和一个子串 str2="尚硅谷你尚硅你" 现在要判断 str1 是否含有 str2, 如果存在,就返回第一次出现的位置, 如果没有,则返回-1 ###2.暴力匹配算法 如果
阅读全文
posted @
2021-07-30 15:32
whn051799
阅读(227)
推荐(0)
(三十六)常用 10 种算法——动态规划算法
摘要:###1.应用场景-背包问题 背包问题:有一个背包,容量为 4 磅 , 现有如下物品 要求达到的目标为装入的背包的总价值最大,并且重量不超出 要求装入的物品不能重复 ###2. 动态规划算法介绍 动态规划(Dynamic Programming)算法的核心思想是:将 大问题划分为小问题进行解决,从而
阅读全文
posted @
2021-07-28 10:19
whn051799
阅读(998)
推荐(0)
(三十五)常用 10 种算法——分治算法
摘要:###1.分治算法介绍 分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变
阅读全文
posted @
2021-07-27 14:35
whn051799
阅读(451)
推荐(0)
(三十四)常用 10 种算法——二分查找算法(非递归)
摘要:###1.二分查找算法(非递归)介绍 前面我们讲过了二分查找算法,是使用递归的方式,下面我们讲解二分查找算法的非递归方式 二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找 二分查找法的运行时间为对数时间 O(㏒₂n) ,即查找到需要的目标位置最多只需要㏒₂n 步,
阅读全文
posted @
2021-07-27 14:30
whn051799
阅读(312)
推荐(0)
(三十三)图——遍历(深度优先遍历和广度优先遍历)
摘要:图遍历介绍: 所谓图的遍历,即是对结点的访问。一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略: (1)深度优先遍历 (2)广度优先遍历 ###1.图的深度优先遍历介绍 ####1.1.深度优先遍历基本思想 图的深度优先搜索(Depth First Search) 深度优先遍
阅读全文
posted @
2021-07-27 14:26
whn051799
阅读(644)
推荐(0)
(三十二)图——基本介绍
摘要:###1.为什么要有图 前面我们学了线性表和树 线性表局限于一个直接前驱和一个直接后继的关系 树也只能有一个直接前驱也就是父节点 当我们需要 表示多对多的关系时, 这里我们就用到了图 ###2.图的举例说明 图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以
阅读全文
posted @
2021-07-27 14:08
whn051799
阅读(74)
推荐(0)
(三十一)多路查找树——B 树、B+树和 B*树
摘要:###1. B 树的介绍 B-tree 树即 B 树,B 即 Balanced,平衡的意思。有人把 B-tree 翻译成 B-树,容易让人产生误解。会以为 B-树是一种树,而 B 树又是另一种树。实际上,B-tree 就是指的 B 树。 前面已经介绍了 2-3 树和 2-3-4 树,他们就是 B 树
阅读全文
posted @
2021-07-27 11:51
whn051799
阅读(185)
推荐(0)
(三十)多路查找树——2-3 树
摘要:###1. 2-3 树是最简单的 B 树结构, 具有如下特点: 2-3 树的所有叶子节点都在同一层.(只要是 B 树都满足这个条件) 有两个子节点的节点叫二节点,二节点要么没有子节点,要么有两个子节点 有三个子节点的节点叫三节点,三节点要么没有子节点,要么有三个子节点 2-3 树是由二节点和三节点构
阅读全文
posted @
2021-07-27 11:44
whn051799
阅读(85)
推荐(0)
(二十九)多路查找树——二叉树与 B 树
摘要:###1.二叉树的问题分析 二叉树的操作效率较高,但是也存在问题, 请看下面的二叉树 二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如 1 亿), 就存在如下问题: 问题 1:在构建二叉树时,需要多次进行 i/o 操作(海量数据存在数据库或文件中),节点海量,
阅读全文
posted @
2021-07-27 11:37
whn051799
阅读(79)
推荐(0)
(二十八)树结构实际应用——平衡二叉树(AVL 树)
摘要:###1.看一个案例(说明二叉排序树可能的问题) 给你一个数列{1,2,3,4,5,6},要求创建一颗二叉排序树(BST), 并分析问题所在 左边 BST 存在的问题分析: 左子树全部为空,从形式上看,更像一个单链表. 插入速度没有影响 查询速度明显降低(因为需要依次比较), 不能发挥 BST的优势
阅读全文
posted @
2021-07-27 11:29
whn051799
阅读(320)
推荐(0)
(二十七)树结构实际应用——二叉排序树
摘要:###1.先看一个需求 给你一个数列 (7, 3, 10, 12, 5, 1, 9),要求能够高效的完成对数据的查询和添加 ###2.解决方案分析 使用数组 数组未排序, 优点:直接在数组尾添加,速度快。 缺点:查找速度慢 数组排序,优点:可以使用二分查找,查找速度快,缺点:为了保证数组有序,在添加
阅读全文
posted @
2021-07-27 11:14
whn051799
阅读(173)
推荐(0)
(二十六)树结构实际应用——赫夫曼编码
摘要:###1. 基本介绍 赫夫曼编码也翻译为 哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式, 属于一种程序算法 赫夫曼编码是赫哈夫曼树在电讯通信中的经典的应用之一 赫夫曼编码广泛地用于数据文件压缩。其压缩率通常在 20%~90%之间 赫夫曼码是可变字长编码(VLC)的一种。
阅读全文
posted @
2021-07-27 10:56
whn051799
阅读(231)
推荐(0)
(二十五)树结构实际应用——赫夫曼树
摘要:###1.基本介绍 给定 n 个权值作为 n 个叶子结点,构造一棵二叉树, 若该树的带权路径长度(wpl) 达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree), 还有的书翻译为霍夫曼树。 赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近。 ###2.赫夫曼树几个重
阅读全文
posted @
2021-07-14 15:07
whn051799
阅读(184)
推荐(0)
(二十四)树结构实际应用——堆排序
摘要:###1.堆排序基本介绍 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为 O(nlogn),它也是不稳定排序。 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆, 注意 : 没有要求结点的左孩子的值和右孩子
阅读全文
posted @
2021-07-14 14:57
whn051799
阅读(101)
推荐(0)
(二十三)树结构的基础——线索化二叉树
摘要:###1.先看一个问题 将数列 {1, 3, 6, 8, 10, 14 } 构建成一颗二叉树. n+1=7 问题分析: 当我们对上面的二叉树进行中序遍历时,数列为 {8, 3, 10, 1, 6, 14 } 但是 6, 8, 10, 14 这几个节点的 左右指针,并没有完全的利用上. 如果我们希望充
阅读全文
posted @
2021-07-14 11:50
whn051799
阅读(125)
推荐(0)
(二十二)树结构的基础——顺序存储二叉树
摘要:###1. 顺序存储二叉树的概念 基本说明 从数据存储来看,数组存储方式和树的存储方式可以相互转换,即 数组可以转换成树, 树也可以转换成数组,看右面的示意图。 要求: 右图的二叉树的结点,要求以数组的方式来存放 arr : [1, 2, 3, 4, 5, 6, 6] 要求在遍历数组 arr 时,仍
阅读全文
posted @
2021-07-14 11:35
whn051799
阅读(359)
推荐(0)
(二十一)树结构的基础——二叉树
摘要:###1.为什么需要树这种数据结构 数组存储方式的分析 优点:通过 下标方式访问元素,速度快。对于有序数组,还可使用 二分查找提高检索速度。 缺点:如果要检索具体某个值,或者 插入值( 按一定顺序) 会整体移动,效率较低 [示意图] 画出操作示意图: 链式存储方式的分析 优点:在一定程度上对数组存储
阅读全文
posted @
2021-07-14 11:27
whn051799
阅读(132)
推荐(0)
(二十)哈希表
摘要:###1.哈希表(散列)-Google 上机题 看一个实际需求,google 公司的一个上机题: 有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,住址..),当输入该员工的id时,要求查找到该员工的 所有信息. 要求: 不使用数据库,尽量节省内存,速度越快越好=>哈希表(
阅读全文
posted @
2021-07-14 10:32
whn051799
阅读(54)
推荐(0)
(十九)查找算法——斐波那契(黄金分割法)查找
摘要:###1.斐波那契(黄金分割法)查找基本介绍: 黄金分割点是指把一条线段分割为两部分,使其中一部分与全长之比等于另一部分与这部分之比。取其前三位数字的近似值是 0.618。由于按此比例设计的造型十分美丽,因此称为黄金分割,也称为中外比。这是一个神奇的数字,会带来意向不大的效果。 斐波那契数列 {1,
阅读全文
posted @
2021-07-14 10:17
whn051799
阅读(777)
推荐(0)
(十八)查找算法——插值查找
摘要:插值查找原理介绍: 插值查找算法类似于二分查找,不同的是插值查找每次从自适应 mid 处开始查找。 将折半查找中的求 mid 索引的公式 , low 表示左边索引 left, high 表示右边索引 right.key 就是前面我们讲的 findVal int mid = low + (high -
阅读全文
posted @
2021-07-14 10:09
whn051799
阅读(223)
推荐(0)
(十七)查找算法——二分查找
摘要:###1.二分查找: 请对一个有序数组进行二分查找 {1,8, 10, 89, 1000, 1234} ,输入一个数看看该数组是否存在此数,并且求出下标,如果没有就提示"没有这个数"。 ###2.二分查找算法的思路 ###3.二分查找的代码 明:增加了找到所有的满足条件的元素下标: 课后思考题: {
阅读全文
posted @
2021-07-14 10:05
whn051799
阅读(76)
推荐(0)
(十六)查找算法
摘要:###1.查找算法介绍 在 java 中,我们常用的查找有四种: 顺序(线性)查找 二分查找/折半查找 插值查找 斐波那契查找 ###2.线性查找算法 有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含此名称【顺序查找】 要求: 如果找到了,就提示找到,并给出下标
阅读全文
posted @
2021-07-14 09:59
whn051799
阅读(40)
推荐(0)
(十五)常用排序算法总结和对比
摘要:###1.一张排序算法的比较图 ###2.相关术语解释: 稳定:如果 a 原本在 b 前面,而 a=b,排序之后 a 仍然在 b 的前面; 不稳定:如果 a 原本在 b 的前面,而 a=b,排序之后 a 可能会出现在 b 的后面; 内排序:所有排序操作都在内存中完成; 外排序:由于数据太大,因此把数
阅读全文
posted @
2021-07-14 09:54
whn051799
阅读(76)
推荐(0)
(十四)排序——基数
摘要:###1.基数排序(桶排序)介绍: 基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或 bin sort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用 基数排序法是属于稳定性的排
阅读全文
posted @
2021-07-14 09:42
whn051799
阅读(105)
推荐(0)
(十三)排序——归并
摘要:###1. 归并排序介绍: 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的 分治 (divide-and-conquer )策略(分治法将问题分(divide)成一些 小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治
阅读全文
posted @
2021-07-14 09:29
whn051799
阅读(66)
推荐(0)
(十二)排序——快速
摘要:###1.快速排序法介绍: 快速排序(Quicksort)是对 冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列 ##
阅读全文
posted @
2021-07-14 09:22
whn051799
阅读(68)
推荐(0)
(十一)排序——希尔
摘要:###1.简单插入排序存在的问题 我们看简单的插入排序可能存在的问题. 数组 arr = {2,3,4,5,6,1} 这时需要插入的数 1( 最小), 这样的过程是: {2,3,4,5,6,6} {2,3,4,5,5,6} {2,3,4,4,5,6} {2,3,3,4,5,6} {2,2,3,4,5
阅读全文
posted @
2021-07-13 15:50
whn051799
阅读(53)
推荐(0)
(十)排序——插入
摘要:###1.插入排序法介绍 插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。 ###2.插入排序法思想 插入排序(Insertion Sorting)的基本思想是:把n 个待排序的元素看成为一个有序表和一个无序表,开始时 有序表中只包含一个元素,无序表中
阅读全文
posted @
2021-07-13 15:29
whn051799
阅读(52)
推荐(0)
(九)排序——选择
摘要:###1.基本介绍 选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。 ###2.选择排序思想: 选择排序(select sorting)也是一种简单的排序方法。它的基本思想是:第一次从 arr[0]~arr[n-1]中选取最小值,与 arr
阅读全文
posted @
2021-07-13 15:14
whn051799
阅读(65)
推荐(0)
(八)排序——冒泡
摘要:###1.基本介绍 冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始), 依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。 优化: 因为排序的过程中,各元素不断接近自己的位置, 如果一趟比较下
阅读全文
posted @
2021-07-13 15:03
whn051799
阅读(73)
推荐(0)
(七)排序算法
摘要:###1.排序算法的介绍 排序也称排序算法(SortAlgorithm),排序是将 一组数据,依 指定的顺序进行 排列的过程。 ###2.排序的分类: 内部排序: 指将需要处理的所有数据都加载到 内部存储器( 内存)中进行排序。 外部排序法: 数据量过大,无法全部加载到内存中,需要借助 外部存储(
阅读全文
posted @
2021-07-13 14:50
whn051799
阅读(98)
推荐(0)
(六)递归
摘要:###1.递归应用场景 看个实际应用场景,迷宫问题(回溯), 递归(Recursion) ###2.递归的概念 简单的说: 递归就是方法自己调用自己,每次调用时 传入不同的变量.递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。 ###3.递归调用机制 我列举两个小案例,来帮助大家理解递归,部
阅读全文
posted @
2021-07-13 11:51
whn051799
阅读(63)
推荐(0)
(五)栈
摘要:###1.栈的一个实际需求 请输入一个表达式 计算式:[722-5+1-5+3-3] 点击计算【如下图】 请问: 计算机底层是如何运算得到结果的? 注意不是简单的把算式列出运算,因为我们看这个算式 7 * 2 * 2 -5, 但是计算机怎么理解这个算式的(对计算机而言,它接收到的就是一个字符串),我
阅读全文
posted @
2021-07-13 11:27
whn051799
阅读(151)
推荐(0)
(四)链表
摘要:###1.链表(Linked List)介绍 链表是有序的列表,但是它在内存中是存储如下 小结上图: 链表是以节点的方式来存储, 是链式存储 每个节点包含 data 域, next 域:指向下一个节点 如图:发现 链表的各个节点不一定是连续存储 链表分 带头节点的链表和 没有头节点的链表,根据实际的
阅读全文
posted @
2021-07-13 10:25
whn051799
阅读(88)
推荐(0)
(三)队列
摘要:###1.队列的一个使用场景 银行排队的案例: ###2.队列介绍 队列是一个 有序列表,可以用 数组或是 链表来实现。 遵循 先入先出的原则。即: 先存入队列的数据,要先取出。后存入的要后取出 示意图:(使用数组模拟队列示意图) ###3.数组模拟队列思路 队列本身是有序列表,若使用数组的结构来存
阅读全文
posted @
2021-07-12 10:52
whn051799
阅读(65)
推荐(0)
(二)稀疏数组
摘要:###1.稀疏 sparsearray 数组 ####1.1.先看一个实际的需求 编写的五子棋程序中,有存盘退出和续上盘的功能。 分析问题: 因为该二维数组的很多值是默认值 0, 因此记录了 很多没有意义的数据-> 稀疏数组 ####1.2.基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组
阅读全文
posted @
2021-07-12 10:26
whn051799
阅读(62)
推荐(0)
(一)数据结构和算法概述
摘要:###1.数据结构和算法内容介绍 ####1.1.先看几个经典的算法面试题 字符串匹配问题: 有一个字符串 str1= "硅硅谷 尚硅谷你尚硅 尚硅谷你尚硅谷你尚硅你好",和一个子串 str2="尚硅谷你尚硅你" 现在要判断 str1 是否含有 str2, 如果存在,就返回第一次出现的位置, 如果没
阅读全文
posted @
2021-07-12 10:07
whn051799
阅读(220)
推荐(0)
(一)转载-SpringMVC工作原理详解
摘要:转自:https://www.fangzhipeng.com/javainterview/2019/08/25/ssm-mvc.html ###1.先来看一下什么是 MVC 模式 MVC 是一种设计模式. MVC 的原理图如下: ###2.SpringMVC 简单介绍 SpringMVC 框架是以请
阅读全文
posted @
2021-07-07 11:44
whn051799
阅读(73)
推荐(0)
(二)转载-Spring AOP是什么?你都拿它做什么?
摘要:转自:我叫刘半仙, https://my.oschina.net/liughDevelop/blog/1457097 为什么会有面向切面编程(AOP)?我们知道Java是一个面向对象(OOP)的语言,但它有一些弊端,比如当我们需要为多个不具有继承关系的对象引入一个公共行为,例如日志、权限验证、事务等
阅读全文
posted @
2021-07-07 11:12
whn051799
阅读(79)
推荐(0)
(一)转载-谈谈你对SpringAOP的了解
摘要:地址:https://www.fangzhipeng.com/javainterview/2019/08/26/ssm-aop-un.html ###1、引言 众所周知,一旦提到AOP,相信大家都是条件反射的想到JDK代理和CGLib代理,没错,这两个代理都是在运行时内存中临时生成代理类,故而又称作
阅读全文
posted @
2021-07-07 10:41
whn051799
阅读(55)
推荐(0)