《算法设计与分析》一一导读

简介:

前言

算法是计算的灵魂(spirit of computing),而算法设计与分析的基础知识是计算机科学的基石。算法设计与分析的知识内容很丰富,可以从不同视角进行组织与阐述。一种视角是关注经典的算法问题,如排序、选择、查找、图遍历等;另一种视角是关注经典的算法设计策略,包括分治、贪心、动态规划等。本书的组织兼顾问题与策略两种视角。首先按照经典的算法设计策略,将书中的主体内容分为遍历、分治、贪心、动态规划4个部分。其次在每个部分之内,又围绕经典的算法问题来阐述该部分所着重讨论的策略。
本书集中讨论抽象的即与机器、实现语言无关的算法设计与分析。为此在主体内容之前,我们首先讲解计算模型的基础知识,它是后续抽象讨论算法设计与分析的基础。另外,在本书的最后,我们介绍计算复杂性的基础知识,试图让读者在了解了各类算法问题、学习了各种算法设计和分析技术之后,对算法问题的难度有一个总体性的认识。此外,一些对于算法设计与分析较为关键的数学知识将在附录中列出。本书的内容是作者在过去多年授课的过程中逐渐积淀而成的,所以它不是对算法设计与分析知识的一个百科全书式的覆盖,而是对一些重点内容的更专注的讨论。
本书内容和组织方式的设计针对一个学期的授课展开。在内容方面,本书可以分为前后两个部分。前一部分主要围绕元素的序关系展开,讨论排序、选择、查找这3个经典的算法问题。而这3个问题的求解同时又是分治策略的典型应用。后一部分主要围绕“图”这一数学结构展开,讲授图遍历、最小生成树、最短路径等经典图算法。同时,这些图算法背后的一个核心问题是图上特定结构——最小生成树、最短路径——的优化。围绕图优化,我们展示了贪心策略与动态规划策略的典型应用。
在授课形式方面,我们将课程分为主课与辅课这两种形式。主课主要围绕典型的算法问题、经典的算法展开。而辅课则围绕算法策略来展开,在讲述若干经典问题、经典算法之后,从策略的视角回顾最近阶段的经典算法,同时补充新的素材对相应的策略进行进一步的展示。除知识讲授之外,实践也是“算法设计与分析”课程的重要组成部分。算法设计与分析课程的实践分为两类:一类是传统的习题,即紧扣书本知识的习题,如一些简单定理的证明、紧扣算法细节的一些问题等;另一类是应用题,它需要读者对一个有一定现实意义的问题进行建模,并用书中的算法知识来求解。本书的应用题大都可以用于算法编程实现的训练。在实际授课中,我们挑选了部分应用题作为编程实现题,并基于开源的OnlineJudge平台进行自动评测,取得了良好的效果。
本书的素材主要源自于南京大学计算机系本科生“算法设计与分析”课程的授课内容。其中一部分素材来源于共同授课的其他老师,包括前期负责讲授主课并指导辅课教学的陈道蓄老师,以及后期共同分班讲授这门课程的钱柱中老师。还有一部分素材来自于经典的算法教科书和国外大学授课教师在其课程网站上发布的课程材料。另外,还要感谢“算法设计与分析”课程的两位助教魏恒峰和杨怡玲,他们对大量的课程资料进行了整理与提炼。最后要感谢上过这门课的学生,他们创造性的提问与解题时所犯的错误都为本书提供了宝贵的素材。
教学建议说明:南京大学计算机系“算法设计与分析”课程的讲授采用三种不同形式,即主课、辅课(tutorial)和习题课。

目录

第1章 抽象的算法设计与分析
1.1 RAM模型的引入
1.2 抽象算法设计
1.3 抽象算法分析
第2章 从算法的视角重新审视数学的概念
2.1 数学运算背后的算法操作
2.2 函数的渐近增长率
2.3 “分治递归”求解
2.4 习题
第3章 线性表的遍历
3.1 基于遍历的选择与查找
3.2 基于遍历的排序
3.3 习题

相关文章
|
机器学习/深度学习 监控 Kubernetes
使用 Seldon Alibi 进行模型监控
虽然 Seldon 使在生产中部署和服务模型变得容易,但一旦部署,我们如何知道该模型是否在做正确的事情? 训练期间的良好表现并不一定意味着在生产运行几个月后表现良好。 现实世界中发生的事情是我们无法解释的,例如:输入数据逐渐偏离训练数据,以及异常值和偏差。
|
缓存 网络协议 NoSQL
基于UDP的可靠性传输协议-KCP简介
基于UDP的可靠性传输协议-KCP简介
668 0
|
Linux 网络安全 数据安全/隐私保护
【最新教程】树莓派安装系统及VNC远程桌面连接
【最新教程】树莓派安装系统及VNC远程桌面连接
|
消息中间件 Prometheus 运维
最佳实践|从Producer 到 Consumer,如何有效监控 Kafka
对于运维人而言,如何安装维护一套监控系统,或如何进行技术选型,从来不是工作重点。如何借助工具对所需的应用、组件进行监控,发现并解决问题才是重中之重。随着 Prometheus 逐渐成为云原生时代可观测标准,为了帮助更多运维人用好 Prometheus,阿里云云原生团队将定期更新 Prometheus 最佳实践系列。第一期我们讲解了《最佳实践|Spring Boot 应用如何接入 Prometheus 监控》,今天将为大家带来,消息队列产品 Kafka 的监控最佳实践。
717 0
最佳实践|从Producer 到  Consumer,如何有效监控 Kafka
|
弹性计算
阿里云ecs和域名的购买,绑定,备案教程
本文包含了阿里云ecs和域名的购买,绑定,备案教程,需要在阿里云购买ecs和域名并备案的用户参考,通过此文您可以了解在阿里云购买ecs、域名并如何做备案的大致流程。 一.阿里云ECS的购买流程1.注册阿里云2.登录阿里云进入阿里云系统,选择-产品-云服务器ECS 3.点击立即购买4.选择ECS云服务器所在地域,实例规格,地域,如果您是新手用户不知道如何选择,推荐参考阿里云帮助中心:①.地域和可用区(教您选择地域)。
12089 0
|
移动开发 前端开发 JavaScript
前端实现PDF文件下载的两种方式
前端实现PDF文件下载的两种方式
2914 0
前端实现PDF文件下载的两种方式
|
XML 安全 C++
认证与授权——单点登录协议盘点:OpenID vs OAuth2 vs SAML
无论是Web端还是移动端,现在第三方应用账户登录已经成为了标配,任意打开个网站都可以看到,QQ/微信账号登录的字样。使用第三方账户的登录的过程,既要限制用户身份只让有效注册用户才能登录,还要根据注册用户的不同身份来控制能浏览的内容,这就需要认证和授权 相关文章链接: OAuth2.
2459 0
|
人工智能 移动开发 前端开发
【文末福利】什么是 Adobe Creative Cloud 创意应用软件?
【文末福利】什么是 Adobe Creative Cloud 创意应用软件?
【文末福利】什么是 Adobe Creative Cloud 创意应用软件?
|
算法 Java 调度
基于Android实现的电梯调度模拟
基于Android实现的电梯调度模拟
312 0
基于Android实现的电梯调度模拟