![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
一只猪的思考
兴趣使然,随缘更新
展开
-
利用贪心算法优化马踏棋盘算法
马踏棋盘算法介绍和游戏演示1)马踏棋盘算法也被称为骑士周游问题2)将马随机放在国际象棋的8×8棋盘Board[0~7][0~7]的某个方格中,马按走棋规则(马走日字)进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格3)游戏演示: http://www.4399.com/flash/146267_2.htm马踏棋盘游戏代码实现1)马踏棋盘问题(骑士周游问题)实际上是图的深度优先搜索(DFS)的应用。●2)如果使用回溯(就是深度优先搜索)来解决,假如马儿踏了...原创 2020-08-16 10:10:40 · 1138 阅读 · 0 评论 -
弗洛伊德(Floyd)算法解决最短路径问题
弗洛伊德(Floyd)算法介绍1)和Dijkstra算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名2)弗洛伊德算法(Floyd)计算图中各个顶点之间的最短路径3)迪杰斯特拉算法用于计算图中某一个顶点到其他顶点的最短路径。4)弗洛伊德算法 VS 迪杰斯特拉算法:迪杰斯特拉算法通过选定的被访问顶点,求出从出发访问顶点到其他顶点的最短路径;弗洛伊德算法中每一个.原创 2020-08-15 19:59:47 · 3766 阅读 · 0 评论 -
迪杰斯特拉算法(DijkstraAlgorithm)
应用场景-最短路径问题看一个应用场景和问题:1)战争时期,胜利乡有7个村庄(A, B, C, D, E, F, G) ,现在有六个邮差,从G点出发,需要分别把邮件分别送到 A, B, C , D, E, F 六个村庄2)各个村庄的距离用边线表示(权) ,比如 A – B 距离 5公里3)问:如何计算出G村庄到 其它各个村庄的最短距离?4)如果从其它点出发到各个点的最短距离又是多少?迪杰斯特拉(Dijkstra)算法介绍迪杰斯特拉(Dijkstra)算法是典型最短..原创 2020-08-15 18:03:42 · 385 阅读 · 0 评论 -
克鲁斯卡尔算法(Kruskal)详解
应用场景-公交站问题看一个应用场景和问题:1)某城市新增7个站点(A, B, C, D, E, F, G) ,现在需要修路把7个站点连通2)各个站点的距离用边线表示(权) ,比如 A – B 距离 12公里3)问:如何修路保证各个站点都能连通,并且总的修建公路总里程最短?克鲁斯卡尔算法介绍1)克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法。2)基本思想:按照权值从小到大的顺序选择n-1条边,并保证这n-1条边不构成回路3)具体做法:首..原创 2020-08-14 12:12:13 · 39492 阅读 · 7 评论 -
普里姆算法详解
应用场景-修路问题看一个应用场景和问题:1)有胜利乡有7个村庄(A, B, C, D, E, F, G) ,现在需要修路把7个村庄连通2)各个村庄的距离用边线表示(权) ,比如 A – B 距离 5公里3)问:如何修路保证各个村庄都能连通,并且总的修建公路总里程最短?思路: 将10条边,连接即可,但是总的里程数不是最小.正确的思路,就是尽可能的选择少的路线,并且每条路线最小,保证总里程数最少.最小生成树修路问题本质就是就是最小生成树问题, 先介绍一下最小生成..原创 2020-08-13 12:26:58 · 6072 阅读 · 1 评论 -
贪心算法详解
应用场景-集合覆盖问题假设存在下面需要付费的广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有的地区都可以接收到信号 广播台 覆盖地区 K1 "北京", "上海", "天津" K2 "广州", "北京", "深圳" K3 "成都", "上海", "杭州" K4 "上海", "天津" .原创 2020-08-13 11:54:43 · 345 阅读 · 0 评论 -
kmp算法介绍与代码实现
KMP算法介绍1)KMP是一个解决模式串在文本串是否出现过,如果出现过,最早出现的位置的经典算法2)Knuth-Morris-Pratt 字符串查找算法,简称为 “KMP算法”,常用于在一个文本串S内查找一个模式串P 的出现位置,这个算法由Donald Knuth、Vaughan Pratt、James H. Morris三人于1977年联合发表,故取这3人的姓氏命名此算法.3)KMP方法算法就利用之前判断过信息,通过一个next数组,保存模式串中前后最长公共子序列的长度,每次回溯时,通过n.原创 2020-08-12 13:23:13 · 222 阅读 · 0 评论 -
字符串暴力匹配算法
暴力匹配算法如果用暴力匹配的思路,并假设现在str1匹配到 i 位置,子串str2匹配到 j 位置,则有:1)如果当前字符匹配成功(即str1[i] == str2[j]),则i++,j++,继续匹配下一个字符2)如果失配(即str1[i]! = str2[j]),令i = i - (j - 1),j = 0。相当于每次匹配失败时,i 回溯,j 被置为0。3)用暴力方法解决的话就会有大量的回溯,每次只移动一位,若是不匹配,移动到下一位接着判断,浪费了大量的时间。(不可行!)4)暴力匹.原创 2020-08-12 12:34:32 · 411 阅读 · 0 评论 -
动态规划 01背包问题
应用场景-背包问题背包问题:有一个背包,容量为4磅 , 现有如下物品 物品 重量 价格 吉他(G) 1 1500 音响(S) 4 3000 电脑(L) 3 2000 1)要求达到的目标为装入的背包的总价值最大,并且重量不超出2)要求装入..原创 2020-08-11 19:38:42 · 181 阅读 · 0 评论 -
运用分治算法解决汉诺塔问题
分治算法介绍1)分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……2)分治算法可以求解的一些经典问题•二分搜索•大整数乘法•棋盘覆盖•合并排序•快速排序•线性时间选择•最接近点对问题•循环赛日程表•汉诺塔..原创 2020-08-11 10:57:54 · 599 阅读 · 0 评论