-
一个文件里有1千万(10000000)个7位的整数(小于1千万),给大约1M内存让排序
-
位图(bitmap),长度10000000的bit数组a初始化为0,当数字x出现,a[x]=1,然后依次输出标志位为1的下标号。10000000bit == 1250000byte == 1220K == 1.19M。
-
如果严格1M做成双通道程序,第一次标记前500万输出,第二次标记后500万输出。
-
-
向量旋转:abcdefgh(长度n为8),向左旋转i=3次
-
3次反转法
i = i % n #n次还原 reverse(0, i-1) #cbadefgh reverse(i, n-1) #cbahgfed reverse(0, n-1) #defghabc
-
如果向右旋转:先取模,ii=i%n,向右旋转ii次,等于向左旋转n-ii次
-
-
某文件包含40亿个随机次序32位整数,其中有一个整数未出现,找出来。限制:内存几百字节,若干顺序文件。
- 先把最高位为1的写入文件a,最高位为0写入文件b,并分别计数countA,countB.如果最高位为1的整数全部出现,那么countA>countB && countA==2^31,则去文件b中查找,缺失的必定是最高位为0的。同理,区分第二最高位,第三最高位,直到找到
-
一个词典有230000个单词,file和life是变位词,找出所有变位词的词集
- 依次对每个单词进行签名,确保变位词拥有唯一的相同的签名,比如将单词字母排成升序,变位词排序后结果一致。然后按照签名排序,依次输出各个签名的变位词集
-
咖啡罐问题:一个成有一些黑色豆子和一些白色豆子的咖啡罐以及一大堆“额外”的黑色豆子,从罐子中随即选取两颗豆子,如果颜色相同,就将他们扔掉并却放入一个黑色的豆子;如果颜色不通,就将白色豆子放回罐子中,而将黑色的豆子扔掉。重复上述过程,直到罐子中只剩一颗豆子为止。证明该过程会终止,最后留下的豆子颜色跟初始状态时白豆和黑豆的数量有何关系?
- 证明如下:设B个黑豆,W个白豆,总数S=B+W,取2个豆子
if bb:#两黑豆 B=B-1; W=W; S=B-1+W elif ww: #两白色 B=B+1; W=W-2; S=B+1+W-2 else: #bw异色 B=B-1; W=W;; S=B-1+w每次豆子总数都会减少1,所以过程必定终止。
由于bw与bb相同,可以认为只有bb, ww两种情况。每次同色bb,ww,都会加入黑色,所以在白豆数量减少至1个或0个(0还是1取决于白豆奇数偶数)之前,黑豆不可能取完。所以我们简化为:直接先成对取白豆
当白豆W=2n(偶数)时,先取完所有白豆,剩下的就是黑豆B=B+n,其实此刻黑豆数量没关系,全是黑豆,白豆没有加入途径,最后一轮必定黑豆
当白豆W=2n+1(奇数)时,先成对取白豆至剩余1个白豆,黑豆B=B+n,在成对取出黑豆(记得回想上面的论证,可以认为只有bb,ww两类),最终必定剩余1黑1白(可以反证:剩余2黑1白,2黑成对取出,又加入1黑,得到1黑1白)。1黑1白,异色,白色回罐,黑色丢弃。最终是白色。
结论:白豆偶数,最后一个是黑豆;白豆奇数,最后一个是白
- 证明如下:设B个黑豆,W个白豆,总数S=B+W,取2个豆子
-
最大子向量:一个向量,每个元素有正有负,求最大子向量的和
-
x = (31, -41, 59, 26, -53, 58, 97, -93, -23, 84) max_so_far = 0 #全局当前最大和 max_ending_here = 0 #从下标0直到当前下标i最大和 for i in x: max_ending_here = max(max_ending_here+i, 0)#至少不为负 max_so_far = max(max_so_far, max_ending_here)
-
相关推荐
《编程珠玑》读书笔记1----------------如何使用位逻辑来实现位向量
1.如何使用位逻辑来实现位向量 #define BITSPERWORD 32 //int型为32位 #define SHIFT 5 #define MASK 0x1F //模数 #define N 10000000 //假定大小 int a[1 + N/BITSPERWORD]; void set(int i) { a[i>>SHIFT] |= (1<<(i &
【编程珠玑】第四章:编写正确的程序
编程珠玑第四章问题求解
阅读《Programming Pearls second Edition》后的一些总结和个人实践的套用
以下内容是我阅读《Programming Pearls second Edition》后的一些总结和个人实践的套用。1、程序员的主要问题不一定是技术上的,更可能是心理上的:因为他正试图解决一个错误的问题,所以他不能取得进步。通过打破概念上的障碍,转而解决一个更简单的问题,这样我们最终解决了问题。2、"问题越一般话,解决起来可能也就越容易",对于编程来说,这就意味着直接解决一个23种情况的问题,要比
咖啡罐问题
咖啡罐问题
黑豆白豆问题
【题目】 有一个不透明的瓶罐,里面有黑色和白色咖啡豆若干和一堆黑色咖啡豆,每次从瓶罐中拿出咖啡豆,如果咖啡豆染色相同,则扔掉这两个咖啡豆,然后从那一堆黑色咖啡豆中拿一个,放进瓶罐。如果两个咖啡豆颜色不一样,则扔掉黑色咖啡豆,白色咖啡豆再放进瓶罐中。则最后还剩一个咖啡豆,问最后一个咖啡豆的颜色和什么有关系? 答案:我的答案是和瓶罐中白色咖啡豆奇偶性有关,如果是奇数,则是白色,如果...
1. 编程珠玑笔记一开篇
1. 编程珠玑笔记一开篇 从事于IT行业,如果不会编程,那蛤蟆只能呵呵了。 有些人将编程认识为敲字,所以一直是码农。有些人将编程认识为COPY,所以一直是搬运工。我们不是工程师,我们只是IT的搬运工~ 其实编程可以不一样,是一个洞察力和创造力的集合。需要我们不停磨练编程技巧和基本的设计原理。 欢迎转载,转载请标明出处: 1、 开篇 是一个外部排序的问题,题目
编程珠玑学习笔记1
编程珠玑学习笔记1 Posted on May 18, 2012 5 最近经历了腾讯和百度的实习生招聘,腾讯的十分顺利,拿到实习生offer,可能运气成分多一点,问我的问题我都有所了解。百度虽然是霸笔的,但是还是的到了面试的机会,但是很不幸,百度二面的时候问了我一道概率题和一道智力题,感觉无从下手,答的很不好,应该是看你这个人的数学修养和思维活跃的程度。 总之,感觉
编程珠玑 学习笔记1.1
刚开始看《编程珠玑》,将网上的诸多资料整理于此,便于自己学习总结,也便于广大朋友相互交流。 位图的应用 编程珠玑 Chapter1 位图或位向量图作为一个集合,表示的这样的一个数据结构: 用字符串 0 1 1 1 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 表示集合 {1,2,3,5,8,13}. 位图的应用需要数据有如下的特...
《编程珠玑》——读书笔记1
前言 今天来读读《编程珠玑》,预计未来若干个月会有一系列博客记录《编程珠玑》的读书笔记。 读书笔记 第一章是本书的开篇,主要讲述了如何解决这么两个问题: 一. 如何对实际问题进行抽象,找出问题的独特性质。 很多低级的程序员,一上来就使用普适性的方法来解决问题,而不去认真学习实际问题的性质。具体来说,实际问题的特性包括:输入数据的特征,内存的特征,运行时间的限制,问题本身的特征。 根...
《编程珠玑》读书笔记(1)
“如何给一个磁盘文件排序?” 假设这是一个需求,当我们拿到这个需求的时候,最好不要马上动手写,需要先思考这个需求的目的是什么。 显然,这个需求要求我们在磁盘上对文件进行排序。 最直观的想法是,思考排序相关的知识,比如归并排序,然后看怎么能应用到磁盘上。这个过程中你可能需要查阅一些相关资料,然后研究如何编码。 如果任务紧急的话,你或许会去Github和StackOverflow上看看有没有现成的代码...
《编程珠玑》读书笔记 part1
Programming Pearls 第2版 作者 Jon Bentley. 第一部分 基础 -------------------------------------------------------------------------------------------------------- 第1章 开篇 这一章探讨了一个经典的问题,即所谓的磁盘文件排序或“外排序
【编程珠玑】学习笔记[1]——位向量
问题描述:某个文件至多包含1千万(10000000)
《编程珠玑》笔记1 开篇
为了克服自己看过就忘的毛病,现在决定用文字把这些东西记录下来。以下大部分是对书上内容的总结。 1.开篇第一部分主要是使用位图法进行排序。 问题描述:一个最多包含n个整数的文件,每个数小于m,n=10^7,数据不重复(所以m>=n),且随机出现。对该数据进行排序,最多有1MB的内存空间可用。 2.首先分析问题,对n=10^7个数据,设每个int型为4字节,那么总共需要40...
编程珠玑读书笔记-第1章
编程珠玑,读书总结,心得
《编程珠玑2》读书笔记1---翻转代码
第二章 ”啊哈,算法“ P11 问题B:将一个n元一维向量向左旋转i个位置(循环移位),例如abcdefgh左循环移位3个位置变成defghabc 要求:使用一个n元的中间向量在n步内完成,能否仅适用数十个额外字节的存储空间,在正比于n的时间内完成? "啊哈,灵机一动": 贴个照片,不侵权吧,呵呵,手我加了指甲,分辨手掌正反面 代码: package org.
编程珠玑学习笔记(1):简单磁盘文件数据排序
问题描述: 输入:一个最多包含n个z
<<编程珠玑>>读书笔记 NO. 11章 Qsort1
用了一天时间终于调试成功了 理解算法思路卡了一下,实现时大大的卡了一下,尝试了各种方法,桌上摆道具重复算法过程,用圆珠笔,手机,纸飞机,愤怒小鸟胶皮玩具演习排序过程, 后来Debug跟踪发现 watch 变量中 ++m会导致诡异的效果 后来跟踪入swap函数终于发现,没有考虑到 待交换的两个元素 同一索引,即同一个元素,这是不能用^交换,会导致清0效果!!!!!! 思路不
《编程珠玑》笔记一
编程珠玑笔记 第一章开篇 友好的对话 在别人不会问问题时,引导他去问问题也是一个很大的学问,Jon与一个程序员问的问题而展开。 问题:如何将1千万条记录排序?(都是七位的电话号码)最好是将时间控制在十秒钟左右,如果不行,几分钟也可以,但是不能超过十分钟,同时不可超过一兆的内存。 Jon先生要求我思考一分钟,并给他一个答案。我的答案有两个,一是使用链表的方式,运用插入排序的方法,二是使...
《编程珠玑(续)》学习笔记——第一章 性能监视工具(1)
一、例子:计算素数(prime number) 定义:质数,又称素数,指在大于1的自然数中,除了1和此整数自身外,无法被其他自然数整除的数(也可定义为只有1和本身两个因数的数)。(摘自维基百科:质数) 素数判定,或素性测试,是检验一个给定的整数是否为素数的测试。(摘自维基百科:素性测试)确定型算法试除法:尝试从到的整数是否整除。
1116




被折叠的 条评论
为什么被折叠?



