算法学习
刘先生生
这个作者很懒,什么都没留下…
展开
-
欧几里得算法求最大公约数和最小公倍数
/* * 求解最大公约数(递归实现) */ public static int gcd(int a, int b) { if (a < 0 || b < 0) return -1; if (b == 0) return a; return gcd(b, a % b); } /* * 求解最大公约数(非递归实现) */ public static int gcd1(int a, int b) { int temp; while .原创 2020-11-15 22:14:37 · 294 阅读 · 0 评论 -
Floyd算法
1、算法介绍1,从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。2,对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从 u 到 w 再到 v 比已知的路径更短。如果是更新它。把图用邻接矩阵G表示出来,如果从Vi到Vj有路可达,则G[i][j]=d,d表示该路的长度;否则G[i][j]=无穷大。定义一个矩阵D用来记录所插入点的信息,D[i][j]表示从Vi到Vj需要经过的点,初始化D[i][j]=j。把各个顶点插入图中,比较插点后的距离与原来的距离,G原创 2020-11-15 22:08:49 · 941 阅读 · 0 评论 -
Djikstra算法
vector<int> Djikstra1 (vector<vector<int> > &graph,int start){ int n = graph.size(); //存储途中的顶点个数 vector<int> visit(n,0); //标记已作为中间节点完成访问的顶点 vector<int> dist(n,0); //存储从起点start到其他顶点的最短路径 for(int i=0;i<n;原创 2020-11-07 18:55:06 · 608 阅读 · 1 评论 -
快速幂
快速幂(Exponentiation by squaring,平方求幂)是一种简单而有效的小算法,它可以以[公式]的时间复杂度计算乘方。快速幂不仅本身非常常见,而且后续很多算法也都会用到快速幂。让我们先来思考一个问题:7的10次方,怎样算比较快?方法1:最朴素的想法,77=49,497=343,… 一步一步算,共进行了9次乘法。这样算无疑太慢了,尤其对计算机的CPU而言,每次运算只乘上一个个位数,无疑太屈才了。这时我们想到,也许可以拆分问题。方法2:先算7的5次方,即77777,再算它的平方,共进原创 2020-11-06 11:59:57 · 445 阅读 · 0 评论 -
广度优先搜索--BFS
BFS介绍BFS,其英文全称是Breadth First Search。 BFS并不使用经验法则算法。从算法的观点,所有因为展开节点而得到的子节点都会被加进一个先进先出的队列中。一般的实验里,其邻居节点尚未被检验过的节点会被放置在一个被称为 open 的容器中(例如队列或是链表),而被检验过的节点则被放置在被称为 closed 的容器中。宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽原创 2020-08-20 18:37:57 · 223 阅读 · 0 评论 -
深度优先搜索--DFS
算法介绍作为搜索算法的一种,DFS对于寻找一个解的NP(包括NPC)问题作用很大。但是,搜索算法毕竟是时间复杂度是O(n!)的阶乘级算法,它的效率非常低,在数据规模变大时,这种算法就显得力不从心了。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。属于盲目搜索。总结来说就是,这个算法运用的时候就是找一个头结点,然后沿着这个头原创 2020-08-18 19:04:35 · 203 阅读 · 0 评论 -
回溯算法
概念回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。简记基本思想从一条路往前走,能进则进,不能进则退回来,换一条路再试。回溯在迷宫搜索中使原创 2020-08-06 11:18:55 · 5513 阅读 · 0 评论 -
贪心算法
贪心算法思想:顾名思义,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。贪心算法的基本要素:1、贪心选择性质。所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达原创 2020-08-05 12:51:32 · 15978 阅读 · 4 评论