01 2013 档案

摘要:参考July博文:程序员编程艺术:第十章、如何给10^7个数据量的磁盘文件排序,感谢July。 给10^7个无重复的整数排序请看另一篇博文:10^7个无重复的整数排序 对于给10^7个有重复的整数排序,我们不能用位图法来做,位图法只适用于无重复的数字,那么假设我们没有足够的内存去存储这1千万个整数,我们该如何去排序呢?还是分治法,把大化为小。比如:我们可以把这1千万个整数化为10份,用10个文件存储,分别为data1.txt到data10.txt,并且我们的内存足够存储每一份数据,即每一个dataX.txt,这样,我们就可以依次对这10个文件读取进内存,并利用内部排序,如快速排序,对每... 阅读全文
posted @ 2013-01-24 20:37 venow 阅读(914) 评论(0) 推荐(0)
摘要:题目:给10^7个无重复的整数排序,即1到10000000,尽量使空间复杂度小。答:首先,我们利用程序来随机生成这10^7个整数,用一个全局数组存储着10^7个整数,然后根据随机生成的下标交换其中两个整数的位置,以达到我们所说的整数是随机的,具体请看下面的代码:const int N = 10000000;int data[N] = {0};void swap(int &a, int &b){ int temp = a; a = b; b = temp;}void generate_no_repeat_number(void){ FILE *fp = fopen("u 阅读全文
posted @ 2013-01-22 20:19 venow 阅读(2657) 评论(0) 推荐(0)
摘要:前提:本人2011年毕业于一个普通本科,工作不到2年。 15号晚上7点多,正在炒菜做饭,腾讯忽然打电话来问我对他们的Linux C++的职位是否感兴趣,我表达了我感兴趣之后,就开始了一段简短的电话面试,电话面试主要内容:C++和TCP socket通信的一些基础知识。之后就问我一道算法题:10亿个整数,随机生成,可重复,求最大的前1万个。当时我一下子就蒙了,没反应过来,何况我还正在烧着菜呢,所以我就没细想,说了一个连我都鄙视我的思路:我说导入数据库,然后用select语句选出最大的前1万个。可能我的答案连面试官都无语了,所以他就没再往下问了,不过他还是通知我明天16号早上去腾讯大厦笔试,... 阅读全文
posted @ 2013-01-19 22:03 venow 阅读(54940) 评论(22) 推荐(2)
摘要:题目:将一个4字节整数的二进制表示中的001替换为011答:int replace(int num){ unsigned int mode3bit = 7; unsigned int mode1bit = 1; int shift = 0; int result = 0; while (shift < 32) { while (shift < 32 && (num & (mode3bit<<shift)) != (1<<shift)) { result += (num & (mode1bit<<shift))... 阅读全文
posted @ 2013-01-19 22:02 venow 阅读(7271) 评论(3) 推荐(1)