算法
文章平均质量分 89
算法学习
twinkle||cll
More interest,less interests (多一些兴趣爱好的向往,少一些功名利禄的追求)
展开
-
简析 js 碰撞检测原理与算法实现
碰撞检测(边界检测)在前端游戏,以及涉及拖拽交互的场景应用十分广泛。 那么啥叫碰撞?JavaScript 又是如何检测 DOM 发生碰撞的呢? 碰撞,顾名思义,就是两个物体碰撞在了一起,眼睛是可以直观的观察到碰撞的发生。但对于前端实现,如何让 JavaScript 代码理解两个独立的“物体”(DOM)碰撞在一起呢。这就涉及到碰撞检测(或者叫边界检测)的问题了。 碰撞检测的常见需求...转载 2021-02-18 15:12:28 · 2543 阅读 · 0 评论 -
js 实现 贪心算法和动态规划 贪心找零问题, 动态规划 青蛙跳台阶问题
// 贪心算法和动态规划// 当遇到一个求解全局最优解问题时,如果可以将全局问题切分为小的局部问题,// 并寻求局部最优解,同时可以证明局部最优解累计的结果就是全局最优解,则可以使用贪心算法// 找零问题// 示例:假设你有一间小店,需要找给客户46分钱的硬币,// 你的货柜里只有面额为25分、10分、5分、1分的硬币,如何找零才能保证数额正确并且硬币数最小/** * 找零问题 使用贪心算法 * @param total {Number} 总金额 * @param coinArr原创 2020-12-06 12:44:33 · 400 阅读 · 0 评论 -
es 实现二叉树的前序中序,后序遍历,后序中序还原二叉树,前序中序还原二叉树,二叉树的比较diff
// 二叉树class Node { constructor(value) { this.value = value; this.left = null; this.right = null; } /** * 二叉树的前序遍历 * @returns {null} * @constructor */ DLR() { if (!this) return null;原创 2020-12-05 10:59:55 · 231 阅读 · 0 评论 -
es 实现图的基本算法 图的深度优先搜索 广度优先搜索 普利姆算法
// 图的查找算法class Node { constructor(value) { this.value = value; this.neighbors = []; } /** * 深度优先查询 查询图 * @param target {String | Number} * @returns {boolean} 结果 */ searchByDepth(target = '') {原创 2020-12-05 10:53:00 · 381 阅读 · 0 评论 -
js 基础排序算法 之 冒泡排序, 选择排序, 插入排序,快速排序
排序算法排序算法没有优劣之分,在不同的场景中,不同的排序算法执行效率不同。选择排序 Selection Sort一次选择排序,可以将某个区间的最小值排列到该区域的第一位,具体的方式是:找出该区域的最小值将该值与该区域第一个值交换对下一个区域重复上述过程,直到排序完成let arr = [3, 2, 4, 6, 7, 9, 3, 1, 4];/** * 选择排序 * @param asc {Boolean} 是否升序 * @returns {Array} */Array.原创 2020-12-02 16:19:25 · 205 阅读 · 0 评论 -
js 实现链表的常规操作
// 创建一个链表/** * 创建一个链表的节点,每一个链表都是跟节点 * @param value * @constructor */function Node(value) { this.value = value; this.next = null;}let a = new Node('a');let b = new Node('b');let c = new Node('c');let d = new Node('d');let w = new Node(原创 2020-12-01 12:50:08 · 276 阅读 · 0 评论 -
js 判断一棵树 是否为平衡二叉树
// 二叉树的生成function NodeTree(value) { this.value = value; this.left = null; this.right = null;}let ta = new NodeTree('a');let tb = new NodeTree('b');let tc = new NodeTree('c');let td = new NodeTree('d');let te = new NodeTree('e');let tf原创 2020-09-30 15:00:47 · 668 阅读 · 0 评论 -
js构建二叉搜索树
// 代码构建二叉搜索树// 二叉搜索树的作用, 对于数据量大的数据,需要找到该数据在不在里面,使用二叉树循环的次数减少,节约性能let bigNumber = [];for (let i = 0; i < 1000000; i++){ bigNumber.push(Math.floor(Math.random() * 1000000))}// 判断一个值在不在一个数组里面,// 代码构建二叉搜索树function DoubleTreeNode (value){ t原创 2020-09-15 21:40:54 · 210 阅读 · 0 评论 -
js 最小生成图的问题 普利姆算法
设置一个二位数组来表示当前所有点与点之间的关系,如下图:// 普利姆算法特点: 1.任选一个点作为起点// 2.找到以当前选中的点为起点路径最短的边// 3. 如果这个边点的另一边没有被连起来,那么就连起来// 4. 如果这个边的另一端早就被连起来了,那就看倒数第二短的边,以此递推// 5. 重复2-4,直到所有的点都连通为止/** * 用于生成图的节点 * @param ...原创 2020-09-15 09:16:56 · 433 阅读 · 0 评论 -
js二叉树的广度搜索 深度搜索
// 二叉树的生成function NodeTree(value) { this.value = value; this.left = null; this.right = null;}let ta = new NodeTree('a');let tb = new NodeTree('b');let tc = new NodeTree('c');let td = new NodeTree('d');let te = new NodeTree('e');let t.原创 2020-09-14 18:22:52 · 261 阅读 · 0 评论 -
js 通过左右前序和中序, 或者后序和中序来还原二叉树
// 二叉树的生成function NodeTree(value) { this.value = value; this.left = null; this.right = null;}// 通过二叉树的前序和中序来还原二叉树let frontArr = ['a', 'c', 'f', 'g', 'b', 'd', 'e'];let middleArr = ['f', 'c', 'g', 'a', 'd', 'b', 'e'];let endArr = ['f', '原创 2020-09-14 17:12:31 · 522 阅读 · 0 评论 -
js 代码 实现二叉树的前序, 中序, 后序遍历
形如上图的一种树的结构,简单说 只有最多只有两个分叉的树,我们称之为二叉树// 二叉树的生成function NodeTree(value){ this.value = value; this.left = null; this.right = null;}let ta = new NodeTree('a');let tb = new NodeTree('b');let tc = new NodeTree('c');let td = new NodeTree('d.原创 2020-09-14 14:12:17 · 2031 阅读 · 0 评论 -
JS实现栈和队列
// 栈是先进后出function Stack() { this.arr = []; // push方法是把数据放入栈中 this.push = function (value) { this.arr.push(value); } // pop 是取数组的最后一个数据,从而实现先进后出 this.pop = function () { this.arr.pop(); }}var stack = new Stack原创 2020-08-25 17:22:35 · 601 阅读 · 0 评论 -
js数组的冒泡排序, 选择排序, 以及快速排序
// 对于数组的排序var arr = [4, 1, 2, 5, 3, 7, 6, 9, 0, 8];// 冒泡排序// 冒泡排序的思想在于,数组中的两两相互对比,大小的顺序调换位置// 排序的意思是先比较,后交换位置/** * 比较两个数字的大小 * @param a {Number} 第一个数字 * @param b {Number} 第二个数字 * @returns {boolean} */function compare(a, b) { return a > b原创 2020-08-24 16:38:26 · 453 阅读 · 0 评论 -
线性数据结构
线性数据结构之数组线性数据结构分为一维,二维,三维,四维等,一维数据结构(线性数据结构, 数组,链表) 线性的数据结构强调存储与顺序。数组数组最大的特点是定长,数组的长度是不可以变的,如果数组需要扩容,扩容不是直接往后扩容,而是直接在一个新的空间生成一个更长的数组,正因为基于这种方式,数组扩容是消耗性能的。原因:(1.先拿一个能放得下数组长度的新的内容空间,2. 将原来的数组的内容赋值到新的数组中,这两个过程都是js引擎帮我们做好了,所以在前端的书写数组可以不声明数组的长度)思考:为啥数组的扩容原创 2020-08-23 17:33:00 · 393 阅读 · 3 评论 -
数据结构与算法的关系
数据结构与算法有什么关系?举个例子:在搬家的时候,灯,衣服,鞋子等零散的一件一件的物品,在搬家的时候,一般会装到箱子里面,而箱子就是数据结构/所以说:可以容纳数据结构被称为数据结构算法是用来对数据结构进行处理的方法。对应搬家中的对每一个物品采用不同的盒子来装。对应辨别不同物品采用不同的箱子的过程称之为算法。综上可知: 数据结构是可以容纳数据的结构,并且数据结构是静态的 算法是用来对数据结构进行处理的方法,并且算法是动态的...原创 2020-08-22 15:45:05 · 1697 阅读 · 0 评论 -
数据结构和算法概述 javascript
数据结构和算法概述什么是数据结构?存储和运算是程序的两大基础功能,数据结构是专门研究数据存储的学科。很多时候,我们无法仅使用简单的数字、字符串、布尔就能完整的描述数据,可能我们希望使用数组、对象、或它们组合而成的复合结构来对数据进行描述。这种复合的结构就是数据结构。而在实际开发中,我们会发现很多场景中使用的数据结构有着相似的特征,于是,数据结构这门学科,就把这些相似的结构单独提取出来进行研...原创 2020-05-06 13:05:36 · 193 阅读 · 0 评论