《算法导论(原书第3版)》一第一部分 基础知识

简介: 本节书摘来自华章出版社《算法导论(原书第3版)》一 书中的第一部分,作者:(美)Thomas H.Cormen,Charles E.Leiserson,Ronald L.Rivest,Clifford Stein,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

第一部分 基础知识

这一部分将引导读者开始思考算法的设计和分析问题,简单介绍算法的表达方法、将在本书中用到的一些设计策略,以及算法分析中用到的许多基本思想。本书后面的内容都是建立在这些基础知识之上的。

第1章是对算法及其在现代计算系统中地位的一个综述。本章给出了算法的定义和一些算法的例子。此外,本章还说明了算法是一项技术,就像快速的硬件、图形用户界面、面向对象系统和网络一样。

在第2章中,我们给出了书中的第一批算法,它们解决的是对n个数进行排序的问题。这些算法是用一种伪代码形式给出的,这种伪代码尽管不能直接翻译为任何常规的程序设计语言,但是足够清晰地表达了算法的结构,以便任何一位能力比较强的程序员都能用自己选择的语言将算法实现出来。我们分析的排序算法是插入排序,它采用了一种增量式的做法;另外还分析了归并排序,它采用了一种递归技术,称为“分治法”。尽管这两种算法所需的运行时间都随n的值而增长,但增长的速度是不同的。我们在第2章分析了这两种算法的运行时间,并给出了一种有用的表示方法来表达这些运行时间。

第3章给出了这种表示法的准确定义,称为渐近表示。在第3章的一开始,首先定义几种渐近符号,它们主要用于表示算法运行时间的上界和下界。第3章余下的部分主要给出了一些数学表示方法。这一部分的作用更多的是为了确保读者所用的记号能与本书的记号体系相匹配,而不是教授新的数学概念。
3

第4章更深入地讨论了第2章引入的分治法,给出了更多分治法的例子,包括用于两方阵相乘的Strassen方法。第4章包含了求解递归式的方法。递归式用于描述递归算法的运行时间。“主方法”是一种功能很强的技术,通常用于解决分治算法中出现的递归式。虽然第4章中的相当一部分内容都是在证明主方法的正确性,但是如果跳过这一部分证明内容,也没有什么太大的影响。

第5章介绍概率分析和随机化算法。概率分析一般用于确定一些算法的运行时间,在这些算法中,由于同一规模的不同输入可能有着内在的概率分布,因而在这些不同输入之下,算法的运行时间可能有所不同。在有些情况下,我们假定算法的输入服从某种已知的概率分布,于是,算法的运行时间就是在所有可能的输入之下,运行时间的平均值。在其他情况下,概率分布不是来自于输入,而是来自于算法执行过程中所做出的随机选择。如果一个算法的行为不仅由其输入决定,还要由一个随机数生成器生成的值来决定,那么它就是一个随机化算法。我们可以利用随机化算法强行使算法的输入服从某种概率分布,从而确保不会有某一输入会始终导致算法的性能变坏;或者,对于那些允许产生不正确结果的算法,甚至能够将其错误率限制在某个范围之内。

附录A~D包含了一些数学知识,它们对读者阅读本书可能会有所帮助。在阅读本书之前,读者很有可能已经知道了附录中给出的大部分知识(我们采用的某些符号约定与读者过去见过的可能会有所不同),因而可以将附录视为参考材料。另外,你很可能从未见过第一部分中给出的内容。第一部分中的所有各章和附录都是以一种入门指南的风格来编写的。

相关文章
|
6月前
|
SQL 关系型数据库 MySQL
阿里云RDS云数据库全解析:产品功能、收费标准与活动参考
与云服务器ECS一样,关系型数据库RDS也是很多用户上云必买的热门云产品之一,阿里云的云数据库RDS主要包含RDS MySQL、RDS SQL Server、RDS PostgreSQL、RDS MariaDB等几个关系型数据库,并且提供了容灾、备份、恢复、监控、迁移等方面的全套解决方案,帮助您解决数据库运维的烦恼。本文为大家介绍阿里云的云数据库 RDS主要产品及计费方式、收费标准以及活动等相关情况,以供参考。
|
5月前
|
小程序 前端开发 关系型数据库
告别“月月光”:Uni+Php校园系统小程序,给大学生的低成本创业方案,学业赚钱两不误
uni+Php,寓意“大学加技能”,融合技术与校园生活。轻量小程序整合跑腿、团购、打印等服务,助力学生技能变现。PHP低成本架构,快速落地,覆盖代取快递、宿舍团购、失物招领等高频需求,打造校园一站式服务平台,实现多渠道盈利,月入过万可期。
告别“月月光”:Uni+Php校园系统小程序,给大学生的低成本创业方案,学业赚钱两不误
|
9月前
|
人工智能 安全 API
一件数字藏品的全球之旅:Web3.0 API如何实现“链上确权+链下流通”?
Web3.0以区块链为核心,将数据主权归还用户,而API则成为连接分布式节点的“数字纽带”,推动去中心化应用实现跨链、跨平台数据互联。本文探讨Web3.0与API融合如何重塑互联网生态,开启数据价值流通新时代。
638 104
|
存储 物联网 调度
操作系统的心脏:内核深度解析
在数字世界的构建中,操作系统扮演着基石的角色,而其核心—内核,则是这一复杂系统的灵魂。本文将深入探讨操作系统内核的工作原理,揭示它是如何管理硬件资源、运行程序以及提供系统服务的。通过理解内核的结构和功能,我们可以更好地把握计算机系统的运作机制,进而优化和创新我们的技术实践。
|
9月前
|
运维 监控 负载均衡
高效运维实践:常见问题的应对策略与实践经验
本文探讨了运维工作中的五大核心挑战及应对策略,涵盖负载均衡优化、数据库性能提升、系统监控预警、容器化与微服务运维等方面,旨在帮助企业提升系统稳定性与运维效率。
|
8月前
|
存储 Kubernetes 安全
云计算分类与主流产品
云计算已广泛应用于政府、企业和个人生活,主要分为私有云、公有云、混合云和多云。服务模式以IaaS、PaaS、SaaS为主,未来将向S2S模式发展。公有云具备规模大、价格低、灵活性强等特点,而私有云则更注重数据安全和资源控制。混合云结合多种云的优势,提供更灵活的架构。此外,云存储、虚拟桌面、开发测试、电子政务等场景广泛应用,OpenStack、Kubernetes等开源产品也推动了云计算的发展。
1049 0
|
10月前
|
容器
[HarmonyOS NEXT 实战案例十八] 日历日程视图网格布局(上)
日历是许多应用程序中常见的UI组件,用于展示日期和相关事件。在本教程中,我们将学习如何使用HarmonyOS NEXT的GridRow和GridCol组件实现一个简洁、美观的日历日程视图网格布局。
314 2
|
存储 算法 安全
虚拟内存
【10月更文挑战第25天】虚拟内存是计算机系统中一项非常重要的技术,它通过扩展内存空间、提供内存保护和支持多任务处理等功能,提高了计算机系统的性能和可用性。虽然虚拟内存存在一些缺点,但通过合理的优化和管理,可以有效地发挥其优势,为计算机系统的稳定运行提供有力保障。
834 144
|
JavaScript 前端开发 Java
课时12:编译型语言和解释型语言
今天为大家简单介绍计算机高级语言,如C、C++、JAVA、JavaScript、Python等,指出任何语言被计算机执行前都需转换为机器码。根据转换时机不同,高级语言分为编译型语言和解释型语言,今天的内容主要分为以下三个部分。 1.编译语言 2.解释型语言 3.两者的优缺点
518 1
|
机器学习/深度学习 人工智能 物联网
.NET 技术:引领未来开发潮流
.NET 技术以其跨平台兼容性、高效的开发体验、强大的性能表现和安全可靠的架构,成为引领未来开发潮流的重要力量。本文深入探讨了 .NET 的核心优势与特点,及其在企业级应用、移动开发、云计算、人工智能等领域的广泛应用,展示了其卓越的应用价值和未来发展前景。
290 5

热门文章

最新文章

下一篇
开通oss服务