算法
文章平均质量分 67
跨世纪逃兵
这个作者很懒,什么都没留下…
展开
-
MD5的实现
闲着没事干,索性实现一下MD5 具体的东西,说白了,就是把原始数据+补充数据共分割成N个64位的小段,每个小段又分成16个小节,然后每个小段参与一次四轮运算,用ABCD这四个数关联起他们,保证数据有丝毫变动,得到的MD5码,会完全变动。 F=(x&y)|((~x)&z) G=(x&z)|(y&(~z)) H=x^y^z I=y^(x|(~z))原创 2014-12-27 14:25:32 · 509 阅读 · 0 评论 -
面试常见排序算法实现
1.快速排序 //快速排序 void quick_sort(vector<int> &nums) { quick_sort(nums,0,nums.size()-1); return; } void quick_sort(vector<int> &nums,int start,int end) { //元素<=1个退出 ...原创 2019-03-28 16:30:41 · 178 阅读 · 0 评论 -
堆之二项堆
二项堆:不同度二项树的根结点从小到大链起来就是二项堆 二项树: 如图所示,4颗树分别为度为0,1,2,3的二项树 度为3的二项树:有一个根结点,(0,1,2)的二项树分别是它的叶子节点。 度为n的二项树:有一个根节点,(0,1...n-1)的二项树分别是它的叶子节点 同度二项树合并: 直接将根结点值较小的二项树挂到根结点较大的二项树的根结点下就行。 二项堆合并: 二项堆合并就是...原创 2019-02-25 20:02:57 · 322 阅读 · 0 评论 -
堆之左偏树
左偏树(左偏堆),优势:两个左偏树合并效率高O(logn) 外结点:一个结点的孩子数不满两个,就称之为外结点。 距离(dist):每个节点上有个距离(dist)的属性,dist的值为该结点到最近的外结点所经过的边的个数。外结点的dist=0。空结点的dist=-1。 左偏树定义: 1.是一颗二叉树。 2.是个堆。 3.每个节点的左节点的dist >=右结点dist 根据定...原创 2019-02-14 12:40:16 · 200 阅读 · 0 评论 -
堆
堆是一颗特殊的树。常用于优先队列的实现 符合以下定义,即为堆: 1.是一颗树 2.树中的每个节点全都大于它的子节点(最大堆),或者每个节点全都小于它的子节点(最小堆) 堆的合并:(最小堆为例) 方法1,随意从任意一个堆叶子节点中取下一个节点,将两个堆的根结点作为这个节点的左右子节点,这个节点就是新的根结点,然后,对堆进行一次维护 方法2: //将堆顶更小的堆的右节点(堆)和另...原创 2019-02-12 20:58:55 · 187 阅读 · 0 评论 -
堆之二叉堆&堆排序
二叉堆是特殊的完全二叉树。 定义,符合一下两点即为二叉堆: 1.是个堆 2.是个完全二叉树 因为是完全二叉树,所以一般用数组存储。 在数组中,f是父节点下标,l是左节点下标,r是右节点下标,son是子节点下标(l或者r)。 因为是完全二叉树,所以已知任何节点都能推断出它的关联节点: (下标从0开始) f = (son-1)/2 r = 2*f +1 l = 2*f +2 r ...原创 2019-02-12 14:33:53 · 245 阅读 · 0 评论 -
红黑树笔记
红黑树学习 rb1:根结点必须是黑色,空叶子结点视为是黑色 rb2:不能有两个相邻的红色节点(父节点和子节点不能同时为红色) rb3:从根结点到任意空叶子结点的路径的黑色结点数相等。 衍生推论: 1.红黑树从根结点起,最长路径比最短路径节点数比,不会超过2:1 2.以红黑树任意黑色节点为根,都是一颗红黑树 3.任意节点到外部节点的所有路径中,黑色节点数是一致的。 术语:...原创 2019-02-12 11:01:07 · 373 阅读 · 0 评论 -
逆波兰表达式
1 + 2 - (4 - 2 * 3 /2) * 5 正常的中缀表达式(运算符左右是参与计算的两个值),符合两条运算规则 1.运算符优先级高的先计算。 2.运算符优先级相同则左到右依次计算。 第一条运算规则是高于第二条的。 如果严格按照这个定律的话,中缀表达式在正常处理上,是比较跳脱的,步骤如下: 1.需要先找到最高优先级的运算符,参与计算。 ...原创 2018-06-24 14:36:43 · 231 阅读 · 0 评论 -
KMP算法
求一个字符串T的子串S的位置一般算法是int len=T.len-S.len,j,i; for(i=0;i<len;i++) { for(j=0;j<S.len;j++) if(T[i+j]!=S[j]) break; if(j==S.len) break; }这种算法写起来很简单,复杂度最大为O(T.len*S.len)例如T[]="aaaa...原创 2014-12-25 17:15:44 · 408 阅读 · 0 评论 -
树状数组 插点问线 插线问点
mark http://dongxicheng.org/structure/binary_indexed_tree/ http://blog.csdn.net/greyant/article/details/7548564原创 2015-04-03 14:39:03 · 633 阅读 · 0 评论 -
牛顿迭代法
牛顿迭代法(英文名Newton’s Iteration)是用来求函数的根的高效算法。 递推公式为 图1 大概思想: 如图所示,取一个点(xn,f(xn)),过该点作切线交x轴于(xn+1,0)很容易得到 稍微变形,就可以得到最开始给出的公式。 这大概是一个无限逼原创 2014-12-29 20:55:54 · 953 阅读 · 0 评论 -
快速排序简述
快排是不稳定的排序。 复杂度介于nlogn ~n*n 之间(均摊nlogn)。 当每次取值恰好能取到中位数时,复杂度最小,即为n*logn。 当每次取值取到极值时,当待排序数据的重复性很高时,时间复杂度最大,即为n*n 对于无序数据,快排均摊复杂度为n*logn 且常数系数很小,为八大排序中最快。 快排的特性就是快。 //能处理重复数据的快速排序 pair<int,int...原创 2019-04-15 15:38:13 · 290 阅读 · 0 评论