03 2012 档案
摘要:1. 定义: 位示图(bitmap)又叫位图,它的最小单元是一个bit。每个bit有两种取值1或0。 位示图是一种非常常用的结构,在索引,数据压缩等方面有广泛应用。本文介绍了位图的实现方法及其应用场景。 2. 实现 在C/C++中没有位示图这种数据类型,下面我们利用int来实现一个位示...
阅读全文
摘要:题目: 求排列组合 分析: 排列: 字典序法对给定的字符集中的字符规定了一个先后关系,在此基础上按照顺序依次产生每个排列。 [例]字符集{1,2,3},较小的数字较先,这样按字典序生成的全排列是:123,132,213,231,312,321。 生成给定全排列的下一个排列 所谓一个的下一个就是这一个与下一个之间没有字典顺序中相邻的字符串。这就要求这一个与下一个有尽可能...
阅读全文
摘要:题目: 整数A=a1+a1+a3+…+an (0<a1<=a2<=a3<=…<=an),求集合G={g|g={a1,a2,a3,…,an}} 分析: 1. 求A的表达式,假设已经确定an的值,那么接下来就是求解A-an的表达式。令B=A-an 2. 求B的表达式,假定已经确定bn的值,那么接下来就是求解B-bn的表达式。令C=B-bn 3. 求C的表达式...
阅读全文
摘要:题目:给一串字符,求他的全排列 如:{1,2,3}的全排列: 1 2 3 1 3 2 2 1 3 2 3 1 ...
阅读全文
摘要:题目: 有两个整数集合A,B,写一算法,验证A是不是包含B,即:A与B的交集是不是B 分析: 1.对B中的每个元素,遍历A。时间复杂度为O(n*m) 2. 分别对A,B两个集合排序,用两个指针p1,p2从左到右依次扫描A,B。 当*p1<*p2时, ++p1; 当*p1>*p2时,return fasle; ...
阅读全文
摘要:题目:设X和Y都是n位的十进制整数,计算它们的乘积XY。 分析: 我们可以用小学所学的方法来设计一个计算乘积XY的算法,但是这样做计算步骤太多,显得效率较低。如果将每2个1位数的乘法或加法看作一步运算,那么这种方法要作O(n2)步运算才能求出乘积XY。下面我们用分治法来设计一个更有效的大整数乘积算法。将n位的二进制整数X和Y各分为2段,每段的长为n/2位(为简单起见,假设n是2的幂),如...
阅读全文
摘要:一.linux内核网络栈代码的准备知识1. linux内核ipv4网络部分分层结构:BSD socket层: 这一部分处理BSD socket相关操作,每个socket在内核中以struct socket结构体现。这一部分的文件主要有:/net/socket.c /net/protocols.c etc INET socket层:BSD socket是个可以用于各种网络协议的接口,而当用于tcp/ip,即建立了AF_INET形式的socket时,还需要保留些额外的参数,于是就有了struct sock结构。文件主要有:/net/ipv4/protocol.c /net/ipv4/af_inet
阅读全文
摘要:题目:在数组中,数字减去它右边的数字得到一个数对之差。求所有数对之差的最大值。例如在数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是11,是16减去5的结果。 分析: 1.通过减小问题的规模来求解 可将数组分成左右两个部分分别求解,这样可就出现三种情况: a. 差的最大值在左边的数组里 b. 差的最大值在右边的数组里 c....
阅读全文
摘要:题目:如何对n个不重复出现的整数序列进行排序,已知这些数的范围为(0-65535),要求时间复杂度O(n),空间复杂度O(1) 分析: 可以申请一个大小为65536的数组A,数组的x下标代表数字x,A[x]代表x 在整数序列中出现的次数。扫描一遍整数序列就可以完成对该整数序列的排序,时间复杂度为O(n) 应为已知范围,申请大小为65536的数组,大小为常量,所以空间复杂度为O(1) 代码:...
阅读全文
摘要:题目: 把一个单链表倒序输出代码: 1: struct ListNode 2: { 3: ListNode *pnext ; 4: int value ; 5: ListNode(): 6: pnext(NULL),value(0){} 7: }; 8: void reverseList(ListNode* pNode) 9: { 10: if (!pNode){ 11: return ; 12: } 13: if(pNode){ 14: reverseList(pNode->pn...
阅读全文
摘要:题目:两个单向链表,找出它们的第一个公共结点 分析:该分析转载至http://zhedahht.blog.163.com/blog/static/254111742008053169567/ 如果两个单向链表有公共的结点,也就是说两个链表从某一结点开始,它们的m_pNext都指向同一个结点。但由于是单向链表的结点,每个结点只有一个m_pNext,因此从第一个公共结点开始,之后它们所有结点...
阅读全文
摘要:题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 分析: 该分析过程转载至 (http://zhedahht.blog.163.com/blog/static/2541117420071128950682/) 首先我们考虑这个问题的一个简单版本:一个数组里除了一个数字之外,其他的数字都出...
阅读全文
摘要:在很多的应用程序中会打印日志,用以记录相应的操作。当随着时间的增加,日志文件的大小也会慢慢的变大。使得我们不得不去处理这些日志:备份、删除等… 在linux系统中有一个叫logrotate的工具,可以专门用来管理日志文件:定期的进行备份(也叫转储),删除日志文件。logrotate实现的原理是非常简单的,详情可以”百度”。 下面说一下我个人中常用的logrotate的配置选项:...
阅读全文
摘要:1: #insert sort 2: def InsertSort(a): 3: for i in range(1,len(a)): 4: tmp = a[i] 5: k = i 6: j=i-1 7: while j >= 0 and a[j] > tmp : 8: a[j+1] =...
阅读全文
摘要:1: void* 2: memcpy ( void* dst, void* src, size_t len ) 3: { 4: size_t i = 0 ; 5: if((long)dst % sizeof(long) == 0 && 6: (long)src % sizeof(long) == 0 && 7: len % sizeof(long) == 0 ){ 8: long *d = dst ; 9: const long *s = src ; 10: ...
阅读全文