09 2012 档案

编辑距离及编辑距离算法
摘要:编辑距离概念描述:编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。例如将kitten一字转成sitting:sitten (k→s)sittin (e→i)sitting (→g)俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念。问题:找出字符串的编辑距离,即把一个字符串s1最少经过多少步操作变成编程字符串s2,操作有三种,添加一个字符,删除一个字符,修改一个字符解析:首先定义这样一个函数——edit(i, j),它表示第一个字符串的长度为i 阅读全文

posted @ 2012-09-28 16:05 as_ 阅读(65940) 评论(7) 推荐(10) 编辑

腾讯校招题:fork进程与缓存
摘要:题目描述:请问下面的两个程序各一共输出多少个“-”?#include <stdio.h>#include <sys/types.h>#include <unistd.h>int main(void){ int i; for(i=0; i<2; i++) { fork(); printf("-"); } return 0;}#include <stdio.h>#include <sys/types.h>#include <unistd.h>int main(void){ int i; for(i=0 阅读全文

posted @ 2012-09-26 14:15 as_ 阅读(2793) 评论(0) 推荐(4) 编辑

Belady现象
摘要:Belady现象:采用FIFO算法时,如果对—个进程未分配它所要求的全部页面,有时就会出现分配的页面数增多但缺页率反而提高的异常现象。Belady现象可形式化地描述为:一个进程户要访问M个页,OS分配舻个内存页面给进程P;对一个访问序列S,发生缺页次数为PE(占,N)。当N增大时,PE(S,N)时而增大时而减小。Belady现象的原因是FIFO算法的置换特征与进程访问内存的动态特征是矛盾的,即被置换的页面并不是进程不会访问的。 先进先出算法(FIFO)。选择装入最早的页面置换。可以通过链表来表示各页的装入时间先后。FIFO的性能较差,因为较早调入的页往往是经常被访问的页,这些页在FIFO算法下 阅读全文

posted @ 2012-09-26 10:35 as_ 阅读(4174) 评论(0) 推荐(0) 编辑

最小排列数
摘要:题目描述:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132。请给出解决问题的算法,并证明该算法。解析:对数组进行排序,排序规则:当两个数进行比较时,现将他们转坏为char数组,然后用两个char指针挨个字符进行比较,当其中一个为正常字符,而另一个为‘\0’,则后者指针回溯第一个字符,直到找到第一个不相同的字符,字符大者的对应数为大,或者当两者指针对应字符皆为‘\0’时,此时证明两个数字”相等“。具体实现,见下面参考代码:参考代码:#include <iostream>#includ 阅读全文

posted @ 2012-09-23 15:54 as_ 阅读(1594) 评论(0) 推荐(0) 编辑

字符全排列
摘要:题目描述:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。解析:递归法:首先看最后两个字符b, c。 它们的全排列为b c和c b, 即以b开头的c的全排列和以c开头的b的全排列。再看三个字符a,b,c。他们的全排列(a,b,c)、(a,c,b)、(b,a,c)、(b,c,a)、(c,a,b)、(c,b,a)从而可以推断,设一组数p = {r1, r2, r3, ... ,rn}, 全排列为perm(p),pn = p - {rn}。因此perm(p) = r1perm(p1), 阅读全文

posted @ 2012-09-20 15:43 as_ 阅读(1126) 评论(0) 推荐(0) 编辑

时间复杂度O(n),空间复杂度O(1)的排序
摘要:题目描述:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)解析:利用计数排序法,设置一大小为65536的int数组,范围a[0]~a[65535],并初始为0,然后遍历n个数,假设这n个数在数组array[0...n-1]中,则i取值从0到n-1同时执行a[array[i]]++,最后再依照顺序读数组a,遇到不为0时,将对应的下标读回数组array,计数是几次就读几次,覆盖原有数,这样得出的array即为排序所求因为空间复杂度大小已知,为65536,执行循环次数约为n+65536 ,所以其空间复杂度为O(n),空间复杂度O(1),代码略 阅读全文

posted @ 2012-09-20 10:09 as_ 阅读(4447) 评论(0) 推荐(0) 编辑

在移位数组中查找数
摘要:题目描述:一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5}是由{6,5,4,3,2,1}左移两位形成的,在这种数组中查找某一个数。解析:很多解法的时间复杂度都停留在O(n),下面的解法 仍为二分查找法 只不过 对应题目做了相应的改进 时间复杂度为O(log2n)1.思路:(画图实际上更直观看出来思路,读者试着自己画出图来对应分析)设数组a[start]~a[end],mid = (start + end) / 2 在进行二叉查找时,待查找数肯定会在变量mid的两侧,其中mid的取值主要有以下几情况,第一种为a[mid] < a[start] 说明此时mid对应的数 阅读全文

posted @ 2012-09-19 16:13 as_ 阅读(930) 评论(0) 推荐(0) 编辑

和为n连续正数序列
摘要:题目描述:输入一个正数n,输出所有和为n连续正数序列。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。分析:来源于互联网 以下仅给出思路解法一:两个for循环解决,复杂度O(n2)解法二:因为整数序列有序,可以设立两个游标satrt,end,通过判区间[start,end]的和是否为n来得到这个序列。如果区间和大于n,start往前移动,如果小于n,end往前移动,等于就输出这个区间。时间复杂度是0(n).解法三:假设start + (start + 1) + ... +end = n 是一个答案,则根据求和公式就是 (start + 阅读全文

posted @ 2012-09-19 13:19 as_ 阅读(1129) 评论(0) 推荐(0) 编辑

C++ STL中的vector的内存分配与释放
摘要:1.vector的内存增长vector其中一个特点:内存空间只会增长,不会减小,援引C++ Primer:为了支持快速的随机访问,vector容器的元素以连续方式存放,每一个元素都紧挨着前一个元素存储。设想一下,当vector添加一个元素时,为了满足连续存放这个特性,都需要重新分配空间、拷贝元素、撤销旧空间,这样性能难以接受。因此STL实现者在对vector进行内存分配时,其实际分配的容量要比当前所需的空间多一些。就是说,vector容器预留了一些额外的存储区,用于存放新添加的元素,这样就不必为每个新元素重新分配整个容器的内存空间。在调用push_back时,每次执行push_back操作,相 阅读全文

posted @ 2012-09-12 15:57 as_ 阅读(90673) 评论(10) 推荐(7) 编辑

Effective C++条款37:绝不重新定义继承而来的缺省参数值
摘要:要点:绝对不要重新定义一个继承而来的缺省参数,因为缺省参数都是静态绑定,而virtual函数――你唯一应该覆写的东西――却是动态绑定。virtual函数是动态绑定的,而缺省参数却是静态绑定,对象的所谓静态类型,是它在程序中被声明时所采用的类型。class Shape { public: enum ShapeColor {Red, Green, Blue}; virtual void draw(ShapeColor color = Red) const = 0; }; class Rectangle : public Shape { public: //赋予不同的缺省参数... 阅读全文

posted @ 2012-09-07 15:26 as_ 阅读(786) 评论(0) 推荐(0) 编辑

C/C++ struct/class/union内存对齐
摘要:struct/class/union内存对齐原则有四个:1).数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节, 则要从4的整数倍地址开始存储),基本类型不包括struct/class/uinon。2).结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部"最宽基本类型成员"的整数倍地址开始存储.(struct a里存有struct b,b 阅读全文

posted @ 2012-09-07 14:15 as_ 阅读(3317) 评论(0) 推荐(1) 编辑

C++之对象切割
摘要:问题描述程序如下:#include <iostream>#include <cstdlib>using namespace std;class Base{ public: virtual void fun() { cout << "Base fun() is Called" << endl; }};class Derived:public Base{ public: void fun() { ... 阅读全文

posted @ 2012-09-07 13:07 as_ 阅读(2399) 评论(0) 推荐(0) 编辑

C语言的数组的地址
摘要:问题描述:有如下程序:#include<stdio.h>int main(void){ int a[5] = {1,2,3,4,5}; int *ptr = (int *)(&a + 1); printf("%d %d\n", *(a + 1), *(ptr-1)); return 0;}输出结果:2 5原因解释:*(a+1) 因为a的地址为数组a第一个元素的地址,所以a+1就是a的第二个元素的地址 输出为2&a的类型是int[5],则&a+1的偏移量为整个数组a的大小 换句话说它也表示了该数组最后一个元素的下一个地址,上面的ptr则是一 阅读全文

posted @ 2012-09-07 12:19 as_ 阅读(563) 评论(0) 推荐(1) 编辑

Effective C++条款20:宁以pass-by-reference-to-const替换pass-by-value
摘要:要点:尽量以pass-by-reference-to-const替换pass-by-value,这通常比较高效,并可避免由子类对象拷贝成基类时的对象切割问题对于内值类型、STL迭代器和函数对象应该采用pass-by-value的形式。缺省情况下c++以by value 的方式传递对象(或来自)函数。函数参数是以实参的副本为初值,用函数获得的也是函数返回值的一个副本 这些副本由对象的copy构造函数产出,这可能使得pass-by-value成为昂贵的操作:class Person { public: Person(); virtual ~Person(); protected: ... 阅读全文

posted @ 2012-09-02 20:15 as_ 阅读(576) 评论(0) 推荐(0) 编辑

Effective C++条款9:绝不在构造和析构函数过程中调用virtual函数
摘要:要点:不该在构造函数和析构函数期间调用virtual函数class Transaction //所有交易的基类 {public: Transaction(); virtual void logTransaction() const = 0;//做出一份因类型不同而不同 //的日志记录 }; Transaction::Transaction() //基类构造函数的实现 { l... 阅读全文

posted @ 2012-09-02 19:21 as_ 阅读(958) 评论(0) 推荐(0) 编辑

Effective C++条款7:为多态基类声明virtual析构函数
摘要:要点:带多态性质的基类或者class中有virtual函数,就应该将析构函数声明为virtual,例如class TimeKeeper{public: TimeKeeper(); ~TimeKeeper();};class AtomicClck : public TimeKeeper //原子钟 { }; class WaterClck : public TimeKeeper //水钟 { }; class WristClck : public TimeKeeper //腕表 { };int main(){ TimeKeeper * ptk = getTi... 阅读全文

posted @ 2012-09-02 15:49 as_ 阅读(316) 评论(0) 推荐(0) 编辑

Effective C++条款4:确认对象钱已经被初始化
摘要:要点:构造函数内赋值和使用初始化列表区别在于1).因为const成员只能被初始化,不能被赋值,所以必须利用构造函数初始化列表进行初始化 eg:class Point { public: Point():_x(0),_y(0){}; Point( int x, int y ):_x(x),_y(y){} //Point(){ _x = 0; _y = 0;} 错误 //Point( int x, int y ){ _x = 0; _y = 0; } 错误private: const int ... 阅读全文

posted @ 2012-09-02 10:41 as_ 阅读(366) 评论(0) 推荐(0) 编辑

导航