![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 77
云舒编程
字节、阿里资深工程师。做过营销、支付、百万级Feed流优化、权限系统、网关。专注于技术原理分享,用最简单的话分享最复杂的技术原理
展开
-
AVL树—java
[本文转载至](http://www.cnblogs.com/skywang12345/p/3577479.html) AVL树的介绍 AVL树是高度平衡的而二叉树。它的特点是:AVL树中任何节点的两个子树的高度最大差别为1。 上面的两张图片,左边的是AVL树,它的任何节点的两个子树的高度差别都<=1;而右边的不是AVL树,因为7的两颗子树的高度相差为2(以2为根节点的树的高度是3,而以8为根节转载 2017-04-26 16:36:00 · 281 阅读 · 0 评论 -
KMP算法
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。时间复杂度O(m+n)。一个解释很详细的博客: KMP算法详转载 2017-04-18 23:45:34 · 258 阅读 · 0 评论 -
桶排序
基本原理1.桶排序也是一种分而治之思想,其时间复杂度在最好的情况下比快排还要好,但是需要使用空间换区时间。 2.假设有一个长度为N的待排序的序列K[1….n],现在将这个序列划分为M个子区间,每个子区间叫一个桶,那么现在就有了M个桶,现在通过一个映射函数f(x)将K[i]映射到桶B[j]中,也就是K[i]成为了B[j]中的一个元素。然后对每个桶进行排序,这里可以选择继续递归使用桶进行数据集的规模减原创 2017-05-26 09:02:56 · 478 阅读 · 0 评论 -
计数排序
基本原理计数排序的基本思想就是:加入输入一个数x,如果我们可以找到比x小的数有几个,那么就可以直接将x放入到对应的输出数组的位置。 比如输入一个数x=12,发现在输入的数据中,比12小的有4个,那么毫无疑问12就该排在第五位。 通过上述的描述,可能你会发现,诶那每次我要找到有几个数比12小,不都是要把数组遍历一遍吗?n个数的话就会需要O(n^2),不是慢到怀疑人生吗?现在就来说一下怎么进行计数排原创 2017-05-29 14:26:05 · 626 阅读 · 1 评论 -
快速排序
基本原理递归实现如下过程: 取数组中一个数作为判断标准,将小于或等于这个数的放在这个数左边,大于这个数的放在这个数右边,然后对该数左右段子数组继续如上过程,直到子数组无法被划分。分解:数组A[p..r]被划分为两个(可能为空)子数组A[p..q-1]和A[q+1..r],使得A[p..q-1]中的每一个元素都小于等于A[q],而A[q]也小于等于A[q+1..r]中的每个元素。其中,计算下标q也是原创 2017-05-29 17:38:50 · 283 阅读 · 0 评论 -
快速幂
参考百度百科 快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。原理 以下通过求a^b来介绍 首先把b转换成二进制数,该二进制数第i位的权为 2^(i-1) 例如:13的二进制表示为1101 因此,我们将a^13转化为算a^(2^3)*a^(2^2)*a(2^0)实现 可以通过位运算来快速实现,通过将b&1来判断b的最小的一位是否为1原创 2017-08-02 11:01:59 · 197 阅读 · 0 评论