
数据结构与算法
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。
End_less__
不做点什么,怎么能展现自己
展开
-
二叉树三种遍历方式
二叉树的遍历,如果是手工画图,还可以使用投影法快速得到遍历序列。以下图二叉树为例,讲解投影法快速得到遍历序列的过程。(1) 中序遍历中序遍历就像在无风的情况下,太阳直射,将所有的结点投影到地上。顺序为左子树、根、右子树。如图 所示。图中的二叉树,其先序序列投影如图所示。中序遍历序列为:DBEAFGC。 (2) 先序遍历...转载 2018-11-02 13:08:49 · 3794 阅读 · 4 评论 -
Javascript学习数据结构--集合(Set实现)
定义set是不允许重复元素的集合类型,set体系最常用的是HashSet ,TreeSet, LinkedHashSet。相同的元素是放不进去set的。HasHSet是使用HashMap实现的,只是将value固定为一个静态对象,使用key保证集合的唯一性,但是不保证顺序性。LinkedHashMap是继承自HashSet,具有HashSet的优点,内部使用链表维护了插入顺序。创建...原创 2019-09-27 20:34:06 · 720 阅读 · 0 评论 -
Javascript学习数据结构--字典
定义字典(dictionary)是一些元素的结合。每个元素有一个称作key的域,不同元素的key各不相同。其抽象数据类型描述为:抽象数据类型Dictionary{实例: 具有不同关键字的元素组合操作: set(key,value):向字典中添加新元素。 delete(key):通过使用键值来从字典中移除键值对应的数据值。 has(k...原创 2019-09-27 20:16:09 · 453 阅读 · 0 评论 -
Javascript实现KMP算法
上一篇博客写了BF算法的Javascript实现思路。网页地址:Javascript实现BF算法KMP Substring Searchkmp算法的精髓就在于next数组,从而达到跳跃式匹配的高效模式。而next数组的值是代表着字符串的前缀与后缀相同的最大长度,(不能包括自身)。"前缀"指除了最后一个字符以外,一个字符串的全部头部组合;"后缀"指除了第一个字符以外,一个字符串...原创 2019-09-18 13:32:17 · 486 阅读 · 2 评论 -
Javascript实现BF算法
BF算法BF算法,即暴风(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。模式匹配:子串的定位运算。在主串S中查找与模式T相匹配的子串。算法复杂度分析...原创 2019-09-17 15:09:31 · 661 阅读 · 0 评论 -
Javascript -- 二叉树(查找&&删除功能实现)
查找最大值//查找最大值,根节点的右边比根节点的值大var maxNode = function (node) { if (node) { //只要不为空,一直搜寻 while (node && node.right !== null) { node = node.right; } ...原创 2019-08-29 13:05:30 · 290 阅读 · 0 评论 -
Javascript -- 二叉树(先序,中序,后序实现)
树的遍历详解:Mr.J--树的遍历方式详解Javascript实现二叉树:Javascript -- 二叉树实现先序遍历的顺序:NLR(根节点->左结点->右结点)中序遍历的顺序:LNR(左节点->根结点->右结点)后序遍历的顺序:LRN(左结点->右结点->根节点)先序遍历先序遍历的顺序:NLR(根节点->左结点->右结...原创 2019-08-29 09:28:56 · 701 阅读 · 0 评论 -
Javascript -- 二叉树实现
二叉树树:与阵列,链接列表,堆栈和队列(线性数据结构)不同,树是分层数据结构。树词汇表:最顶层的节点称为树的根。直接位于元素下的元素称为子元素。直接在某个东西上方的元素称为其父元素。为何选择树1.使用树的一个原因可能是因为您希望存储自然形成层次结构的信息。例如,计算机上的文件系统:file system----------- / <-- root ...原创 2019-08-28 16:46:28 · 241 阅读 · 0 评论 -
最长公共子序列
LCS问题陈述:给定两个序列,求它们中最长子序列的长度。子序列是以相同的相对顺序出现的序列,但不一定是连续的。例如,“abc”,“abg”,“bdf”,“aeg”,“acefg”,…是“abcdefg”的子序列。一个长度为n的字符串有2^n-1个不同的子序列,这意味着蛮力方法的时间复杂度是O(n * 2n)注意,检查两个字符串的子序列是否相同需要O(n)时间。这种时间复杂度可以通过动态规划来...原创 2019-07-11 16:33:48 · 205 阅读 · 0 评论 -
0-1背包问题详解(DP&分支限界&回溯三种方法)
0-1背包将n个项目的权重和值,放入一个容量为W的背包中,得到背包中最大的总价值。换句话说,给定两个整数数组val[0..n - 1]和wt [0 . .n-1],分别表示与n个项目相关的值和权重。同样,给定一个表示背包容量的整数W,找出val[]的最大值子集,使该子集的权值之和小于或等于W。DP解决动态规划一个简单的解决方案是考虑项目的所有子集并计算所有子集的总权重和值。...原创 2019-07-08 14:08:01 · 3883 阅读 · 0 评论 -
分支限界法|Branch and Bound Method(0-1背包问题)
分支限界法分支限界法(BB或B&B)是一个离散和组合优化问题的算法设计范式,以及一般的实值的问题。分支限界算法是通过状态空间搜索对候选解进行系统枚举的一种算法。分支与约束(BB或B&B)算法最早是由A. H. Land 和 A. G. Doig在1960年提出的离散规划算法。它是求解各种优化问题的最优解的一种通用算法,特别适用于离散优化和组合优化。一个分支限界算法由一个...翻译 2019-07-08 09:53:07 · 7852 阅读 · 0 评论 -
回溯法|Backtracking
回溯法回溯是一种算法,用于捕获给定计算问题的部分或全部解决方案,特别是约束满足问题。该算法只能用于能够接受“部分候选解”概念的问题,并允许快速测试候选解是否可以是一个完整的解。回溯被认为是解决约束满足问题和难题的一种重要技术。它也被认为是一种很好的解析技术,也是许多逻辑编程语言的基础。先决条件 : 递归 复杂性分析 递归回溯法是解决问题的算法技术通过渐进式地试图建立一个解决方案,一次...翻译 2019-07-07 13:04:57 · 477 阅读 · 0 评论 -
贪心算法|Greedy Algorithms(背包问题)
贪心算法是一种用于优化问题的简单、直观的算法。该算法在寻找整体最优解的过程中,每一步都进行最优选择。贪心算法在一些问题上是非常成功的,例如用于压缩数据的霍夫曼编码,或者用于通过图寻找最短路径的Dijkstra算法。然而,在许多问题中,贪婪策略并不能产生最优解。例如,在下面的动画中,贪心算法寻找和最大的路径。它通过在每个步骤中选择最大的可用数量来实现这一点。然而,贪心算法不能找到最大的和,因为它...翻译 2019-07-07 12:32:19 · 1318 阅读 · 0 评论 -
动态规划|Dynamic Programming
由于最近课设要用动态规划,翻阅资料学习一下。动态规划解决复杂问题的方法,把它们分解成更简单的子问题。一旦我们看到一些例子,这个定义就有意义了。实际上,我们今天只看解问题的例子解决DP问题的步骤1. 定义子问题2. 写出与子问题相关的递归式3.识别并解决基本案例每一步是非常重要的!!!一维DP的例子题目:给定n,找出几种不同的写法n是1 3 4...翻译 2019-06-30 17:01:10 · 274 阅读 · 0 评论 -
递归:我不用栈 非递归:栈使我快乐
偶尔敲代码,今天看树的遍历方式递归和非递归方式实现,碰到了一个关于栈的问题。栈栈的定义:栈是限定仅在表头进行插入和删除操作的线性表。要搞清楚这个概念,首先要明白”栈“原来的意思,如此才能把握本质。"栈“者,存储货物或供旅客住宿的地方,可引申为仓库、中转站,所以引入到计算机领域里,就是指数据暂时存储的地方,所以才有进栈、出栈的说法。(来源于百度百科)。栈是一种Last In First ...原创 2019-01-02 18:20:05 · 3372 阅读 · 3 评论 -
Mr.J--树、二叉树、森林的转换
树树状图是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树;二叉树二叉树是一个连通的无环图,并且每一个顶点的度不大于3。有...原创 2018-12-25 20:58:32 · 265 阅读 · 0 评论 -
Mr.J--树的遍历方式详解
树的遍历方式分有三种:先序遍历,中序遍历,后序遍历先序遍历的顺序:NLR(根节点->左结点->右结点)中序遍历的顺序:LNR(左节点->根结点->右结点)后序遍历的顺序:LRN(左结点->右结点->根节点)可以先看一下我之前的博客,一种简便形象的快速求二叉树遍历方式(点击链接)这次主要写一下已知两种遍历序列,如何快速求出第三种遍历序列(除去已...原创 2018-12-25 15:46:53 · 1265 阅读 · 0 评论 -
Javascript实现BFS算法
图是网络结构的抽象模型。图是一组由边连接的节点(或顶点)。在实现BFS算法之前,先建立邻接矩阵和邻接表:邻接矩阵每个节点都和一个整数相关联,该整数将作为数组的索引。用一个二维数组来表示顶点之间的连接。比如上面图片中的图的邻接矩阵表示:由于该图不是强连通图(如果图中每两个顶点间在双向上都存在路径,则该图是强连通的。例如, C和D是强连通的,而A和B不是强连通的。),所以在矩阵中会...原创 2019-10-02 23:04:06 · 2250 阅读 · 0 评论