算法
DOOM
这个作者很懒,什么都没留下…
展开
-
MOD 运算
The congruence relationModular arithmetic can be handled mathematically by introducing a congruence relation on the integers that is compatible with the operations of the ring of integers: additio转载 2008-05-09 21:36:00 · 7421 阅读 · 1 评论 -
线段树
今天间或着看了ahyangyi大牛的线段树论文,总算又找回了些线段树的记忆。。。以下论文版权属于ahyangyi定义首先,线段树是一棵“树”,而且是一棵完全二叉树。同时,“线段”两字反映出线段树的另一个特点:每个节点表示的是一个“线段”,或者说是一个区间。事实上,一棵线段树的根节点表示的是“整体”的区间,而它的左右子树也是一棵线段树,分别表示的是这个区间的左半边和右转载 2009-10-26 13:51:00 · 1279 阅读 · 0 评论 -
最少砝码表示所有小于N的数
1、1,2,3...n千克的砝码可以称出1,2,3..n千克的所有重量,那请问要想称出1,2,3....n千克的所有重量,最少用多少砝码这个小学奥林匹克做烂的题,我第一秒钟的第一反应就是1,2,4,8,16,32...这个序列,于是我第二秒钟就说,这个题小学数学奥林匹克做了很多遍了,当时要用最少的钱币值表示1,2,3...n的所有钱币值,就是这个序列,说完差不多是第十秒,然后他在转载 2009-10-30 18:45:00 · 1644 阅读 · 1 评论 -
求数组的最大的非邻接子数组之和
动态规划 对数组 a[i], i = 1, 2, 3, ..., N , 结果是 f[N] f[1] = a[1] f[2] = max (a[1], a[2]) f[n + 2] = max(f[n + 1], f[n] + a[n + 2])转载 2009-10-31 21:33:00 · 502 阅读 · 0 评论 -
B树、B-树、B+树、B*树
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等转载 2009-11-09 18:07:00 · 817 阅读 · 0 评论 -
深入double array trie
什么是Double Array TrieDouble Array Trie是TRIE树的一种变形,它是在保证TRIE树检索速度的前提下,提高空间利用率而提出的一种数据结构,本质上是一个确定有限自动机(deterministic finite automaton,简称DFA)。所谓的DFA就是一个能实现状态转移的自动机。对于一个给定的属于该自动机的状态和一个属于该自动机字母表Σ的转载 2009-11-26 23:52:00 · 934 阅读 · 3 评论 -
动态规划 (Dynamic Programming) 之 背包问题合辑 (Knapsack, Subset Sum, Partition and change making problem )
背包问题一直是动态规划中的经典问题。这个问题又分成01背包,完全背包,多重背包,分组背包等等。。我在这里只记录下01背包(0-1knapsack)和完全背包(unboundedknapsack)。背包问题的简单描述就是有一个背包和一堆物品。每个物品有自己的大小和价值。我们希望在一个特定容量的背包中放入价值尽可能大的物品。01背包呢就是每个物品最多只能放一次,也就是要么放要么不放,所以被转载 2009-12-01 01:18:00 · 1261 阅读 · 2 评论 -
Change-making problem
http://en.wikipedia.org/wiki/Change-making_problem Given unlimited amounts of coins of denominations d1 > … > dm , must contain 1.give change for amount n with the least number of coins.Does t原创 2009-12-01 01:20:00 · 1255 阅读 · 0 评论 -
最近公共祖先(LCA)和RMQ问题
最近公共祖先和RMQ问题(1) / / (2) (7) / / /(3) (4) (8) / / (5) (6)一个nlogn 预处理,O(1)查询的算法. Step 1: 按先序遍历整棵树,记下两个信息:结点访问顺序和结点深度. 如上图:转载 2009-12-23 14:31:00 · 1042 阅读 · 0 评论 -
A*寻路初探
<br />译者序:很久以前就知道了A*算法,但是从未认真读过相关的文章,也没有看过代码,只是脑子里有个模糊的概念。这次决定从头开始,研究一下这个被人推崇备至的简单方法,作为学习人工智能的开始。<br />这篇文章非常知名,国内应该有不少人翻译过它,我没有查找,觉得翻译本身也是对自身英文水平的锻炼。经过努力,终于完成了文档,也明白的A*算法的原理。毫无疑问,作者用形象的描述,简洁诙谐的语言由浅入深的讲述了这一神奇的算法,相信每个读过的人都会对此有所认识(如果没有,那就是偶的翻译太差了--b)转载 2011-05-31 17:44:00 · 743 阅读 · 0 评论 -
Trie树
转自xiaoyao4005.cublog.cn发现导论上好像没有...收下了^ ^Trie树既可用于一般的字典搜索,也可用于索引查找。对于给定的一个字符串a1,a2,a3,...,an.则采用TRIE树搜索经过n次搜索即可完成一次查找。不过好像还是没有B树的搜索效率高,B树搜索算法复杂度为logt(n+1/2).当t趋向大,搜索效率变得高效。怪不得DB2的访问内存设置为虚拟转载 2011-06-22 00:51:00 · 577 阅读 · 0 评论 -
A*算法可行解与最优解的偏离处
A*寻路初探 F = G + HG的计算依赖于来自每个格子与相邻8个方向格子的距离D,文中不同格子的D1-8相同。如果S到V的最短路径G是准确的,那么最终获得的最短路径就是准确的,因为终点的G就是所求的最短路径。任何情况第一和第二个加入关闭列表的G都是准确的原创 2011-07-28 21:02:49 · 3621 阅读 · 1 评论 -
A*算法的AS实现
import flash.display.DisplayObject; import flash.utils.getTimer; /** * @author gjs * @author magicianzrh * * 使用lx的方式处理 * 用位信息原创 2011-08-11 17:52:48 · 1606 阅读 · 1 评论 -
寻路算法的平滑处理
AA原创 2011-08-11 17:54:36 · 6273 阅读 · 0 评论 -
因数数量奇偶
对一批编号为1-100全部开关朝上(开)的灯进行以下操作:开关编号凡是1的倍数反方向拨一次开关;若该编号也是2的倍数反方向又拨一次开关;若该编号又是3的倍数反方向又拨一次开关……以此类推一直计算到100为止。目的:请trace出经过反复开关操作后所有关闭的灯的开关编号。原创 2011-09-30 11:14:35 · 815 阅读 · 0 评论 -
相似图片搜索的原理
上个月,Google把“相似图片搜索”正式放上了首页。你可以用一张图片,搜索互联网上所有与它相似的图片。点击搜索框中照相机的图标。一个对话框会出现。 你输入网片的网址,或者直接上传图片,Google就会找出与其相似的图片。下面这张图片是美国女演员Alyson Hannigan。上传后,Google返回如下结果:类似的”相似图片搜索引擎”还有不少,Ti转载 2011-10-21 13:47:56 · 640 阅读 · 0 评论 -
遗传算法:内存中的进化
http://songshuhui.net/archives/10462这是个真实的故事。从前在海岸边有一群扇贝在悠哉游哉地生活繁衍着。它们自然是衣食不愁,连房子也有了着落。它们担忧的只有一件事:每隔一段时间,总有一个人来挖走它们之中的一部分。当然啦,挖回去干什么这大家都知道。但扇贝们不知道的是,这人的家族图腾是Firefox的图标,所以他总是选择那些贝壳花纹长得比较不像Firefox转载 2011-12-26 19:33:55 · 2329 阅读 · 0 评论 -
广告排名区间
问题背景shifen广告消费预估系统可以估计出一段时间内一个特定的广告在检索结果中排在各个位置的几率。比如系统对某广告的输出如下:p1=0.03,p2=0.08,p3=0.04……这说明该广告展现在第1位的概率是3%,展现在第2位的概率是8%,展现在第3位的概率是4%……问题是:如何给出一个排名估计区间[i,j],使得广告出现在该区间中的概率大于或等于一个预设值p,同时这个区间原创 2009-10-26 13:01:00 · 522 阅读 · 0 评论 -
Papercut
Time Limit:1000MS Memory Limit:65536KTotal Submissions:266 Accepted:71Description现在桌面上有一张矩形纸,上边有n×m个格子,每个格子有一个数字。每张矩形纸可以算出一个数值F,F是由纸张里任意两个不同的格转载 2009-10-26 09:56:00 · 590 阅读 · 0 评论 -
反转一个字节
很久以前发过一个相关的随笔: 反转一个字节的算法以及相关的效率探讨: 效率的边界--几种反转字节算法分析昨天 周星星 旧事重提,又引发了对这个简单问题的讨论,相关的东西以前已经讨论了很多了,这里不再重复,只提供两个新的算法:首先是周星星的新算法:unsigned char reverse8( unsigned char c转载 2008-05-22 14:40:00 · 1272 阅读 · 0 评论 -
判断某个点是否在一个多边形中
BOOL Geometry::PtInPolygon( CPoint *points, int nSize, CPoint pt ){ if ( points == NULL || nSize < 3 ) { return FALSE; } int i, j; BOOL c = FALSE; int转载 2008-06-26 18:22:00 · 1595 阅读 · 0 评论 -
Golomb ruler
http://en.wikipedia.org/wiki/Golomb_ruler原创 2008-10-28 13:45:00 · 1140 阅读 · 0 评论 -
大量Hash算法的实现
http://hi.baidu.com/algorithms/blog/item/79caabee879ece2a2cf53440.htmlHash算法有很多很多种类。具体的可以参考之前我写的Hash算法的一些分析。本处给大家提供一个集合了很多使用的Hash算法的类,应该可以满足不少人的需要的:/*** Hash算法大全* 推荐使用FNV1算法* @algorithm None* @au转载 2008-10-27 14:33:00 · 982 阅读 · 0 评论 -
动态规划的一点理解
假设最后的最优解是由一系列步骤构成。直接去掉最优解的最后一步,前面所有步骤也是其当前步骤的一个子问题最优解。可以把最后的最优解当作已知写出来。原创 2008-10-14 02:01:00 · 486 阅读 · 0 评论 -
在从1到n的正数中1出现的次数
题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次。http://zhedahht.blog.163.com/blog/static/25411174200732494452636/24105我的思路是计算每一位上1会出现在哪些数字中。建一个数组a[n]放置每一位,从个位原创 2009-01-05 20:58:00 · 1585 阅读 · 1 评论 -
和为n连续正数序列
http://zhedahht.blog.163.com/blog/static/25411174200732711051101/题目:输入一个正数n,输出所有和为n连续正数序列。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。 15/5 = 3 15/3 = 5 15/2 = 7.5 n/i=ji原创 2009-01-06 01:05:00 · 569 阅读 · 0 评论 -
O(lg p)计算n^p
把指数转化为二进制,然后使用Scaling Method,时间复杂度为O(lg p)。unsigned power(unsigned n, unsigned p) { unsigned k = 1; while (p>1) { if(0 != (p &1)) k *= n; n *= n; p /= 2; } retu转载 2009-01-10 16:32:00 · 1125 阅读 · 0 评论 -
计算x中有多少个为1的位
1int Count1(int x) 2{ 3 int n = 0; 4 while(x) 5 { 6 n++; 7 x&=x-转载 2009-09-28 15:58:00 · 602 阅读 · 0 评论 -
洗牌算法
1.#define N 10000000void swap(int *i, int *j)...{ int temp=*i; *i=*j; *j=temp; }int* RandInts()原创 2009-09-28 17:02:00 · 519 阅读 · 0 评论 -
动态规划与排列组合
来自:http://blog.csdn.net/pongba/archive/2008/06/05/2513247.aspx 像所有的新手一样,对一种算法思想的理解需要经历从肤浅(流于表面形式)到逐渐触摸到本质的过程。为什么说"逐渐"触摸到本质,是因为很多时候你并不确定一个解释是不是最本质的,有时候会有好几个等价的解释,各自在不同的场景下具有启发。比如对动态规划(DP)的理解,转载 2009-09-23 17:57:00 · 731 阅读 · 0 评论 -
完全二叉树求最底层最右边的节点
给一个完全二叉树,求最底层最右边的节点。节点数N是确切值,所以不断除以2,记录奇偶性,然后反过来从根出发,偶则向左,奇则向右,一直到底就找到了。O(lgN)。原创 2009-09-24 18:34:00 · 2706 阅读 · 1 评论 -
海量数据处理:找出现次数最多的那些...
回忆一下tx的二面,有一道题是这样的:假设有1kw个身份证号,以及他们对应的数据。身份证号可能重复,要求找出出现次数最多的身份证号。一个很显然的做法是,hash之,O(n)搞定。这前提是内存中可以存下。如果是中国的13亿人口,内存中存不下呢?借用磁盘,多次扫描?磁盘IO的速度慢得能让你疯掉。这时候你终于感受到,中国人口真TMD多阿。。。--然后再看看今天的ast转载 2009-09-29 01:27:00 · 1516 阅读 · 1 评论 -
位运算
1void main(unsigned int x) 2{ 3 //判断无符号整数x是否是2的幂 4 if(x&(x-1))//若一个数是2的幂,则除最高位为1外,其余位均为0(二进制表示,下同) 5转载 2009-09-28 17:06:00 · 642 阅读 · 0 评论 -
求n!末尾0的个数
思考: 该题实际上是求(2 5)因子对的个数。对于任意一个阶乘,5因子的个数总是小于2因子的个数,仅需考虑n!中5因子的个数方法: (1) 将该数用 5 除, 得到的商取整数。 (2) 然后再用所得商当被除数除以 5,得到的商取整数。 (3) 持续做到商等于 0 为止。 (4) 过程中的商加总即为阶乘的尾数 0 的个数。 例: 1234! 的尾数转载 2009-10-13 01:00:00 · 679 阅读 · 0 评论 -
A从2到99之间抽了2个数字,把和告诉B,积告诉C
问题:A从2到99之间抽了2个数字,把和告诉B,积告诉CB说我不知道这2个数,但是C也肯定不知道C说我开始确实不知道,但是现在知道了B说这样我也知道了求这2个数.为什么? 我的解答:首先,正确答案是4和13。设B得到的和记做B,C得到的积记做C,这两个数记做x和y。1.预备结论,a)100以内的质数有25个,如下:2,3,5,7,11,13,转载 2009-10-18 12:28:00 · 8234 阅读 · 0 评论 -
跳跃表(Skip List)
跳跃表(Skip List)是1987年才诞生的一种崭新的数据结构,它在进行查找、插入、删除等操作时的期望时间复杂度均为O(logn),有着近乎替代平衡树的本领。而且最重要的一点,就是它的编程复杂度较同类的AVL树,红黑树等要低得多,这使得其无论是在理解还是在推广性上,都有着十分明显的优势。 首先,我们来看一下跳跃表的结构 跳跃表由多条链构成(S0,S1,S2 ……,Sh),转载 2012-03-24 00:41:30 · 3326 阅读 · 0 评论