
数据结构与算法 学习笔记
该专栏为笔者在参考网上关于数据结构与算法的学习资料整理归纳的学习笔记,大部分摘抄自网络学习资料,会在帖子中注明学习链接。
林夏天
这个作者很懒,什么都没留下…
展开
-
算法 - 回溯算法
回溯算法(1)基本概念回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的,规模较大的问题都...原创 2020-04-06 12:58:37 · 855 阅读 · 0 评论 -
算法 - 动态规划
动态规划(1)定义动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。(2)基本思想与策略动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。...原创 2020-04-06 12:56:50 · 211 阅读 · 0 评论 -
算法- 递归算法 分治算法
递归算法(1)递归需要满足的三个条件一个问题的解可以分解为几个子问题的解何为子问题?子问题就是数据规模更小的问题。这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样存在递归终止条件把问题分解为子问题,把子问题再分解为子子问题,一层一层分解下去,不能存在无限循环,这就需要有终止条件。(2)如何编写递归代码?写递归代码的关键就是找到如何将大问题分解为小问题的...原创 2020-04-06 12:54:07 · 2656 阅读 · 0 评论 -
数据结构 - 堆
堆(1)什么是二叉堆二叉堆本质上是一种完全二叉树,二叉堆的经典表示方法是使用一个数组表示,其中:根结点为数组的第一个元素A[0]。其它结点中,第i个结点和数组索引元素对应的关系为:A[(i – 1) / 2]返回第i个结点的父结点A[(2 * i) + 1]返回第i个结点的左儿子结点A[(2 * i) + 2]返回第i个结点的右儿子结点它分为两个类...原创 2020-03-29 19:39:26 · 230 阅读 · 0 评论 -
JS 常见的链表操作
JS 常见的链表操作单链表反转链表中环的检测 相关问题两个有序的链表合并删除链表倒数第 n 个结点求链表的中间结点1. 单链表反转// 判断对象是否为空function isEmptyObject(obj) { for (var name in obj) { return false;} return true;} function Re...原创 2020-03-23 20:57:49 · 2225 阅读 · 0 评论 -
算法 - 贪心算法
贪心算法基本要素:贪心选择:在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。最优子结构:当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。过程:建立数学模型来描述问题;把求解的问题分成若干个子问题;对每一子问题求解,得到子问题的局部最优解;把子问题的解局部最优解合成原来解问题的一个解。...原创 2020-03-21 20:11:16 · 305 阅读 · 0 评论 -
算法 -查找算法
搜索算法(一)顺序查找说明:顺序查找适合于存储结构为顺序存储或链接存储的线性表。基本思想:顺序查找也称为线形查找,属于无序查找算法。从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功;若扫描结束仍没有找到关键字等于k的结点,表示查找失败。复杂度分析:查找成功时的平均查找长度为:(假设每个数据元素的概率相等) ASL = 1/n(1+...原创 2020-03-19 22:07:51 · 871 阅读 · 0 评论 -
算法 - 排序算法
排序算法相关概念稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。**空间复杂度:**是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。(一)冒泡排序冒泡排序是一种简单的排序算法。它重复地走访过...原创 2020-03-18 22:32:39 · 288 阅读 · 0 评论 -
数据结构 - 树
树树是一种非顺序数据结构,一种分层数据的抽象模型,它对于存储需要快速查找的数据非常有用。一个树结构包含一系列存在父子关系的节点。每个节点都有一个父节点(除了顶部的第一个 节点)以及零个或多个子节点:树大概包含以下几种结构/属性:节点根节点内部节点:非根节点、且有子节点的节点外部节点/页节点:无子节点的节点子树:就是大大小小节点组成的树深度:节点到根节点的节点数量高度:...原创 2020-03-17 19:37:45 · 1800 阅读 · 0 评论 -
数据结构 - 字典
字典集合、字典、散列表都可以存储不重复的数据。字典和我们上面实现的集合很像,上面的集合中我们以{ value: value }的形式存储数据,而字典是以{ key: value }的形式存储数据,字典也称作映射。简单说:Object 对象便是字典在 Javascript 中的实现。简单实现一个字典类:class Dictionary { constructor() { ...转载 2020-03-17 19:33:42 · 323 阅读 · 0 评论 -
数据结构 - 集合
集合集合是由一组无序且唯一(不能重复)的项组成的。这个数据结构使用了与有限集合相同的数学概念,但应用在计算机科学的数据结构中。使用JavaScript创建一个集合类:class Set { constructor() { this.items = {} } has(value) { return this.items.hasOwnP...转载 2020-03-17 19:31:48 · 1801 阅读 · 0 评论 -
数据结构 - 链表
链表要存储多个元素,数组(或列表)可能是最常用的数据结构。每种语言都实现了数组。这种数据结构非常方便,提供了一个便利的[]语法来访问它的元素。然而,这种数据结构有一个缺点:在大多数语言中,数组的大小是固定的,从数组的起点或中间插入或移除项的成本很高,因为需要移动元素;尽管 JavaScript中的Array类方法可以帮我们做这些事,但背后的处理机制同样如此。链表存储有序的元素集合,但不同...转载 2020-03-17 19:27:04 · 251 阅读 · 0 评论 -
数据结构 - 队列
队列队列是一种遵循先进先出 (FIFO / First In First Out) 原则的一组有序的项;队列在尾部添加新元素,并从头部移除元素。最新添加的元素必须排在队列的末尾。class Queue { constructor (items) { this.items = items || [] } //入队 enqueue(element) ...转载 2020-03-17 19:23:16 · 199 阅读 · 0 评论 -
数据结构 - 栈
栈栈是一种遵从先进后出 (LIFO) 原则的有序集合;新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另一端为栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。在 JavaScript 中我们可以使用数组的原生方法实现一个栈/队列的功能,鉴于学习目的,我们使用类来实现一个栈:class stack { constructor() { this.items = []...转载 2020-03-17 19:21:25 · 134 阅读 · 0 评论 -
数据结构与算法 目录
数据结构与算法数据结构栈:一种遵从先进后出 (LIFO) 原则的有序集合;新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另一端为栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。队列:与上相反,一种遵循先进先出 (FIFO / First In First Out) 原则的一组有序的项;队列在尾部添加新元素,并从头部移除元素。最新添加的元素必须排在队列的末尾。链表:存储有序的元素集合...原创 2020-03-15 19:25:12 · 170 阅读 · 0 评论