ES6的JavaScript数据结构实现之分而治之,动态规划,贪心算法和回溯算法
目的:ES6标准下的JS算法的一些实现代码。(作为记录和启发)
内容:分而治之,动态规划,贪心算法,回溯算法及其著名算法问题。(未完成,待继续)
所有源码在我的Github上(如果觉得不错记得给星鼓励我哦):ES6的JavaScript算法思想实现之分而治之,动态规划,贪心算法和回溯算法(分别在divide and rule、dynamic programming、greedy、backtracking目录下)
一、基础算法1、分而治之 概念:分而治之算法可以分为三个部分。1、分解原问题为多个子问题(原问题的多个小实例);2、解决子问题,用返回解决子问题的方式的递归算法。递归算法的基本情形可以用来解决子问题;3、组合这些子问题的解决方式,得到原问题的解。
分而治之的二分搜索算法如下:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 ...
ES6的JavaScript数据结构实现之排序、搜索和随机算法
目的:ES6标准下的JS算法的一些实现代码。(作为记录和启发)
内容:排序、搜索和随机算法。冒泡排序,选择排序,插入排序,归并排序,快速排序,计数排序,桶排序,基数排序;顺序搜索,二分搜索,内插搜索;Fisher-Yates随机。(未完成,待继续)
所有源码在我的Github上(如果觉得不错记得给星鼓励我哦):ES6的JavaScript算法实现之排序、搜索和随机算法(分别在sorting、search、shuffle目录下)
一、基础算法1、排序1.1、冒泡排序概念:冒泡排序比较所有相邻的两个项,如果第一个比第二个大,则交换他们。元素项向上移动至正确的顺序,就好像气泡升至表面一样。其复杂度是O(n2)。
123456789101112131415161718192021222324252627282930313233343536373839404142434445const Compare = { LESS_THAN: -1, BIGGER_THAN: 1, EQUALS: 0};function defaultCompare(a, b) { ...
ES6的JavaScript数据结构实现之图
目的:ES6标准下的JS数据结构的一些实现代码。(作为记录和启发)
内容:图,图的遍历(广度优先搜索BFS,深度优先搜索DFS),最短路径算法,最小生成树算法。(未完成,待继续)
所有源码在我的Github上(如果觉得不错记得给星鼓励我哦):ES6的JavaScript数据结构实现之图
一、基础数据结构1、图(创建Graph类)123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 ...
ES6的JavaScript数据结构实现之二叉堆和堆排序
目的:ES6标准下的JS数据结构的一些实现代码。(作为记录和启发)
内容:二叉堆和堆排序。(未完成,待继续)
所有源码在我的Github上(如果觉得不错记得给星鼓励我哦):ES6的JavaScript数据结构实现之二叉堆和堆排序
一、基础数据结构1、二叉堆(最小堆和最大堆;插入值(保持最小堆或最大堆结构);找到最大值或者最小值;移除最小堆的最小值(堆的根节点))基本概念:二叉堆是一种特殊的二叉树,其有两个特性:结构特性和堆特性。结构特性是指它是一颗完全的二叉树(树的每一层都有左侧和右侧子节点(除了最后一层的叶节点),并且最后一层的叶节点尽可能都是左侧子节点)。堆特性是指二叉堆不是最小堆就是最大堆(最小堆可以快速导出树的最小值,最大堆可以快速导出树的最大值),所有的节点都大于等于(最大堆)或者小于等于(最小堆)每个它的子节点。
1.1 最小堆123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 ...
ES6的JavaScript数据结构实现之树(二叉搜索树、AVL树、红黑树)
目的:ES6标准下的JS数据结构的一些实现代码。(作为记录和启发)
内容:二叉搜索树。(未完成,待继续)
所有源码在我的Github上(如果觉得不错记得给星鼓励我哦):ES6的JavaScript数据结构实现之树(二叉搜索树、AVL树、红黑树)
一、基础数据结构1、二叉搜索树(插入元素;树的遍历:中序,先序和后序;搜索树中的值;移除元素。)123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 ...
ES6的JavaScript数据结构实现之递归
目的:ES6标准下的JS数据结构的一些实现代码。(作为记录和启发)
内容:递归。(递归会使得操作树和图数据结构变得更简单。所以要理解递归。)(未完成,待继续)
所有源码在我的Github上(如果觉得不错记得给星鼓励我哦):ES6的JavaScript数据结构实现之递归
一、递归基础应用1、计算一个数的阶乘1.1迭代阶乘(循环实现)123456789101112function factorialIterative(number) { if (number < 0 ) { return undefined; } let total = 1; for (let n = number; n > 1; n--) { total = total * n ; } return total;}console.log(factorialIterative(5)); //120
1.2递归阶乘(使用递归时,要找到原始问题和子问题是什么。例如factorial(5)=5*factorial( ...
ES6的JavaScript数据结构实现之字典与散列表
目的:ES6标准下的JS数据结构的一些实现代码。(作为记录和启发)
内容:字典和散列表。(未完成,待继续)
所有源码在我的Github上(如果觉得不错记得给星鼓励我哦):ES6的JavaScript数据结构实现之字典与散列表
注:ES6也是新增加了Map类。此外还提供了WeakMap和WeakSet。基本上,Map和Set与其弱化版本之间仅有的区别是:WeakMap和WeakSet类没有entries、keys、values等方法;只能用对象作为键。而这两个弱化类是为了性能,可以使得JavaScript的垃圾回收器可以从中清除整个入口。此外,由于弱化类键只能是对象,所以不知道键就没办法找到值,这个性质可以用于封装ES6类的私有属性。
一、基础数据结构1、字典(以[键,值]对的形式存储数据,table[key]={key, value}) //注:由于JavaScript不是强类型的语言,不能保证键一定是字符串,所以需要把所有键名的传入的对象转换为字符串,使得Dictionary类中搜索和获取值更简单。
1234567891011121314151617 ...
ES6的JavaScript数据结构实现之集合
目的:ES6标准下的JS数据结构的一些实现代码。(作为记录和启发)
内容:集合。(未完成,待继续)
所有源码在我的Github上(如果觉得不错记得给星鼓励我哦):ES6的JavaScript数据结构实现之集合
注:Set类在ES6中已经提供了原生的Set结构。
一、基础数据结构1、集合(非ES6自带的原生Set)123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119class Set { constructor() { this.items = {}; } has(element) & ...
ES6的JavaScript数据结构实现之链表
目的:ES6标准下的JS数据结构的一些实现代码。(作为记录和启发)
内容:链表和双向链表,循环链表,有序链表。(未完成,待继续)
所有源码在我的Github上(如果觉得不错记得给星鼓励我哦):ES6的JavaScript数据结构实现之链表
一、基础数据结构1、链表123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147class Node {constructor(elem ...
ES6的JavaScript数据结构实现之队列
目的:ES6标准下的JS数据结构的一些实现代码。(作为记录和启发)
内容:队列和双端队列。(未完成,待继续)
所有源码在我的Github上(如果觉得不错记得给星鼓励我哦):ES6的JavaScript数据结构实现之队列
一、基础数据结构1、队列(FIFO)1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768class Queue{constructor(){this.count = 0;this.lowestCount = 0;this.items ={};}enqueue(element) {this.items[this.count] = element;this.count++;}dequeue() {if (this.isEmpty()) {return undefined;} ...