《编程珠玑(第2版•修订版)》—第2章2.1节三个问题

简介: 研究算法给实际编程的程序员带来许多好处。算法课教给学生完成重要任务的方法和解决新问题的技术。

本节书摘来自异步社区《编程珠玑(第2版•修订版)》一书中的第2章2.1节三个问题,作者【美】Jon Bentley,更多章节内容可以访问云栖社区“异步社区”公众号查看。

第2章 啊哈!算法
编程珠玑(第2版•修订版)
研究算法给实际编程的程序员带来许多好处。算法课教给学生完成重要任务的方法和解决新问题的技术。在后续的章节中将会看到,先进的算法工具有时候对软件系统影响很大——减少开发时间,同时使执行速度更快。

算法与其他那些深奥的思想一样重要,但在更一般的编程层面上具有更重要的影响。在《啊哈!灵机一动》一书中(本章的标题就借鉴了它),Martin Gardner①描述了深得我心的一个思想:“看起来很困难的问题也可以有一个简单的、意想不到的答案。”与高级的方法不同,算法的啊哈!灵机一动并非只有在大量的研究以后才能出现;任何愿意在编程之前、之中和之后进行认真思考的程序员都有机会捕捉到这灵机一动。

2.1 三个问题
好了,泛泛的话讲得够多啦。本章将围绕三个小问题展开。在继续阅读以前,请先试着解决它们。

A.给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数(在文件中至少缺失一个这样的数——为什么?)。在具有足够内存的情况下,如何解决该问题?如果有几个外部的“临时”文件可用,但是仅有几百字节的内存,又该如何解决该问题?

B.将一个n元一维向量向左旋转②i个位置。例如,当n=8且i=3时,向量abcdefgh旋转为defghabc。简单的代码使用一个n元的中间向量在n步内完成该工作。你能否仅使用数十个额外字节的存储空间,在正比于n的时间内完成向量的旋转?

C.给定一个英语字典,找出其中的所有变位词集合。例如,“pots”、“stop”和“tops”互为变位词,因为每一个单词都可以通过改变其他单词中字母的顺序来得到。

相关文章
|
算法 C语言 索引
算法为何重要(《数据结构与算法图解》by 杰伊•温格罗)(下)
算法为何重要(《数据结构与算法图解》by 杰伊•温格罗)
70 0
|
机器学习/深度学习 算法 量子技术
数据结构为何重要(《数据结构与算法图解》by 杰伊•温格罗)
数据结构为何重要(《数据结构与算法图解》by 杰伊•温格罗)
89 0
|
算法 程序员 安全
《编程珠玑(第2版•修订版)》—第1章1.5节原理
当规范说明的某些因素发生改变时,该程序的特殊结构将很难修改。
1597 0
|
算法 程序员 索引
《编程珠玑(第2版•修订版)》—第2章2.5节原理
排序。排序最显而易见的用处是产生有序的输出,该输出既可以是系统规范要求的一部分,也可以是另一个程序(也许是一个二分搜索程序)的前期准备工作。
1042 0
|
程序员
《编程珠玑(第2版•修订版)》—第1章1.7节深入阅读
程序员的主要问题与其说是技术问题,还不如说是心理问题:他不能解决问题,是因为他企图解决错误的问题。问题的最终解决,是通过打破他的概念壁垒,进而去解决一个较简单的问题而实现的。
1508 0
|
存储 算法
《编程珠玑(第2版•修订版)》—第1章1.3节程序设计
显而易见的方法是以一般的基于磁盘的归并排序程序为起点,但是要对其进行调整,因为我们是对整数进行排序。
1276 0
|
算法
《编程珠玑(第2版•修订版)》—第2章2.4节排序
你总不想成为聚会中唯一一个不知道“deposit”、“dopiest”、“posited”和“topside”是变位词的人吧?如果这些理由还嫌不够,可以看一下习题6描述的现实系统中的一个相似的问题。
1338 0
|
程序员
《编程珠玑(第2版•修订版)》—第1章1.2节准确的问题描述
对程序员来说,这些需求加起来就是:“如何给磁盘文件排序?”在试图解决这个问题之前,先将已知条件组织成一种更客观、更易用的形式。
1264 0