算法
文章平均质量分 77
Colzry
这个作者很懒,什么都没留下…
展开
-
马踏棋盘算法
马踏棋盘算法介绍马踏棋盘算法也被称为骑士周游问题将马随机放在国际象棋的 8×8 棋盘 Board[0~7][0~7]的某个方格中,马按走棋规则(马走日字)进行移动。要求每个方格只进入一次,走遍棋盘上全部 64 个方格马踏棋盘思路马踏棋盘问题(骑士周游问题)实际上是图的深度优先搜索(DFS)的应用。如果使用回溯(就是深度优先搜索)来解决,假如马儿踏了 53 个点,如图:走到了第 53 个,坐标(1,0),发现已经走到尽头,没办法,那就只能回退了,查看其他的路径,就在棋盘上不停的回原创 2021-02-03 14:11:37 · 240 阅读 · 0 评论 -
FloydAlgorithm(弗洛伊德算法)
弗洛伊德(Floyd)算法介绍和 Dijkstra 算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法名称以创始人之一、1978 年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名弗洛伊德算法(Floyd)计算图中各个顶点之间的最短路径迪杰斯特拉算法用于计算图中某一个顶点到其他顶点的最短路径。弗洛伊德算法 VS 迪杰斯特拉算法:迪杰斯特拉算法通过选定的被访问顶点,求出从出发访问顶点到其他顶点的最短路径;弗洛伊德算法中每一个顶点都原创 2021-02-03 14:09:41 · 667 阅读 · 1 评论 -
DijkstraAlgorithm(迪杰斯特拉算法)
迪杰斯特拉(Dijkstra)算法介绍迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个结点到其他结点的最短路径。 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。最短路径最短路径问题是图论研究中的一个经典算法问题,旨在寻找图(由结点和路径组成的)中两结点之间的最短路径,大致可以分为如下几种问题,可无论如何分类问题,其本质思想还是不变的,即,求两点间的最短距离。a) 确定起点的最短路径问题 - 即已知起始结点,求最短路径的问题。b) 确定终点的最短原创 2021-02-03 14:08:08 · 9913 阅读 · 1 评论 -
KruskalAlgorithm(克鲁斯卡尔算法)
KruskalAlgorithm介绍克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法。基本思想:按照权值从小到大的顺序选择 n-1 条边,并保证这 n-1 条边不构成回路具体做法:首先构造一个只含 n 个顶点的森林,然后依权值从小到大从连通网中选择边加入到森林中,并使森林中不产生回路,直至森林变成一棵树为止最小生成树(Minimum Cost Spanning Tree),简称 MST。给定一个带权的无向连通图,如何选取一棵生成树,使树上所有边上权的总和为最小,这叫最小生原创 2021-02-02 22:09:41 · 7944 阅读 · 2 评论 -
Prim Algorithm(普利姆算法)
Prim算法介绍普里姆算法(Prim’s algorithm),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点,且其所有边的权值之和亦为最小。该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克发现;并在1957年由美国计算机科学家罗伯特·普里姆独立发现;1959年,艾兹格·迪科斯彻再次发现了该算法。因此,在某些场合,普里姆算法又被称为DJP算法、亚尔尼克算法或普里姆-亚尔尼克算法。(来源于维基百科)Prim算法描述普利姆(Prim)原创 2021-02-02 22:07:11 · 3470 阅读 · 0 评论 -
Greedy Algorithm(贪心算法)
贪心算法介绍贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优**(即最有利的选择),从而**希望能够导致结果是最好或者最优的算法贪婪算法所得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果贪心算法最佳应用-集合覆盖假设存在如下表的需要付费的广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有的地区都可以接收到信号?广播台覆盖地区K1“北京”, “上海”, “天津”K2“广州”, “北京原创 2021-02-02 22:03:59 · 277 阅读 · 0 评论 -
Dynamic Programming(动态规划)
动态规划算法的介绍动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的 ( 即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解 )动态规划可以通过填表的方式来逐步推进,得到最优解动态规划算法最佳实践-原创 2021-02-02 22:00:03 · 69 阅读 · 0 评论 -
Divide and Conquer(分治算法)
分治算法的介绍分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)分治算法的核心思想分治算法的核心思想就是四个字,分而治之,也就是将原来的问题划分成n个规模较小,并且结构与原问题相似的子问题,递归地解决这些子问题,然后再合并其结果,就得到原问题的解.看起来有原创 2021-02-02 21:57:30 · 555 阅读 · 0 评论