JS数据结构与算法
文章平均质量分 90
数据结构与算法,剑指offer
斜光
转战语雀
展开
-
Greedy 贪心算法
贪心算法概念每一步中都采取当前状态下最好或最优的解法,从而使全局解法最优与动态规划的不同是,他对于每个子问题的解决方案都会做出选择,不能回退。而动态规划则会保存之前的运算结果 ,并根据以前的结果对当前进行选择,能够退回所有子方案最优不一定能全局最优对于工程和生活中的问题贪心算法一般不能得到我们想得到的答案什么时候使用贪心算法问题能够分成最优子问题来解决,子问题的最优解能递推到最终问题的最优解,也就是最优子结构问题可以解决最优化的问题,如求图中最小生成树,求哈夫曼编码等因为贪心算法的高效原创 2020-06-09 14:47:06 · 512 阅读 · 0 评论 -
基本排序算法
1 冒泡排序原理它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。排序步骤比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元...原创 2020-02-11 10:31:42 · 119 阅读 · 0 评论 -
JS数据结构5:树-红黑树
概念规则顾名思义,每个节点不是红的就是黑的;树的根节点是黑的;所有叶节点都是黑的(用NULL 引用表示的节点);如果一个节点是红的,那么它的两个子节点都是黑的;不能有两个相邻的红节点(一个红节点不能有红的父节点或子节点);从给定的节点到它的后代节点(NULL 叶节点)的所有路径包含相同数量的黑色节点。代码实现红黑树仍然是个自平衡二叉搜索树,所以可以继承AVLTree1 构造红黑结点与红黑树结构class RedBlackNode extends Node { constr原创 2020-06-01 20:32:47 · 630 阅读 · 0 评论 -
JS数据结构5:树-自平衡二叉树
概念BST 存在一个问题:取决于你添加的节点数,树的一条边可能会非常深;也就是说,树的一条分支会有很多层,而其他的分支却只有几层,这会造成很大的性能问题所以需要平衡二叉搜索树来解决这个问题平衡二叉树的概念在AVL 树中,需要对每个节点计算右子树高度(hr)和左子树高度(hl)之间的差值,该值(hr-hl)应为0、1 或 -1。如果结果不是这三个值之一,则需要平衡该AVL 树。这就是平衡因子的概念。AVL的实现我们可以扩展我们写的BST 类,只需要覆盖用来维持AVL 树平衡的方原创 2020-06-01 15:41:09 · 412 阅读 · 0 评论 -
JS数据结构5:二叉树-二叉搜索树
基本概念二叉树二叉树中的节点最多只能有两个子节点:一个是左侧子节点,另一个是右侧子节点。这个定义有助于我们写出更高效地在树中插入、查找和删除节点的算法二叉树在计算机科学中的应用非常广泛。二叉搜索树二叉搜索树(BST)是二叉树的一种但是只允许你在左侧节点存储(比父节点)小的值,在右侧节点存储(比父节点)大的值。二叉搜索树的代码实现结构class Node { constructor(key) { this.key = key; // 存值 th原创 2020-05-31 16:15:32 · 174 阅读 · 0 评论 -
JS数据结构4:集合
概念集合是由一组无序且唯一(即不能重复)的项组成的该数据结构使用了与有限集合相同的数学概念,但应用在计算机科学的数据结构中集合的存储是值 和 值对应集合方法add(element):向集合添加一个新元素。delete(element):从集合移除一个元素。has(element):如果元素在集合中,返回true,否则返回false。clear():移除集合中的所有元素。size():返回集合所包含元素的数量。它与数组的length 属性类似。values():返回一个包含集合中所有原创 2020-05-29 11:15:04 · 126 阅读 · 0 评论 -
JS数据结构3:链表
单链表链表结构的实现class Node { constructor(value) { this.value = value; this.next = null; }}class LinkedList { constructor() { this.length = 0; this.head = null; } equalsFn(a, b) { return a === b;原创 2020-05-27 17:20:27 · 108 阅读 · 0 评论