随笔分类 - 简单算法
摘要:马踏棋盘问题 回溯算法 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。 回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就
阅读全文
摘要:弗洛伊德(Floyd)算法介绍 和Dijkstra 算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法名称以创始人之一、1978 年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名 弗洛伊德算法(Floyd)计算图中各个顶点之间的最短路径 迪杰
阅读全文
摘要:概述 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。迪杰斯特拉算法采用的是贪心策略,将Graph中的节点集分为最短
阅读全文
摘要:应用场景-公交站问题 看一个应用场景和问题: 某城市新增 7 个站点 (A, B, C, D, E, F, G) ,现在需要修路把 7 个站点连通 各个站点的距离用边线表示 ( 权 ) ,比如 A – B 距离 12 公里 问:如何修路保证各个站点都能连通,并且总的修建公路总里程最短 ? 克鲁斯卡尔
阅读全文
摘要:普里姆算法 普利姆(Prim)算法求最小生成树,也就是在包含n个顶点的连通图中,找出只有(n-1)条边包含所有n个顶点的连通子图,也就是所谓的极小连通子图。 算法如下。 1 设G=(V,E)是连通网,T=(U,D)是最小生成树,V,U是顶点集合,E,D是边的集合。 2 若从顶点u开始构造最小生成树,
阅读全文
摘要:贪心算法的核心就是:在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法。 假设存在下面需要付费的广播台,以及广播台信号可以覆盖的地区。如何选择最少的广播台,让所有的地区 都可以接收到信号。 思路: 1)遍历所有的广播电台, 找到一个覆盖了最多未覆盖的地区的电
阅读全文
摘要:1、应用场景-字符串匹配问题 1)有一个字符串 str1= ““硅硅谷 尚硅谷你尚硅 尚硅谷你尚硅谷你尚硅你好””,和一个子串 str2=“尚硅谷你尚硅你” 2)现在要判断 str1 是否含有 str2, 如果存在,就返回第一次出现的位置, 如果没有,则返回-1 2、暴力匹配算法 如果用暴力匹配的思
阅读全文
摘要:动态规划算法介绍 1)动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法 2)动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。 3)与分治法不同的
阅读全文
摘要:分治算法解决汉诺塔问题 我们将 3 个柱子分别命名为起始柱、目标柱和辅助柱。实际上,解决汉诺塔问题是有规律可循的: 当起始柱上只有 1 个圆盘时,我们可以很轻易地将它移动到目标柱上 当起始柱上有 2 个圆盘时,移动过程如下图所示: 当起始柱上有 3 个圆盘时,移动过程如图 ,仔细观察会发现,移动过程
阅读全文
摘要:1.概述 二分查找是针对有序数列的,对无序数列是无效的,在有序序列中使用二分查找能大大提高查找效率。 以升序数列为例,比较一个元素与数列中的中间位置的元素的大小,如果比中间位置的元素大,则继续在后半部分的数列中进行二分查找;如果比中间位置的元素小,则在数列的前半部分进行比较;如果相等,则找到了元素的
阅读全文