看起来很困难的问题也可以有一个简单的、意想不到的答案
##二分搜索
在程序设计中,二分搜索最常见的应用是在有序数组中搜索元素。顺序搜索在搜索一个具有n个元素表时,平均需要n/2次比较,而二分搜索仅仅进行不超过log2nlog_2nlog2​n次比较就可以完成。
###问题A
分析问题A,最多40亿个数据:暗示了至少缺一个整数;仅有几百个字节暗示了不能使用第一章介绍的位图算法(当然你使用n趟算法也不是很合理,因为需要几十万趟…)。
解决该问题需要明确的点:为了使用二分搜索技术,我们就必须:

  • 定义一个范围:包含至少一个缺失元素的一系列整数
  • 在该范围内表现元素的方式:文件
  • 确定哪一半范围存在缺失整数的探测方法:统计中间点之上和之下的元素来探测范围
    二分搜索应用广泛:求根程序使用二分搜索技术;树数据结构;程序调试
    ##旋转操作
    ###问题B
    该问题的旋转操作对应于交换相邻的不同大小的内存块。该问题有以下几种解决方案:
  • solution1:将x的前i个元素复制到临时数组里,这种方法产生了过大的存储空间的消耗。
  • solution2:定义一个函数将x向左旋转一个位置(满足时间正比于n)然后调用函数i次,这种方法产生了过多的运行时间消耗。

但是要想在有限的资源里面解决该问题,显然需要更复杂的程序。有以下几个思路:

  • solution1:移动x[0]到临时变量t,然后移动x[i]到x[0],x[2i]到x[i],依此类推,直至返回到取x[0]中的元素,此时改为从t取值然后终止。然后从x[1]继续重复上述步骤,知道x[i-1]。
  • solution2:将旋转向量x分为两个向量ab,需要的是得到ba。假设a比b短,将b分为blb_lbl​和brb_rbr​,使得brb_rbr​与a具有相同长度。交换a和brb_rbr​,得到brblab_rb_labr​bl​a。再交换brblb_rb_lbr​bl​,所以采用迭代的思想,迭代的结束条件是brb_rbr​或blb_lbl​任意一个长度为0。
  • solution3:假定我们拥有一个函数可以将数组特定部分的元素求逆。从ab开始,首先对a求逆得到arba^rbarb,然后对b求逆得到arbra^rb^rarbr。最后整体求逆,得到(arbr)r(a^rb^r)^r(arbr)r
    ##排序
    ###问题C
    这个判断单词是否是变位词,比较普遍。而且解决这个问题的许多方法都出奇地低效和复杂。我们分析问题,发现,要解决这个问题,可以先使得相同变位词有相同的标识。然后再集中具有相同标识的单词。要解决第一个问题可以将单词中的字母排序作为标识。要解决第二个问题,就是将所有的单词按照其标识的顺序排序。
    ##习题
    没有难以理解的

编程珠玑 啊哈 算法相关推荐

  1. 最大字段和各种不同算法实现(参考编程珠玑)

    求最大字段和的算法很好的讲解了算法设计技术.根据<编程珠玑>上的描述,简单实现各种不同的算法.如下: 1.最简单的方法:对所有满足0≤i≤j<n的(i,j)整数进行迭代.对每个整数对 ...

  2. 编程珠玑微信公众号-算法位运算

    [算法技巧]位运算装逼指南 编程珠玑 1周前 以下文章来源于帅地玩编程 ,作者帅地 帅地玩编程 本号专注于讲解数据结构与算法.计算机基础(如计算机网络+操作系统+数据库+Linux)等编程知识,期待你 ...

  3. 编程珠玑第12章习题

    内容来自互联网,做了一些修改 参考: http://blog.csdn.net/tianshuai1111/article/details/7583297 http://blog.csdn.net/t ...

  4. 编程珠玑第二章习题答案

    转载自互联网,并做了修改 1.提供单词和词典,找到该单词的所有变位词,可以事先花时间和空间处理下该词典. 为了找出给定单词的所有变位词,首先是计算给定单词的标识.如果不允许预处理,只能够顺序读取文件, ...

  5. 《编程珠玑》 读书笔记

    <编程珠玑> 读书笔记 娄雨禛 PB16060356 准确的问题描述 很多时候,我们总是过度关注了解决问题所用的巧妙算法,而将问题本身的重要性忽视.当我们拿到一个问题时,应当反复研读问题的 ...

  6. 《编程珠玑(第2版•修订版)》—第2章2.5节原理

    本节书摘来自异步社区<编程珠玑(第2版•修订版)>一书中的第2章2.5节原理,作者[美]Jon Bentley,更多章节内容可以访问云栖社区"异步社区"公众号查看. 2 ...

  7. 查找一段文字中最长的重复字串 – 编程珠玑(排过序的后缀数组的应用)

    转自:https://www.cse.msu.edu/~liyang5/?p=53 <编程珠玑>在第15章"珍珠字符串"一节,给出了一个非常漂亮的实现 – 基于目标字符 ...

  8. 编程珠玑读书笔记之磁盘文件排序

    输入: 所输入的是一个文件,至多包含n个正整数,每个正整数都要小于n,这是 n = 10^7.如果输入时某个整数出现了两次,就会产生一个致命的错误.这些整数与其他任何数据都不关联. 输出: 以增序形式 ...

  9. 《编程珠玑(第2版•修订版)》—第2章2.2节无处不在的二分搜索

    本节书摘来自异步社区<编程珠玑(第2版•修订版)>一书中的第2章2.2节无处不在的二分搜索,作者[美]Jon Bentley,更多章节内容可以访问云栖社区"异步社区"公 ...

  10. 《编程珠玑(续)(修订版)》—第2章2.1节Awk中的关联数组

    本节书摘来自异步社区<编程珠玑(续)(修订版)>一书中的第2章,第2.1节Awk中的关联数组,作者[美]Jon Bentley,更多章节内容可以访问云栖社区"异步社区" ...

最新文章

  1. 【Storm】storm安装、配置、使用以及Storm单词计数程序的实例分析
  2. 费氏搜寻法之算法分析与实现
  3. GNN笔记:傅里叶变换
  4. 新一代爬虫利器 —— Playwright
  5. 腾讯开源再获OSCAR 5项大奖,全国首家可信开源治理认证自发开源企业
  6. python pandas csv读取_如何用 pandas 读取 csv 和 Excel 数据
  7. [USACO07NOV]牛继电器Cow Relays
  8. 怎样去理解@ComponentScan注解
  9. 雨滴桌面时间插件_电脑桌面美化,我只服这10个骚操作!
  10. 图嵌入综述 (arxiv 1709.07604) 译文第一、二章
  11. java迭代是引用_在迭代递归结构时无法获得可变引用:不能一次多次借用可变引用...
  12. win10的文件夹(文件资源管理器)卡住了
  13. windows 安装 telnet 工具
  14. 携程旅行app数据采集
  15. 【2】CH347应用--在OpenOCD添加CH347-USB转JTAG接口
  16. Spark RDD API详解
  17. linux 快速启动应用程序(alias使用)
  18. 朴素贝叶斯算法原理、代码实现原理、以及鸢尾花分类代码实现(详细代码原理讲解)
  19. 为GOOGLE 搜索栏添加google.cn
  20. 幸福就是把爱留给爱你的人

热门文章

  1. QT的Q3DScatter使用(三维可视图)
  2. solaris系统的crontab定时任务
  3. 微信红包系统设计方案
  4. 数据结构与算法:二路归并排序(合并排序)
  5. Trucksim车辆动力学模型
  6. 强化学习之Q-Learning(附代码)
  7. 北斗高精度卫星接收机的分类
  8. Visual Studio 2017各版本安装包离线下载、安装全解析
  9. 卓凡信息技术考试系统服务器,卓凡信息技术考试系统
  10. 全球最强免费电子书下载网址