编程珠玑笔记1

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
  1. 一个文件里有1千万(10000000)个7位的整数(小于1千万),给大约1M内存让排序

    • 位图(bitmap),长度10000000的bit数组a初始化为0,当数字x出现,a[x]=1,然后依次输出标志位为1的下标号。10000000bit == 1250000byte == 1220K == 1.19M。

    • 如果严格1M做成双通道程序,第一次标记前500万输出,第二次标记后500万输出。

  2. 向量旋转: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次

  3. 某文件包含40亿个随机次序32位整数,其中有一个整数未出现,找出来。限制:内存几百字节,若干顺序文件。

    • 先把最高位为1的写入文件a,最高位为0写入文件b,并分别计数countA,countB.如果最高位为1的整数全部出现,那么countA>countB && countA==2^31,则去文件b中查找,缺失的必定是最高位为0的。同理,区分第二最高位,第三最高位,直到找到
  4. 一个词典有230000个单词,file和life是变位词,找出所有变位词的词集

    • 依次对每个单词进行签名,确保变位词拥有唯一的相同的签名,比如将单词字母排成升序,变位词排序后结果一致。然后按照签名排序,依次输出各个签名的变位词集
  5. 咖啡罐问题:一个成有一些黑色豆子和一些白色豆子的咖啡罐以及一大堆“额外”的黑色豆子,从罐子中随即选取两颗豆子,如果颜色相同,就将他们扔掉并却放入一个黑色的豆子;如果颜色不通,就将白色豆子放回罐子中,而将黑色的豆子扔掉。重复上述过程,直到罐子中只剩一颗豆子为止。证明该过程会终止,最后留下的豆子颜色跟初始状态时白豆和黑豆的数量有何关系?

    • 证明如下:设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白,异色,白色回罐,黑色丢弃。最终是白色。

    结论:白豆偶数,最后一个是黑豆;白豆奇数,最后一个是白

  6. 最大子向量:一个向量,每个元素有正有负,求最大子向量的和

    • 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)
编程珠玑读书笔记(一) 第一章 目的是为了引入位向量数据结构。 转载自 http://www.cnblogs.com/wuyuegb2312/p/3136831.html 位向量的定义和应用:位向量/位图在充分利用小空间存储大数据方面很有优势。Linux内核中很多用到了位向量。 一般地,对于多个对象和一个性质,这些对象可能满足(true)也可能不满足(false)这条性质。那么,为了表示所有对象对这个性质的满足情 阅读详情

相关推荐

编程珠玑读书笔记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 &

qjzl2008的专栏 1116

编程珠玑】第四章:编写正确的程序

编程珠玑第四章问题求解

Code for Yun 1594

阅读《Programming Pearls second Edition》后的一些总结和个人实践的套用

以下内容是我阅读《Programming Pearls second Edition》后的一些总结和个人实践的套用。1、程序员的主要问题不一定是技术上的,更可能是心理上的:因为他正试图解决一个错误的问题,所以他不能取得进步。通过打破概念上的障碍,转而解决一个更简单的问题,这样我们最终解决了问题。2、"问题越一般话,解决起来可能也就越容易",对于编程来说,这就意味着直接解决一个23种情况的问题,要比

作战在奇不在正,带兵在正不在奇 2222

咖啡罐问题

咖啡罐问题

mawu_1014的博客 779

黑豆白豆问题

【题目】 有一个不透明的瓶罐,里面有黑色和白色咖啡豆若干和一堆黑色咖啡豆,每次从瓶罐中拿出咖啡豆,如果咖啡豆染色相同,则扔掉这两个咖啡豆,然后从那一堆黑色咖啡豆中拿一个,放进瓶罐。如果两个咖啡豆颜色不一样,则扔掉黑色咖啡豆,白色咖啡豆再放进瓶罐中。则最后还剩一个咖啡豆,问最后一个咖啡豆的颜色和什么有关系? 答案:我的答案是和瓶罐中白色咖啡豆奇偶性有关,如果是奇数,则是白色,如果...

dieyuqi2955的博客 490

1. 编程珠玑笔记一开篇

1.          编程珠玑笔记一开篇 从事于IT行业,如果不会编程,那蛤蟆只能呵呵了。 有些人将编程认识为敲字,所以一直是码农。有些人将编程认识为COPY,所以一直是搬运工。我们不是工程师,我们只是IT的搬运工~ 其实编程可以不一样,是一个洞察力和创造力的集合。需要我们不停磨练编程技巧和基本的设计原理。  欢迎转载,转载请标明出处: 1、     开篇 是一个外部排序的问题,题目

badman250的专栏 3万+

编程珠玑学习笔记1

编程珠玑学习笔记1 Posted on May 18, 2012 5 最近经历了腾讯和百度的实习生招聘,腾讯的十分顺利,拿到实习生offer,可能运气成分多一点,问我的问题我都有所了解。百度虽然是霸笔的,但是还是的到了面试的机会,但是很不幸,百度二面的时候问了我一道概率题和一道智力题,感觉无从下手,答的很不好,应该是看你这个人的数学修养和思维活跃的程度。 总之,感觉

robertzhouxh的专栏 757

编程珠玑 学习笔记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}. 位图的应用需要数据有如下的特...

dedingjian0525的博客 144

编程珠玑》——读书笔记1

前言 今天来读读《编程珠玑》,预计未来若干个月会有一系列博客记录《编程珠玑》的读书笔记读书笔记 第一章是本书的开篇,主要讲述了如何解决这么两个问题: 一. 如何对实际问题进行抽象,找出问题的独特性质。 很多低级的程序员,一上来就使用普适性的方法来解决问题,而不去认真学习实际问题的性质。具体来说,实际问题的特性包括:输入数据的特征,内存的特征,运行时间的限制,问题本身的特征。 根...

jmhIcoding 737

编程珠玑读书笔记1

“如何给一个磁盘文件排序?” 假设这是一个需求,当我们拿到这个需求的时候,最好不要马上动手写,需要先思考这个需求的目的是什么。 显然,这个需求要求我们在磁盘上对文件进行排序。 最直观的想法是,思考排序相关的知识,比如归并排序,然后看怎么能应用到磁盘上。这个过程中你可能需要查阅一些相关资料,然后研究如何编码。 如果任务紧急的话,你或许会去Github和StackOverflow上看看有没有现成的代码...

weixin_34417183的博客 272

编程珠玑读书笔记 part1

Programming Pearls 第2版 作者 Jon Bentley. 第一部分 基础 -------------------------------------------------------------------------------------------------------- 第1章 开篇 这一章探讨了一个经典的问题,即所谓的磁盘文件排序或“外排序

技术准达人成长日志 710

编程珠玑】学习笔记[1]——位向量

问题描述:某个文件至多包含1千万(10000000)

hairen1988的专栏 750

编程珠玑笔记1 开篇

  为了克服自己看过就忘的毛病,现在决定用文字把这些东西记录下来。以下大部分是对书上内容的总结。 1.开篇第一部分主要是使用位图法进行排序。   问题描述:一个最多包含n个整数的文件,每个数小于m,n=10^7,数据不重复(所以m>=n),且随机出现。对该数据进行排序,最多有1MB的内存空间可用。 2.首先分析问题,对n=10^7个数据,设每个int型为4字节,那么总共需要40...

weixin_30436101的博客 110

编程珠玑读书笔记-第1

编程珠玑,读书总结,心得

DouMiaoO_Oo的博客 291

编程珠玑2》读书笔记1---翻转代码

第二章 ”啊哈,算法“ P11 问题B:将一个n元一维向量向左旋转i个位置(循环移位),例如abcdefgh左循环移位3个位置变成defghabc  要求:使用一个n元的中间向量在n步内完成,能否仅适用数十个额外字节的存储空间,在正比于n的时间内完成? "啊哈,灵机一动": 贴个照片,不侵权吧,呵呵,手我加了指甲,分辨手掌正反面 代码: package org.

On the way 724

编程珠玑学习笔记1):简单磁盘文件数据排序

问题描述: 输入:一个最多包含n个z

xduwangy的专栏 537

<<编程珠玑>>读书笔记 NO. 11章 Qsort1

用了一天时间终于调试成功了 理解算法思路卡了一下,实现时大大的卡了一下,尝试了各种方法,桌上摆道具重复算法过程,用圆珠笔,手机,纸飞机,愤怒小鸟胶皮玩具演习排序过程,   后来Debug跟踪发现 watch 变量中 ++m会导致诡异的效果 后来跟踪入swap函数终于发现,没有考虑到 待交换的两个元素 同一索引,即同一个元素,这是不能用^交换,会导致清0效果!!!!!!     思路不

On the way 471

编程珠玑笔记

编程珠玑笔记 第一章开篇 友好的对话 在别人不会问问题时,引导他去问问题也是一个很大的学问,Jon与一个程序员问的问题而展开。 问题:如何将1千万条记录排序?(都是七位的电话号码)最好是将时间控制在十秒钟左右,如果不行,几分钟也可以,但是不能超过十分钟,同时不可超过一兆的内存。 Jon先生要求我思考一分钟,并给他一个答案。我的答案有两个,一是使用链表的方式,运用插入排序的方法,二是使...

张念磊的博客 589

编程珠玑(续)》学习笔记——第一章 性能监视工具(1

一、例子:计算素数(prime number)     定义:质数,又称素数,指在大于1的自然数中,除了1和此整数自身外,无法被其他自然数整除的数(也可定义为只有1和本身两个因数的数)。(摘自维基百科:质数)     素数判定,或素性测试,是检验一个给定的整数是否为素数的测试。(摘自维基百科:素性测试)确定型算法试除法:尝试从到的整数是否整除。

chensidney‘s blog 3045
上一篇: IO模型浅析
下一篇: Golang 学习摘录(一)
secretx
博客等级 码龄16年 72粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值