
算法
文章平均质量分 61
tuhuolong
足球,NBA
展开
-
最大公约数
<br />辗转相除法(最大公约数=较小数和余数的最大公约数)<br /> <br />辗转相除法使用到的原理很聪明也很简单<br />假设用f(x, y)表示x,y的最大公约数,取k = x/y,b = x%y,则x = ky + b,如果一个数能够同时整除x和y,则必能同时整除b和y;而能够同时整除b和y的数也必能同时整除x和y,即x和y的公约数与b和y的公约数是相同的,其最大公约数也是相同的,则有f(x, y)= f(y, x%y)(y > 0),如此便可把原问题转化为求两个更小数的最大公约数转载 2011-05-14 19:34:00 · 605 阅读 · 0 评论 -
二叉树的左旋和右旋
树的旋转,分为左旋和右旋,以下借助图来做形象的解释和介绍:1.左旋(右子为轴,当前结点左旋)如上图所示:当在某个结点pivot上,做左旋操作时,我们假设它的右孩子y不是NIL[T],pivot可以为树内任意右孩子而不是NIL[T]的结点。左旋以pivot到y之转载 2011-10-05 10:31:34 · 30583 阅读 · 3 评论 -
红黑树
红黑树(带色的二叉查找树)(1)根结点黑色(2)红色结点的子结点为黑色(红色不相邻)(3)某结点到所有的空结点路径含相等数目的黑结点"(4)空结点为黑色"=====================================================原创 2011-10-04 15:36:12 · 1050 阅读 · 0 评论 -
快速排序
【1】单向扫描PARTITION(A, p, r) x ← A[r] //以最后一个元素,A[r]为主元 i ← p - 1 for j ← p to r - 1 //注,j从p指向的是r-1,不是r。原创 2011-10-09 14:33:31 · 411 阅读 · 0 评论 -
背包问题
0-1背包:有N件物品和一个容量为V的背包。第i件物品的重量是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大。f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]} 。 可以压缩空间,f[v]=max{f[v],f[v原创 2011-10-24 10:00:10 · 634 阅读 · 1 评论 -
KMP(字符串匹配)算法 O(m+n)
在长度为m字符串中匹配长度为n的字符串加快回溯:(1)建立回溯数组,O(n) ;(2)开始匹配,失败则回溯匹配串下标,O(m)Next [ ]数组 : Next [ k ]表示k及K之前最长的等长前后缀 (P[0...j-1]中最长后缀的长度等于相同字符序列的前缀),k为下标------------------------------------------------原创 2011-09-04 14:17:34 · 1335 阅读 · 0 评论 -
最长公共子序列
动态规划的一个计算最长公共子序列的方法如下:以两个序列 X、Y 为例子:设有二维数组 f[i][j] 表示 X 的 i 位和 Y 的 j 位之前的最长公共子序列的长度,则有: f[1][1] = same(1,1) f[i][j] = max{f[i-1][j-1]+same(i,j),f[i-1][j],f[i][j-1]} 其中,sam原创 2011-10-24 09:41:33 · 541 阅读 · 0 评论 -
排序算法比较
http://blog.youkuaiyun.com/whuslei/article/details/6442755基数排序:由于每一趟的"分配"都是对全部记录处理一遍,因此它的时间复杂度是O (n),而每一趟的"收集"只是巡查一遍队列,依次将各非空队列的队尾指针所指结点链接到下一个非空队列的队头指针所指结点,因此它的时间复杂度是O (r),因此一趟分配和收集的时间复杂度为O (n+r)原创 2011-09-03 00:23:27 · 526 阅读 · 0 评论 -
【MapReduce】
MapReduce通过把对数据集的大规模操作分发给网络上的每个节点实现可靠性(Map);每个节点会周期性地把完成的工作和状态的更新报告回来(Reduce)。大多数分布式运算可以抽象为MapReduce操作。Map是把输入Input分解成中间的KeyValue对,Reduce把KeyValue合成最终输出Output。这两个函数由程序员提供给系统,下层设施把Map和Reduce操作分布在集群上运行原创 2014-01-06 10:26:54 · 749 阅读 · 0 评论 -
Floyd算法
Floyd算法是一个经典的动态规划算法。用通俗的语言来描述的话,首先我们的目标是寻找从点i到点j的最短路径。从动态规划的角度看问题,我们需要为这个目标重新做一个诠释(这个诠释正是动态规划最富创造力的精华所在),floyd算法加入了这个概念 Ak(i,j):表示从i转载 2011-05-13 10:53:00 · 595 阅读 · 0 评论 -
B树,B+树
B树(m叉树)(1)每个结点最多m棵子树(2)根结点(非叶子)至少2棵子树(3)叶结点同一层(4)其他 至少m/2(上整)棵子树,格式(n,A0,K1,A1,K2,A2...Kn,An),n个数据,数据和子树严格有序B树查找:查结点(磁盘)+查子树(内原创 2011-10-04 09:48:17 · 654 阅读 · 0 评论 -
路由算法
RIP(距离向量算法):定期交换路由表收到相邻(路由器X的RIP报文)路由表1.修改所有项下一跳改为X, 距离加12.更新本路由表(1)空目的网络:原路由表无目的网络,直接添加(2)同目的网络: 下一跳是X, 替换 下一跳不是X,原创 2011-10-14 10:41:10 · 940 阅读 · 0 评论 -
堆排序
堆排序堆排序是一种选择排序。是不稳定的排序方法。时间复杂度为O(nlog2n)。堆排序的特点是:在排序过程中,将排序数组看成是一棵完全二叉树的顺序存储结构,利用完全二叉树中双亲节点和孩子节点之间的内在关系,在当前无序区中选择关键字最大(或最小)的记录。基本思想转载 2011-07-04 14:05:07 · 401 阅读 · 0 评论 -
二叉树遍历
前序:根左右中序:左根右后序:左右根1.递归:调节 root,Travesal(left),Tavesal(right)顺序即可2.非递归:(1)前序:root先入栈,每出栈一个先访问,再右->左入栈(2)中序:每次所有左结点入栈,出栈访问,如果有右子树,则右原创 2011-07-04 17:11:48 · 420 阅读 · 0 评论 -
字典树(Trie树)
Trie树就是字典树,其核心思想就是空间换时间。举个简单的例子。给你100000个长度不超过10的单词。对于每一个单词,我们要判断他出没出现过,如果出现了,第一次出现第几个位置。这题当然可以用hash来,但是我要介绍的是trie树。在某些方面它的用途更大。比如转载 2011-09-07 15:18:58 · 538 阅读 · 0 评论 -
可视化数据结构
基础Stack栈: 数组实现Stack栈: 链表实现Queues队列: 数组实现Queues队列: 链表实现Lists列表: 数组实现 ( java 版演示)Lists列表: 链表实现 ( java 版演示)索引Binary S转载 2011-09-07 14:47:52 · 671 阅读 · 0 评论 -
Fibonacci数列第n项的log(n)算法
拆分成二进制表示log(n)的乘积最后只需要log(n)个乘积原创 2011-09-19 16:13:10 · 482 阅读 · 0 评论 -
全排列算法
void perm(int list[], int k, int m) { int i; if(k == m) { for(i = 0; i m; i++)原创 2011-10-11 10:16:00 · 461 阅读 · 0 评论 -
页面替换算法
(1)先入先出(FIFO)(2)最近最少使用(LRU)(3)最优(OPT):换最晚用到的(4)二次机会(SCR):标记(0/1),环形队列(0:直接换,1:清0下一个)原创 2011-10-12 15:38:59 · 639 阅读 · 0 评论 -
加解密+签名+证书
密钥依赖密钥而不依赖加密算法(私有的加密算法不靠谱)密钥长度决定密钥空间和加解密速度CEK:内容密钥 KEK:密钥的密钥盐(随机数):防字典(攻击)对称加密:密钥配送问题加密模式(加密数据有可能比一次能加密的长度长)分组加密:分组迭代加密 (加密的长度有限制),分组模式ECB、CBC、CFB、OFB、CTR流加密:直接整体加密加解密RSA:大整数的质数分解(非对称) 加密(e,n):msg^e原创 2017-03-29 16:31:00 · 920 阅读 · 0 评论