- 博客(12)
- 收藏
- 关注
原创 JavaScript算法-递归的组合问题
组合问题组合问题是指从给定个数的元素中仅仅取出指定个数的元素经典案例从集合{a, b, c, d, e, f, g}中取出n个元素,有多少种组合实现案例分析 假设取出元素为1 则有种取法, 程序实现的话代码片段如下:for(let i=0; i<7; i++){ yield S[i]}取一个元素,我们使用一个循环,元素一个一个取出来假设要取出2个,...
2019-03-29 18:08:02 396
原创 JavaScript算法-递归穷举
穷举法的基本思想是根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。若某个情况验证符合题目的全部条件,则为本问题的一个解;若全部情况验证后都不符合题目的全部条件,则本题无解。穷举法也称为枚举法。递归的穷举问题经典算法求{a, b, c}的子集数学求解可以很快得出有=8个子集, 即个解.集合元素较少我们直接罗列出结果来分析下:{a, ...
2019-03-25 19:12:40 504
原创 JavaScript算法-基础递归
递归的基本概念递归是一种对重复结构的描述, 程序中表现为程序自己调用本身.其本质是把问题拆分为一类更小的子问题,当问题粒度足够小的时候我们就把结果直接返回,然后继续去把问题拆分为与原有问题结构相同的更小问题,解决每个这样的小问题,最后将这些问题的解进行合并返回递归的执行过程如果问题足够小直接返回结果 拆分问题成与原问题结构相同的更小问题 解决每个这样的小问题 将这些小问题的解合并...
2019-03-19 15:54:54 176
原创 JavaScript算法-桶排序
桶排序桶排序(Bucket sort)是一种基于计数的排序算法,工作的原理是将数据分到有限数量的桶子里,然后每个桶再分别排序(可使用别的排序算法进行排序)桶排序概况要求排序内容已知,排序键为数字 主要适用于小范围整数数据,且独立均匀分布. 计数排序是一种特殊的桶排序桶排序过程计算并设置固定数量的空桶 将数据放入对应的桶中 对桶中的数据进行排序 把每个桶的数据进行合并图解桶...
2019-03-13 18:51:32 1391
原创 JavaScript算法-深度优先搜索(DFS)/广度优先搜索(BFS)
深度优先搜索(DFS)事实上,深度优先搜索属于图算法的一种,英文缩写为DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次.遍历过程假定现在有个如下图的二叉树,深度优先搜索1开始遍历子节点,然后从左边树纵深遍历,直到元素不存在子节点,然后回溯,继续遍历子节点,直至左边全部便利完成,回溯到根开始遍历右边树节点.最...
2019-03-12 19:48:24 2541
原创 JavaScript算法-基数排序(非比较型)
基数排序基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (wn),其中w为有效数位个数,空间复杂度为O(w+n),在某些时候,基数排序法的效率高于其它的稳定性...
2019-03-08 18:51:44 184
原创 JavaScript算法-计数排序(非比较型)
计数排序一般遇到排序我们首先会想比较大小,比如冒泡排序,插入排序,合并排序,快速排序等.排序过程都需要去对比,寻找参照物然后确定顺序位置.这时候如果有一个参照物,它本身就是有序的,我们只要将对应的元素放置进去,那么完全放置进去后呈现的就是排序好的.计数排序思想1.计数排序是利用数组下标作为参照物确定元素位置2.运用下标作为参照即参与排序的元素可以变成数组下标,那么就要求被...
2019-03-02 12:33:05 602
原创 JavaScript算法-快速排序(分治策略)
快速排序快速排序类似合并排序,都会对目标集合进行拆分,然后分别处理,执行时间都为, 快速排序的空间复杂度较低为.关键的子问题根据pivot点进行拆分找到一个中心点,把小于中心点的值放到左边,大于中心点的值放到右边{ ...小于m m ...大于m}分析过程1.假设有一个数组[11,88,33,99,44,55,77], 我们选定的pivot点为772.抽象...
2019-02-28 11:06:09 406
原创 JavaScript算法-合并排序(分治策略)
合并排序将排序数组拆分成若干个子数组, 然后进行合并 Space ~ O(n)第一步合并两个已排序数组方法一对所有元素进行插入排序方法二对所有元素执行 Array.sort ---不在算法考量内方法三运用分治策略,拆分成两部分进行合并假设现有数组[11,33,55,22,44] 图解分析(寻找循环不变式)A A1 A2 k=...
2019-02-26 17:49:15 394
原创 JavaScript算法-冒泡排序
冒泡排序冒泡原理水下面有很多个气泡,每个气泡体积并不相同,根据常识应该知道体积大的气泡会较快冒出水面,那么这种形式的排序就是冒泡排序.每次对需要排序的集合一一进行比较,最大的率先排序完成.图解冒泡冒泡图存在各种,动态图or高智商交换2D图,我们这边利用表格展示冒泡排序的过程外层循环 0 1 2 3 4 7 1 2 4 ...
2019-02-21 17:41:04 212
原创 JavaScript算法-插入排序
插入简单问题:在一个有序数组A中插入x元素惯性思维 JavaScript原始实现let A = [2,4,6,9,10] //目标体const x = 8 //插入元素const b = A.find(a => a > x) //找到大于插入元素的值bif(b == undefined){ //如果不存在这样的值 插入元素为最大 A.push(x)...
2019-02-20 14:54:33 199
原创 JavaScript算法-二分查找
二分查找定义:二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。原理分析定量1000规模需要查询次数1000 500 250 125 62 31 15 7 3 1 => 最坏需要查询10次规模时间关系猜想: = 512 = 1024 = 1000? ...
2019-02-19 15:33:29 731
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人