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

2.5 原理
排序。排序最显而易见的用处是产生有序的输出,该输出既可以是系统规范要求的一部分,也可以是另一个程序(也许是一个二分搜索程序)的前期准备工作。但是在变位词问题中,排序并不是关注的焦点。排序是为了将相等的元素(本例中为标识)集中到一起。这些标识产生了另外一个排序应用:将单词内字母排序使得同一个变位词类中的单词具有标准型。通过给每条记录添加一个额外的键,并按照这些键进行排序,排序函数可以用于重新排列磁盘文件中的数据。在第三部分,我们还会多次回顾排序这个主题。

二分搜索。该算法在有序表中查找元素时极为高效,并且可用于内存排序或磁盘排序。唯一的缺陷就是整个表必须已知并且事先排好序。基于该简单算法的思想在许多应用程序中都有应用。

标识。当使用等价关系来定义类时,定义一种标识使得类中的每一项都具有相同的标识,而该类以外的其他项则没有该标识,这是很有用的。对单词中的字母排序可以产生一个用于变位词类的标识。其他标识通过排序给出。然后使用一个计数来代表重复的次数(于是标识“mississippi”可以写成“i4m1p2s4”或将1省略——“i4mp2s4”)。也可以使用一个包含26个整数的数组来标识每个字母出现的次数。标识的其他应用包括:美国联邦调查局用来索引指纹的方法,以及用来识别读音相同但是拼写不同的名字的Soundex启发式方法:

Knuth⑧在其The Art of Computer Programming, Volume 3: Sorting and Sear ching⑨一书的第6章描述了Soundex方法。

问题定义。第1章指出确定用户的真实需求是程序设计的根本。本章的中心思想是问题定义的下一步:使用哪些基本操作来解决问题?在本章的每个例子中,啊哈!灵机一动都定义了一个新的基本操作使得问题得到简化。

问题解决者的观点。优秀程序员都有点懒:他们坐下来并等待灵机一动的出现而不急于使用最开始的想法编程。当然,这必须通过在适当的时候开始写代码来加以平衡。真正的技能就在于对这个适当时候的把握,这只能来源于解决问题和反思答案所获得的经验。

《编程珠玑(第2版•修订版)》—第2章2.5节原理相关推荐

  1. Python核心编程(第3版)第2章网络编程中关于tcp/udp服务器和客户端实现代码的运行出错的修正

    在Python核心编程(第3版)第2章网络编程中, 关于tcp/udp服务器和客户端实现代码的运行会出现 ['str' does not support the buffer interface]之类 ...

  2. qt 5编程入门(第2版)_《C++并发编程实战第2版》第六章:设计基于锁的并发数据结构(1/3)...

    本章主要内容 设计并发数据结构的含义 设计指南 并发数据结构的示例实现 在上一章中我们了解了底层原子操作和内存模型.本章我们先把底层的细节放一放(尽管在第7章我们将需要它们),探讨一下数据结构. 为编 ...

  3. c++高级编程(第4版).pdf_《C++并发编程实战第2版》第四章:同步并发操作(1/4)

    本章主要内容 等待一个事件 用期望等待一次性事件 带时间限制的等待 使用操作的同步来简化代码 上一章中,我们看到各种在线程间保护共享数据的方法.但有时,你不仅需要保护数据,还需要同步不同线程上的操作. ...

  4. java编程思想第四版第十四章 类型信息习题

    fda dfa 第三题u package net.mindview.typeinfo.test4;import java.util.ArrayList; import java.util.Arrays ...

  5. Java编程思想第四版读书笔记——第九章 接口

    这章介绍了适配器设计模式和策略设计模式. 第九章  接口 接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 1.抽象类和抽象方法 public abstract void f(); 创 ...

  6. 【Java编程思想第四版】第4章练习题

    练习1: (1)写一个程序,打印从1到100的值. package com.laputa.chapter4.practice1;public class Count {public static vo ...

  7. 《Ruby程序员修炼之道》(第2版)—第1章1.1节进入Ruby的世界

    本节书摘来自异步社区<Ruby程序员修炼之道>一书中的第1章,第1.1节进入Ruby的世界,作者[美]David A. Black(戴维 A. 布莱克),更多章节内容可以访问云栖社区&qu ...

  8. 《软件测试技术大全:测试基础 流行工具 项目实战(第3版)》—第1章1.2节软件测试的发展...

    本节书摘来自异步社区<软件测试技术大全:测试基础 流行工具 项目实战(第3版)>一书中的第1章,第1.2节软件测试的发展,作者陈能技 , 黄志国,更多章节内容可以访问云栖社区"异 ...

  9. 《Ruby程序员修炼之道》(第2版)—第1章1.2节剖析Ruby的安装

    本节书摘来自异步社区<Ruby程序员修炼之道>一书中的第1章,第1.2节剖析Ruby的安装,作者[美]David A. Black(戴维 A. 布莱克),更多章节内容可以访问云栖社区&qu ...

最新文章

  1. ibatis动态语句中的prepend
  2. CMD各段定义与分配方法指引
  3. 缓存区的输入输出,字符串常用操作,实现strlen/strcpy/strcat/strcmp函数)
  4. orm mysql_PHP基于ORM方式操作MySQL数据库实例
  5. Jdb命令 The Java Debugger
  6. Java开发环境搭建及开发软件和服务器安装与配置
  7. python的zip_python中的zip()函数
  8. win8系统服务器地址怎么查,win8查询服务器地址
  9. SQL Sever 2012学习总结之使用SQL语言创建数据库与表
  10. x61 linux 驱动 无线网卡,联想thinkpadx61无线网卡驱动下载-联想x61无线网卡驱动 win7官方版 - 极光下载站...
  11. C# 监控字段_资产运营专业线升级公告(资源、物业、运维监控)
  12. matlab中欠定方程组超定方程组_大规模线性方程组解法简介
  13. Xcelsius数据源概述
  14. 基于net-snmp的代理端及管理端开发手册
  15. 三分钟了解坚果J10的不足,多方位分析,让你学会挑选投影仪
  16. vue-video播放器
  17. 阿里云生态峰会实录(上)
  18. Java线程状态及转换
  19. 电路模型和电路定律(Ⅲ)
  20. PHP设计模式(2) -创建型模式

热门文章

  1. 1660s功耗多少w_1660显卡要多大电源?GTX1660用多大电源合适
  2. matlab腔内光子寿命,mcFORnp matlab环境下,利用蒙特卡洛模拟光子包在生物组织内的光路传输 271万源代码下载- www.pudn.com...
  3. java怎么播放不了声音,怎么在java application中播放声音
  4. excel可视化图表插件_Axure 教程:利用图表前端插件实现高级可视化图表
  5. python里保存图片_python保存图片报错?
  6. C++中使用new和delete运算符实现二维数组的操作
  7. 在Opendaylight中karaf启动的时候自动安装feature
  8. 软件项目管理0706:工匠精神
  9. 对gitShell的使用
  10. 容灾与备份究竟有什么区别?