![](https://img-blog.csdnimg.cn/20200618105302687.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法
算法
我愿随风而行
已转行
展开
-
算法其实很简单—马踏棋盘算法(骑士周游)
目录1.马踏棋盘算法介绍和游戏演示2.马踏棋盘游戏代码实现3.骑士周游问题的解决步骤和思路4.代码优化5.代码实现1.马踏棋盘算法介绍和游戏演示1)马踏棋盘算法也被称为骑士周游问题2)将马随机放在国际象棋的8X8棋盘Board[0~ 7][0~7]的某个方格中,马按走棋规则(马走日字)进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格3) 游戏演示:http://www.4399.com/flash/146267_2.htm2.马踏棋盘游戏代码实.原创 2020-06-27 18:41:16 · 2712 阅读 · 0 评论 -
算法其实很简单—迪杰斯特拉(Dijkstra)算法
目录1.迪杰斯特拉(Dijkstra)算法介绍2.克鲁斯卡尔最佳实践公交站问题3.迪杰斯特拉(Dijkstra)算法过程4.代码实现1.迪杰斯特拉(Dijkstra)算法介绍迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算-一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广^度优先搜索思想),直到扩展到终点为止。2.克鲁斯卡尔最佳实践公交站问题1)战争时期,胜利乡有7个村庄(A,B,C,D,E,F,G),现在有六个邮差,.原创 2020-06-27 15:49:16 · 729 阅读 · 0 评论 -
算法其实很简单—弗洛伊德(Floyd)算法
目录1.弗洛伊德(Floyd)算法介绍2.弗洛伊德(Floyd)算法最佳应用-最短路径3.弗洛伊德(Floyd)算法图解分析4.代码实现1.弗洛伊德(Floyd)算法介绍1)和Dijkstra算法一 样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法名称以创始人之一、1978年图灵 奖获得者、斯坦福大学计算机科学系教授罗伯特.弗洛伊德命名2)弗洛伊德算法(Floyd)计算图中各个顶点之间的最短路径3)迪杰斯特拉算法用于计算图中某一个顶点到原创 2020-06-27 12:51:51 · 23973 阅读 · 2 评论 -
算法其实很简单—克鲁斯卡尔算法
目录1. 克鲁斯卡尔算法介绍2. 公交站问题2.1 克鲁斯卡尔算法图解2.2 克鲁斯卡尔算法分析2.3 如何判断是否构成回路3. 代码实现1. 克鲁斯卡尔算法介绍1)克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法。(最小生成树也可以通过普里姆算法生成,具体可参考算法其实很简单—普利姆算法)2)基本思想:按照权值从小到大的顺序选择n-1条边,并保证这n-1条边不构成回路3)具体做法:首先构造一一个只含n个顶点的森林,然后依权值从小到大从连通网中选原创 2020-06-18 00:39:40 · 1652 阅读 · 1 评论 -
算法其实很简单—普利姆算法
目录1. 普里姆算法介绍2. 修路问题2.1 题目表述2.2 最小生成树2.3 普利姆算法图解3. 代码实现1. 普里姆算法介绍普利姆(Prim)算法求最小生成树,也就是在包含n个顶点的连通图中,找出只有(n-1)条边包含所有n个顶点的连通子图,也就是所谓的极小连通子图 普利姆的算法如下:设G=(V,E)是连通网, T=(U,D)是最小生成树,V,U是顶点集合,E,D是边的集合 若从顶点u开始构造最小生成树,则从集合V中取出顶点u放入集合U中,标记顶点v的visited原创 2020-06-16 00:27:44 · 1450 阅读 · 3 评论 -
算法其实很简单—贪心算法
算法可以贪心,人不能贪心哦~原创 2020-06-15 22:28:25 · 610 阅读 · 2 评论 -
算法其实很简单—KMP算法
目录1. KMP算法介绍2. KMP算法最佳应用—字符串匹配问题3. 思路4. 代码实现4.1 KMP算法实现4.2 暴力匹配算法实现1. KMP算法介绍KMP是一个解决模式串在文本串是否出现过,如果出现过,最早出现的位置的经典算法 Knuth-Morris-Pratt字符串查找算法,简称为“KMP算法”,常用于在一个文本串S内查找一个模式串P的出现位置,这个算法由Donald Knuth、Vaughan Pratt、James H. Morris三人于1977年联合发表,原创 2020-06-11 00:38:09 · 240 阅读 · 2 评论 -
算法其实很简单—动态规划
1. 动态规划算法介绍动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的算法 动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。 与分治不同的是,适用于动态规划求解的问题,经分解得到的子问题往往不是独立的(即下一个子阶段的求解是建立在上一个子阶段的基础上,进行进一步求解)。 动态规划可以通过填表的方式来逐步推进,得到最优解。2.动态规划的最佳实践—背包.原创 2020-06-09 23:46:22 · 289 阅读 · 0 评论 -
算法其实很简单—分治算法
目录1. 分治算法简单介绍1.1介绍1.2 分治算法可以求解的一些经典问题:2. 分治算法的基本步骤3. 分治算法最佳实践—汉诺塔4. 代码演示1. 分治算法简单介绍1.1介绍分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的问题......知道最后的子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序、归并排序)等等。1.2 分治..原创 2020-06-05 01:07:50 · 350 阅读 · 2 评论 -
算法其实很简单—二分查找算法
目录1. 二分查找基本概念2. 二分查找的思路3.代码实现1. 二分查找基本概念二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。 关键: 1.必须采用顺序存储结构。 2.必须按关键字大小有序排列。二分查询的次数,最多不超过2. 二分查找的思路二分查找的思路其实很简单,二分,顾名思义就是一分为二,由于二分法的前提是必须为有序的、顺序存...原创 2020-06-04 23:27:38 · 315 阅读 · 0 评论 -
算法其实很简单—平衡二叉树的构建
1. 基本概念平衡二叉树的本质其实也是二叉排序树,具体可参考:算法其实很简单—二叉排序树的构建算法其实很简单—二叉排序树的删除平衡二叉树的特点是任意节点的子树的高度差都小于等于1。2. 整体思路平衡二叉树的构建基本分为三种情况,左旋转、右旋转、双旋转1、当根节点的右子树的高度比左子树高度大于1时,即高度相差2以上,则进行左旋转,思路如下图:2、当根节点的左子树的高度比右子树高度大于1时,则进行右旋转:3、如下图,复合右旋转条件,但是右旋转后还不是平衡二..原创 2020-06-02 23:00:05 · 2099 阅读 · 0 评论 -
算法其实很简单—二叉排序树的删除
关于二叉排序树的基本概念以及迭代构建,可参考上篇:算法其实很简单—二叉排序树的构建 1. 二叉排序树删除节点思路二叉排序树的删除情况比较复杂,大概分为三种情况(以下图为参考):1.2删除只有一个节点直接让root == null1.2. 删除子节点比如上图中的2、5、9、12找到需要删除的节点,targetNode 找到需要删除节点的父节点,parentNode 判断targetNode是parentNode的左子节点还是右子节点 如果是左子节点,则parentN.原创 2020-06-01 23:26:58 · 1251 阅读 · 0 评论 -
算法其实很简单—二叉排序树的构建
1.什么是二叉排序树二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。是数据结构中的一类。在一般情况下,查询效率比链表结构要高。二叉排序树特点:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二叉排序树;(4)没有键值相等的结点。简单说,就是每个父节点大于当前节点的左子节点,小于当前节点的右子节点。2.构原创 2020-06-01 00:10:10 · 2523 阅读 · 0 评论 -
算法其实很简单—赫夫曼树的构建
1.赫夫曼树的概念 给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。2.构建赫夫曼树的思路首先了解一下以下几个概念:1、路径和路径长度在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1。2、结点的权及带...原创 2020-05-29 00:11:17 · 434 阅读 · 0 评论 -
算法其实很简单 — 堆排序
目录1. 基本概念篇1.1 堆排序1.2大顶堆和小顶堆2. 基本思路与步骤2.1如何构建大顶堆2.2排序过程3. 代码实现1. 基本概念篇1.1 堆排序堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。1.2大顶堆和小顶堆大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排.原创 2020-05-28 00:31:47 · 214 阅读 · 0 评论