算法
caicsama
这个作者很懒,什么都没留下…
展开
-
KMP字符串匹配-JS
当串p与串t匹配的时候,返回的首次匹配的位置是i-j 如果遍历完,不匹配(i=n,j<m) i-j>n-m 任意j,考察集合 N(p,j)={0<=t<j | p[0,t) == p[j-t,j) } 即,p[j]的前缀p[0,j)中,所有匹配的真前缀和真后缀长度为next(j) 长度为t的前缀p[0,t)与长度为t的后缀p[j-t,j)必然相等 如果i、j分别指向的元素不...转载 2020-04-12 23:56:13 · 106 阅读 · 0 评论 -
二分查找以及变体-JS
版本变化 查找的区间为[lo,hi) 因此在遍历过程中区间的范围选哟是 版本1 数组分成三段: e小于arr[mid] [li,mid) e等于arr[mid] mid arr[mid]小于e (mid,li] function binarySearch1(arr,e){ var lo=0,hi=arr.length; //最终区间的长度是[lo,lo) 为空 while(lo<...转载 2020-04-11 20:55:01 · 122 阅读 · 0 评论 -
广度优先遍历、深度优先遍历-JS
使用邻接表存储图 广度优先遍历 A->B->C->D->E->F 遍历A元素的时候,将A元素的邻接节点(B、C)插入数组,访问完B,将B的邻接表(C、D)插入数组,C已经在遍历表中了,因此不添加到遍历表中,接下来访问C,将邻接表(D、E)插入遍历数组中,同样,D已经在遍历表中,就不添加进去,避免重复访问。 遍历的过程没有重复元素 访问栈、记录表 //邻接点制成的表 ...原创 2020-04-10 00:39:46 · 936 阅读 · 0 评论 -
先序遍历、中序遍历、后续遍历-JS
V:表示树的根节点 L:树的左子树 R:树的右子树 先序遍历:V | L | R 访问根节点,访问左子树,访问右子树。右顾左盼 沿着左子树的方向,将右子树推入栈中(后进先出),将左孩子推入栈中 使用递归的方式遍历: function preorder(root){ //递归基 if(!root) return; var arr=[]; arr.push(root.val); pr...转载 2020-04-09 14:18:04 · 464 阅读 · 0 评论 -
冒泡排序、选择排序、快速排序、插入排序、堆排序、归并排序-JS
冒泡排序 遍历数组,比当前元素小时交换位置,当遇到本轮中的最大元素之后,后面的交换就不会变化 每次循环就能得到本轮循环中的最大元素 function findMAx(arr) { var n = arr.length - 1; //设置flg标记 序列是否有序 //只要序列有序 flag等于上一个循环的flag=true,不会进入if语句,那么flag=false,退出fo...原创 2020-04-07 14:34:51 · 194 阅读 · 1 评论