(四十三)常用 10 种算法——马踏棋盘算法
摘要:###1.马踏棋盘算法介绍和游戏演示 马踏棋盘算法也被称为骑士周游问题 将马随机放在国际象棋的 8×8 棋盘 Board[0~7][0~7]的某个方格中,马按走棋规则(马走日字)进行移动。要求每个方格只进入一次,走遍棋盘上全部 64 个方格 游戏演示: http://www.4399.com/fla
阅读全文
posted @
2021-08-03 14:58
whn051799
阅读(400)
推荐(0)
(四十二)常用 10 种算法——弗洛伊德算法
摘要:###1.弗洛伊德(Floyd)算法介绍 和 Dijkstra 算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法名称以创始人之一、1978 年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名 弗洛伊德算法(Floyd)计算图中各个顶点之间的最
阅读全文
posted @
2021-08-03 14:55
whn051799
阅读(626)
推荐(0)
(四十一)常用 10 种算法——迪杰斯特拉算法
摘要:###1.应用场景-最短路径问题 看一个应用场景和问题: 战争时期,胜利乡有 7 个村庄(A, B, C, D, E, F, G) ,现在有六个邮差,从 G 点出发,需要分别把邮件分别送到A, B, C , D, E, F 六个村庄 各个村庄的距离用边线表示(权) ,比如 A – B 距离 5 公里
阅读全文
posted @
2021-08-02 16:01
whn051799
阅读(431)
推荐(0)
(四十)常用 10 种算法——克鲁斯卡尔算法
摘要:###1.应用场景-公交站问题 看一个应用场景和问题: 某城市新增 7 个站点(A, B, C, D, E, F, G) ,现在需要修路把 7 个站点连通 各个站点的距离用边线表示(权) ,比如 A – B 距离 12 公里 问:如何修路保证各个站点都能连通,并且总的修建公路总里程最短? ###2.
阅读全文
posted @
2021-08-02 10:57
whn051799
阅读(433)
推荐(0)
(三十九)常用 10 种算法——普里姆算法
摘要:###1.应用场景-修路问题 看一个应用场景和问题: 有胜利乡有 7 个村庄(A, B, C, D, E, F, G) ,现在需要修路把 7 个村庄连通 各个村庄的距离用边线表示( 权) 如 ,比如 A – – B 离 距离 5 公里 问:如何修路保证各个村庄都能连通,并且总的修建公路总里程最短?
阅读全文
posted @
2021-07-30 15:56
whn051799
阅读(468)
推荐(0)
(三十八)常用 10 种算法——贪心算法
摘要:###1.应用场景-集合覆盖问题 假设存在下面需要付费的广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有的地区都可以接收到信号 ###2.贪心算法介绍 贪婪算法(贪心算法)是指在对问题进行求解时, 在每一步选择中都采取最好或者最优( 即最有利) 的选择,从而希望能够导致结果是最好
阅读全文
posted @
2021-07-30 15:44
whn051799
阅读(596)
推荐(0)
(三十七)常用 10 种算法——KMP 算法
摘要:###1.应用场景-字符串匹配问题 字符串匹配问题: 有一个字符串 str1= 硅硅谷 尚硅谷你尚硅 尚硅谷你尚硅谷你尚硅你好,和一个子串 str2="尚硅谷你尚硅你" 现在要判断 str1 是否含有 str2, 如果存在,就返回第一次出现的位置, 如果没有,则返回-1 ###2.暴力匹配算法 如果
阅读全文
posted @
2021-07-30 15:32
whn051799
阅读(209)
推荐(0)
(三十六)常用 10 种算法——动态规划算法
摘要:###1.应用场景-背包问题 背包问题:有一个背包,容量为 4 磅 , 现有如下物品 要求达到的目标为装入的背包的总价值最大,并且重量不超出 要求装入的物品不能重复 ###2. 动态规划算法介绍 动态规划(Dynamic Programming)算法的核心思想是:将 大问题划分为小问题进行解决,从而
阅读全文
posted @
2021-07-28 10:19
whn051799
阅读(969)
推荐(0)
(三十五)常用 10 种算法——分治算法
摘要:###1.分治算法介绍 分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变
阅读全文
posted @
2021-07-27 14:35
whn051799
阅读(437)
推荐(0)
(三十四)常用 10 种算法——二分查找算法(非递归)
摘要:###1.二分查找算法(非递归)介绍 前面我们讲过了二分查找算法,是使用递归的方式,下面我们讲解二分查找算法的非递归方式 二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找 二分查找法的运行时间为对数时间 O(㏒₂n) ,即查找到需要的目标位置最多只需要㏒₂n 步,
阅读全文
posted @
2021-07-27 14:30
whn051799
阅读(296)
推荐(0)
(三十三)图——遍历(深度优先遍历和广度优先遍历)
摘要:图遍历介绍: 所谓图的遍历,即是对结点的访问。一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略: (1)深度优先遍历 (2)广度优先遍历 ###1.图的深度优先遍历介绍 ####1.1.深度优先遍历基本思想 图的深度优先搜索(Depth First Search) 深度优先遍
阅读全文
posted @
2021-07-27 14:26
whn051799
阅读(637)
推荐(0)
(三十二)图——基本介绍
摘要:###1.为什么要有图 前面我们学了线性表和树 线性表局限于一个直接前驱和一个直接后继的关系 树也只能有一个直接前驱也就是父节点 当我们需要 表示多对多的关系时, 这里我们就用到了图 ###2.图的举例说明 图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以
阅读全文
posted @
2021-07-27 14:08
whn051799
阅读(70)
推荐(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
阅读(179)
推荐(0)
(三十)多路查找树——2-3 树
摘要:###1. 2-3 树是最简单的 B 树结构, 具有如下特点: 2-3 树的所有叶子节点都在同一层.(只要是 B 树都满足这个条件) 有两个子节点的节点叫二节点,二节点要么没有子节点,要么有两个子节点 有三个子节点的节点叫三节点,三节点要么没有子节点,要么有三个子节点 2-3 树是由二节点和三节点构
阅读全文
posted @
2021-07-27 11:44
whn051799
阅读(70)
推荐(0)
(二十九)多路查找树——二叉树与 B 树
摘要:###1.二叉树的问题分析 二叉树的操作效率较高,但是也存在问题, 请看下面的二叉树 二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如 1 亿), 就存在如下问题: 问题 1:在构建二叉树时,需要多次进行 i/o 操作(海量数据存在数据库或文件中),节点海量,
阅读全文
posted @
2021-07-27 11:37
whn051799
阅读(68)
推荐(0)
(二十八)树结构实际应用——平衡二叉树(AVL 树)
摘要:###1.看一个案例(说明二叉排序树可能的问题) 给你一个数列{1,2,3,4,5,6},要求创建一颗二叉排序树(BST), 并分析问题所在 左边 BST 存在的问题分析: 左子树全部为空,从形式上看,更像一个单链表. 插入速度没有影响 查询速度明显降低(因为需要依次比较), 不能发挥 BST的优势
阅读全文
posted @
2021-07-27 11:29
whn051799
阅读(316)
推荐(0)
(二十七)树结构实际应用——二叉排序树
摘要:###1.先看一个需求 给你一个数列 (7, 3, 10, 12, 5, 1, 9),要求能够高效的完成对数据的查询和添加 ###2.解决方案分析 使用数组 数组未排序, 优点:直接在数组尾添加,速度快。 缺点:查找速度慢 数组排序,优点:可以使用二分查找,查找速度快,缺点:为了保证数组有序,在添加
阅读全文
posted @
2021-07-27 11:14
whn051799
阅读(158)
推荐(0)
(二十六)树结构实际应用——赫夫曼编码
摘要:###1. 基本介绍 赫夫曼编码也翻译为 哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式, 属于一种程序算法 赫夫曼编码是赫哈夫曼树在电讯通信中的经典的应用之一 赫夫曼编码广泛地用于数据文件压缩。其压缩率通常在 20%~90%之间 赫夫曼码是可变字长编码(VLC)的一种。
阅读全文
posted @
2021-07-27 10:56
whn051799
阅读(208)
推荐(0)
(二十五)树结构实际应用——赫夫曼树
摘要:###1.基本介绍 给定 n 个权值作为 n 个叶子结点,构造一棵二叉树, 若该树的带权路径长度(wpl) 达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree), 还有的书翻译为霍夫曼树。 赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近。 ###2.赫夫曼树几个重
阅读全文
posted @
2021-07-14 15:07
whn051799
阅读(173)
推荐(0)
(二十四)树结构实际应用——堆排序
摘要:###1.堆排序基本介绍 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为 O(nlogn),它也是不稳定排序。 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆, 注意 : 没有要求结点的左孩子的值和右孩子
阅读全文
posted @
2021-07-14 14:57
whn051799
阅读(93)
推荐(0)