基础数据结构和算法
HQ_Hanks
这个作者很懒,什么都没留下…
展开
-
LCA算法实现方法介绍
LCA算法是用于在一个树或者一个图中,找出两个节点的最近的公共祖先。关于离线算法和在线算法的区别: 对于一个在线算法是指它可以以序列化的方式一个个的处理输入,也就是说在开始时并不需要已经知道所有的输入。如插入排序 对于一个离线算法,在开始时就需要知道问题的所有输入数据,而且在解决一个问题后就要立即输出结果。如选择排序 (选择排序在排序前就需要知道所有待排序元素,然转载 2014-03-02 16:54:03 · 2260 阅读 · 0 评论 -
Bitmap用于数据查询和判重
位图(bitmap)是编码布尔信息的非常简洁的方式,位图的思想是:整数类型(字符类型)的每个位都可以编码一个布尔值——通常用0表示false,用1表示true。通过位操作将其中的某位设置成0或者1。#includeusing namespace std;int main(){ int k=1<<6; //将第6个bit位为1,其余为0 int j=1<<7; int原创 2015-06-07 15:17:26 · 1010 阅读 · 0 评论 -
字典树简介
原文地址:http://www.cnblogs.com/dolphin0520/archive/2011/10/11/2207886.html 向原作者致敬! Trie树 Trie树也称字典树,因为其效率很高,所以在在字符串查找、前缀匹配等中应用很广泛,其高效率是以空间为代价的。一.Trie树的原理 利用串构建一个字典树,这个字典树保存了串的公共前缀信息,因转载 2015-07-26 16:14:36 · 480 阅读 · 0 评论 -
二叉树相关算法总结
转载地址:http://blog.csdn.net/walkinginthewind/article/details/7518888 向原作者致敬!树是一种比较重要的数据结构,尤其是二叉树。二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒。二叉树是递归定义的,因此,与二叉树有关的题转载 2015-07-05 22:55:36 · 456 阅读 · 0 评论 -
迭代器失效问题(转)
近期看书遇到了迭代器失效的问题,认真搜了一些资料,也看了一些博客,感觉别人已经说得很详细了,就不重复造轮子了,贴上他人博客内容,留在参考学习。 原文地址:http://www.cppblog.com/JohnsonLu/archive/2009/10/14/98590.html从一个简单的问题开始,删除数组中某个元素后连续重复的元素,例如 1,1,2,3,3,1,1,1,4,0转载 2015-07-13 17:05:38 · 359 阅读 · 0 评论 -
B-tree和B+tree浅析
原文地址:http://www.cnblogs.com/coder2012/p/3330311.htmlB-tree&B+tree B-tree,B是balance,一般用于数据库的索引。使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度。而B+tree是B-tree的一个变种,大名鼎鼎的MySQL就普遍使用B+tree实现其索引结构。 那数据库为转载 2015-07-20 10:41:12 · 1015 阅读 · 0 评论 -
快速排序的尾递归优化
函数递归需要借助栈来保存中间状态信息,由此需要大量的栈空间,减少递归层次,一伙减少递归保存的中间参数信息,均可以避免stackoverflow的出现。int Partition(int *p,int len,int start,int last){ int flag=*(p+start); int i=start; int j=last; while(i<j) { whil原创 2015-07-22 15:59:32 · 3997 阅读 · 0 评论 -
海量数据处理方法小结
原文地址:http://www.cnblogs.com/lovexinsky/archive/2012/03/09/2387583.html 向原作者致敬!在实际的工作环境下,许多人会遇到海量数据这个复杂而艰巨的问题,它的主要难点有以下几个方面:一、数据量过大,数据中什么情况都可能存在。如果说有10条数据,那么大不了每条去逐一检查,人为处理,如果有上百条数据,转载 2015-08-31 11:00:12 · 817 阅读 · 0 评论 -
bitmap的用法
bitmap很容易跟位图文件(Bitmap)混淆,后者是用来表示图片的。前者是一种编程技巧,即用整型或字符型数组,其中每个数组元素的每一位都用来描述某个特征,如此很好的节省了内存空间,如若要表示100 000 000个数,若用整型数据表示,则仅需(100 000 000/8)个整型变量。 简单代码:转载地址:http://blog.csdn.net/yushuai007008/articl转载 2015-08-05 16:55:06 · 742 阅读 · 0 评论 -
高效的求取100以内的质数
求取100以内的质数,常见的做法就是双重循环,内层循环的终值为外层循环值的二次方根值,若两数一直不能够整除,则为质数。但两层循环在数据量较大时,效率极低。现提供另外一种思路:#include#includeusing namespace std;int main(){ //质数只可能从奇数总产生,故若判断100以内的质数,只需用50的布尔数组来存储各个奇数的判断结果 boo原创 2015-05-11 15:29:21 · 2493 阅读 · 0 评论 -
C++中vector和set删除一亿个数字中的奇数
原文地址:http://blog.csdn.net/corcplusplusorjava/article/details/45115057 向原作者致敬一、vector先贴代码再解释:[cpp] view plaincopy#include #include #include #include转载 2015-04-25 17:31:00 · 641 阅读 · 0 评论 -
并查集
并查集常用来解决不相交集合的合并问题,在加入路径压缩和合并后,具有非常好的时间和空间复杂度。#includeusing namespace std;int father[100];int find(int &x){ int r=x; int i,j; while(father[r]!=r) r=father[r]; i=x; w原创 2015-04-25 12:09:39 · 372 阅读 · 0 评论 -
C风格字符串与标准库类String 区别和转换
C风格字符串与标准库类String 区别和转换,数组与标准库类vector的区别和转换 C风格字符串可以说是以字符null结束的字符数组。char *p=”here is a string”; //p存放在静态存储区char p[]={‘h’, ’e’, ’r’, ’e’, ’\0’}; //存放在栈区 ,必须有’\0’作为结束符处理C风格字符串的主要函数:添加头文件 St原创 2014-02-23 16:03:01 · 937 阅读 · 0 评论 -
快速排序算法分析
经常在面试时会有面试官要求直接写出快速排序算法,因为ga原创 2014-10-27 18:47:21 · 527 阅读 · 0 评论 -
《STL源码剖析》中_rotate_cycle算法解析
http://www.cnblogs.com/atyuwen/archive/2009/11/08/rotate.html这里的rotate操作,也就是指循环移位。比如将串“ABCDEFG”以D为中心旋转,就相当将该串向左循环移位,直到第一个元素为D为止,最后 得到新串“DEFGABC”。要想方便的完成rotate操作,一个常见的技巧是这样的:先将前半部分反转,再将后半部分反转,最后再转载 2014-10-01 16:58:29 · 1124 阅读 · 0 评论 -
ACMer必备技能——任重道远
下面给个计划你练练:第一阶段:练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码,因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打出来。1.最短路(Floyd、Dijstra,BellmanFord) 2.最小生成树(先写个prim,kruscal要用并查集,不好写) 3.大数(高精度)加减乘除 4.二分查转载 2014-10-02 21:29:46 · 622 阅读 · 0 评论 -
深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
原文地址:点击打开链接 向原作者致敬!在求取有约束条件的优化问题时,拉格朗日乘子法(Lagrange Multiplier) 和KKT条件是非常重要的两个求取方法,对于等式约束的优化问题,可以应用拉格朗日乘子法去求取最优值;如果含有不等式约束,可以应用KKT条件去求取。当然,这两个方法求得的结果只是必要条件,只有当是凸函数的情况下,才能保证是充分必要条件。KKT条件是拉格朗日乘子法的泛转载 2014-11-26 11:31:49 · 500 阅读 · 0 评论 -
C/c++语言中 float double在内存中的存储结构详解
转至博客:http://blog.csdn.net/todd911/article/details/14224249 C语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit, double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?如果胡乱分配,那世界岂不是乱套了么,转载 2015-03-27 21:53:23 · 6153 阅读 · 1 评论 -
如何设计一个高效算法从N个正整数中,随机选取n个不同的随机数 n<=N
1、若N不算大,且N>>n。可以采用数组存储1-N个数,然后运用随机函数产生一个随机数m,以m为下标的数组索引值即为所找,同时将其与最后一个元素交换,将数组大小减少1后,再次调用随机函数产生随机数,然后又将其元素与倒数第二个交换。依次类推。 2、若N较大,则方法1存在较大的不足就是需要耗费大量的存储空间,原创 2015-03-09 09:11:07 · 1940 阅读 · 0 评论 -
结构体内存对齐
原文地址:http://blog.sina.com.cn/s/blog_5059be880100pgcv.html 一、内存对齐的原因大部分的参考资料都是如是说的:1、平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。2、性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在转载 2015-03-26 19:43:22 · 457 阅读 · 0 评论 -
MD5算法理论和实现
MD5是消息摘要算法第5版,它是一种在计算机安全领域广泛使用的一种散列函数,用来提供消息完整性保护。任意长度的数据算出来的MD5值长度都是一样的,均为128bit,而且即使只修改原始数据的极小一部分,也会使算出的MD5值产生很大的变化。十年前,2005年山东大学的王小云教授发表论文说可以破解MD5码。但目前MD5码的应用还是挺广泛的,可能不久的将来会有新的算法取代其。MD5算法理论填充:填充到51原创 2016-04-25 21:29:15 · 1148 阅读 · 0 评论