算法
文章平均质量分 89
风云来
这个作者很懒,什么都没留下…
展开
-
二叉树和图的遍历
二叉树遍历包含深度优先遍历和广度优先遍历。实现的方式有递归方式和非递归方式。递归方式较直观,本文使用非递归方式:深度优先遍历使用栈结构,广度优先遍历使用队列方式。原创 2014-07-24 18:18:02 · 1661 阅读 · 0 评论 -
谷歌面试算法总结
1.谷歌面试题:给定能随机生成整数 1 到 5 的函数,写出能随机生成整数 1 到 7 的函数。回答:此题的关键是让生成的 1 到 7 的数出现概率相同。 只要我们可以从 n 个数中随机选出 1 到 n 个数,反复进行这种运算,直到剩下最后一个数 即可。 我们可以调用 n 次给定函数,生成 n 个 1 到 5 之间的随机数,选取最大数所在位置即 可满足以上要求。 例如 初始的 7 个数[1,2原创 2014-09-02 13:21:21 · 974 阅读 · 0 评论 -
数组算法的总结
数组相关算法的学习。原创 2014-08-14 14:08:33 · 2770 阅读 · 0 评论 -
循环冗余计算的效验码
一般的XOR CRC16 校验码的计算:原创 2013-12-30 12:00:05 · 1497 阅读 · 0 评论 -
链表的算法总结
一.判断链表是否存在环型链表问题: 说明:判断一个链表是否存在环,例如下面这个链表就存在环,n1-->n2-->n3-->n4-->n5-->n2,环的开始结点是n5 解法:这里有个比较简单的解法:设两个指针p1,p2,每次循环p1向前走一步,之向前走两步,直到p2碰到NULL指针(无环)或两个指针相等结束循环算法(有环),即如果两个指针相等则说明存在环。代码如下:原创 2013-04-09 03:14:18 · 956 阅读 · 0 评论 -
内部排序算法
常用的内部排序算法主要分为五类:插入、交换、选择、归并、基数排序。插入:直接插入、折半插入、希尔排序。交换:冒泡、快速排序。选择:简单选择、堆排序。归并:2路归并排序。原创 2013-04-06 02:09:28 · 1446 阅读 · 0 评论 -
字符串的算法总结
1、按单词反转字符串问题:单词用空格分开的字符串,如 Here is blog.csdn.net/chenjiayi 经过反转后变为:blog.csdn.net/chenjiayi is Here原创 2013-04-08 21:45:58 · 985 阅读 · 0 评论 -
RC5分组密码算法
RC5分组密码算法是1994由麻萨诸塞技术研究所的Ronald L. Rivest教授发明的,并由RSA实验室分析。它是参数可变的分组密码算法,三个可变的参数是:分组大小、密钥大小和加密轮数。在此算法中使用了三种运算:异或、加和循环。RC5是种比较新的算法,Rivest设计了RC5的一种特殊的实现方式,因此RC5算法有一个面向字的结构:RC5-w/r/b,这里w是字长其值可以是16、32或64对于不同的字长明文和密文块的分组长度为2w位,r是加密轮数,b是密钥字节长度。RC5是一个分组长度可变的密码算法.原创 2015-07-11 14:20:06 · 9754 阅读 · 0 评论 -
字符串为键的自定义哈希表(暴雪字符串哈希算法)
这是个在暴雪字符串哈希算法基础上实现的哈希表。在代码实现上有一定优化。设计上:1)加密表是足够长的(unsigned long)无符号型数组。数组的值是由算法计算的固定的一些值。加密表是用来计算字符串(在某种子的情况下)的哈希值。2)哈希值是字符串(大写)的所有的字符的ascii码相关的。使用单向散列函数,从概率上认为,不同字符串的3种不同的种子的3个哈希值不会是都是相同的。(计算的是10的22.3次方分之一的概率)3)每个节点有3个hash值(hash1,hash2,hash3),hash1 是寻原创 2014-07-12 00:19:20 · 4103 阅读 · 0 评论 -
Levenshtein编辑距离
编辑距离概念描述:编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。例如将kitten一字转成sitting:sitten (k→s)sittin (e→i)sitting (→g)俄罗斯科学家Vladimir Levenshtein在1965年提出这原创 2017-07-11 00:27:46 · 818 阅读 · 0 评论 -
DFA确定性有限状态机过滤敏感词
通常把确定的有穷状态自动机(有穷状态自动机也就是本文讨论的这种状态机)称为DFA,把非确定的有穷状态自动机称为NFA。原创 2016-06-17 15:50:32 · 3413 阅读 · 0 评论 -
leetcode算法总结
leetcode总结:leetcode的资料在网上已较多,这里对各个算法进行归纳总结和简单分析。电子书形式方便查询。持续更新。由于csdn对长文件的排版较难编写和查看,于是放到github上https://github.com/doerjiayi/algorithm...原创 2019-04-28 01:14:44 · 3858 阅读 · 0 评论 -
从快速排序的递归方式和非递归方式来看函数调用帧栈
#include<iostream>#include<vector>#include<stack>#include<cstdlib>#include<algorithm>using namespace std;//根据轴分开两边template <typename Data>int partit...原创 2019-05-19 11:19:01 · 524 阅读 · 0 评论 -
KMP匹配算法
举例来说,有一个字符串"BBCABCDABABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?KMP匹配算法代码实现:#include <string>#include <vector>#include <queue>#include <iostream>#include <stdio.h&...原创 2019-05-15 00:15:49 · 524 阅读 · 0 评论 -
实用数据结构
作为程序猿(媛),你必须熟知一些常见的数据结构,比如栈、队列、字符串、链表、二叉树、哈希,但是除了这些常见的数据结构以外,还有没有其他不是很有名,但却非常实用的数据结构呢,有人在 stackoverflow 上问了这样一个问题,得到了很多热心观众的回答,我们今天就来看看那些鲜为人知却非常实用的数据结构吧。首先,维基百科上的一个页面列举了常见的数据结构,你可以先去那个页面看看。下面我们就来看原创 2013-10-09 15:17:45 · 1200 阅读 · 0 评论 -
Bresenham 画直线算法
画线的算法不少,但要作到高速、简单并不容易。斜率相乘法是最简单的方法之一,但计算每个点均要花费不少时间用于乘、除法运算;下面介绍的是Bresenham's高效画线算法,对每个点的坐标计算只要加、减法就能完成。简化算法用伪Pascal语言描述如下:procedure DrawLine(x1, y1, x2, y2: Integer);varx, y, DeltaX, DeltaY,原创 2014-08-16 14:32:22 · 29070 阅读 · 8 评论 -
zlib 库的使用
1、zlib 介绍zlib 是通用的压缩库,提供了一套内存内压缩和解压函数,并能检测解压出来的数据的完整性。zlib 也支持读写 gzip (.gz) 格式的文件。原创 2013-05-18 03:17:32 · 4446 阅读 · 0 评论 -
游戏服务器之加密
根据网上的一个叫Xtea的算法修改的加密算法维基上说的是需要2115.15秒来破解64轮加密的27轮。基本上说在没有key的情况下,64轮是不可破的。这里的代码只要把ROUND 的16换成64轮就可以。对于游戏的话,个人觉得16轮差不多,效率可以好些。攻击记录:In 2004, Ko et al. presented a related-key differential attac原创 2014-03-24 21:51:50 · 2243 阅读 · 0 评论 -
可并堆与二叉堆
•定义:–二叉堆满足堆特性:父结点的键值总是大于或等于(小于或等于)任何一个子结点的键值,且每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)–完全二叉树,结点i的儿子是2*i和2*i+1,父亲是i/2;–当且仅当它满足以下两个条件之一时,才能称之为堆•(1)a[i]i*2]且a[i]i*2+1](即小根堆,结点的值不大于两个儿子的值)•(2)a[i]>=a[i*原创 2014-08-04 06:29:23 · 3984 阅读 · 0 评论 -
树堆结构
一棵treap是一棵修改了结点顺序的二叉查找树,如图,显示一个例子,通常树内的每个结点x都有一个关键字值key[x],另外,还要为结点分配priority[x],它是一个独立选取的随机数。假设所有的优先级是不同的,所有的关键字也是不同的。treap的结点排列成让关键字遵循二叉查找树性质,并且优先级遵循最小堆顺序性质:1.如果v是u的左孩子,则key[v] 2.如果v是u的右孩子,则ke原创 2014-08-04 08:12:22 · 777 阅读 · 0 评论 -
B树、B-树、B+树、B*树 介绍、比较与小结
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如:B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就转载 2014-05-18 18:04:56 · 758 阅读 · 0 评论