算法导论之排序网络

排序网络算法是基于比较网络模型,可以同时执行多个比较操作,和串行计算(随机存取计算机RAM)机制不一样。首先要介绍下比较网络。比较网络由线路和比较器构成。一条线路把一个值从一处传输到另一处,把比较器的输入端和输出端相连。
假定比较网络含n条输入线a1,a2,…,an,以及n条输出线b1,b2,…,bn,需要排序的值通过输入线进入网络,由网络计算出的结果通过输出线输出。算法导论中给出的案例很清晰地表达了比较网络的概念和特点,由线路互联的一组比较器组成。关注两个特点:
第一:只有当同时有两个输入时,比较器才能产生输出值。简单理解,比较器之比较在于有两个值的比较,一个值输入不构成比较意义;
第二:一个比较网络的深度是它的输出线路的最大深度,就是比较器的深度;比较器的深度由最深的线路来决定,如果一个比较器有两条深度分别为dx和dy的输入线路,则其输出线路深度为max(dx,dy)+1;第一个特点也决定了比较器的深度,因为只有输入两个值才算一个深度的开始。
综上,定义排序网络为:对每个输入序列,其输出序列均为单调递增(即b1≤b2≤…≤bn)的一种比较网络。输入n个值(n条线路)经过比较器(深度不同)的比较最后输出n个值正排序。比较器其实就是简单的min和max两个值选择。
1)0-1原理
0-1原理推定认为:如果对于属于集合{0,1}的每个输入值,排序网络都能正确运行,则对任意输入值,它也能争取而运行(输入值可以是整数、实数或者任意线性排序的值的集合)。这样在构造排序网络时,可以专注在0和1组成的输入序列上设计比较器。这个原理目的是简化输入值,而通过0和1来设计比较网络的线路和比较器,只要0和1可运行,那么其他任意值的序列也都可以运行。
0-1原理的证明依赖单调递增函数。如果比较网络把输入序列a=<a1,a2,…,an>转化为输出序列b=<b1,b2,…,bn>,则对任意单调递增函数f,该网络把输入序列f(a)=<f(a1),f(a2),…,f(an)>转化为输出序列f(b)=<f(b1),f(b2),…,f(bn)>。
这个可以这样理解,就是对输入序列a施以f(a)单调递增函数,比较网络(线路和比较器)能够使序列a输出序列b,那么该比较网络同样可以使输入序列f(a)输出序列f(b)。
这就为0-1原理奠定了基础,只要证明比较网络可以运行于0和1的输入,那么设计一个单调递增函数,0和1是因变量,其自变量自然也可以通过同样比较网络来排序。
如果一个具有n个输入的比较网络能够对所有可能存在的2n个0和1组成的序列进行正确的排序,则对所有任意数组成的序列,该比较网络也可能对其正确排序。
0-1原理证明用到了单调递增函数概念,同时采用数学归纳法和反证法来证明。这也给出了一个很重要的思想,那就是对现实问题的解决,在构建数学模型时,可以简单到0-1,然后再推广到复杂数。
2)双调排序网络
基于0-1原理构造有效的排序网络,首先是构造能对任意双调序列进行排序的比较网络,再合并网络。
那么什么是双调序列呢?双调序列是指序列要么单调递增后再单调递减,或者循环移动成为先单调递增后再单调递减。考虑边界情况,任何1个或2个的数构成的序列都是双调的,双调0-1序列的结构是0i1k0j或1i0k1j,其中i、j、k≥0,自然单调递增或单调递减的序列也是单调的。
怎么理解双调序列呢?比喻为山峦起伏,一山比一山高再一山比一山低,中间是单调性的。基于0-1原理,只要我们所构造的双调排序程序能对0和1的双调序列进行排序的比较网络,这个比较网络也适用于任何数值。
双调排序通过迭代半清洁器来实现。半清洁器就是深度为1的比较网络,输入双调序列,进行深度1次的比较器,输出双调序列,而“半”的意思是指比较器的两个输入值是由输入线i和输入线i+n/2进行比较。双调序列经过半清洁器输出的双调序列结果是:较小的值位于输出的上半部,较大的值位于输出的下半部,并且两部分的序列仍然是双调的。为此得出如下结论:
如果半清洁器的输入是一个由0和1组成的双调序列,则其输出满足如下性质,输出的上半部分与下半部分都是双调的,上半部分输出的每一个元素至少与下半部分输出的每个元素一样小,并且两部分中至少有一个部分是清洁的。
输入双调序列,然后递归连接半清洁器,就可以建立一个双调排序器,实现对双调序列排序的比较网络。
3)合并网络
合并网络,能够把两个已排序的输入序列合并为一个有序的输出序列的网络。基于双调排序网络思想,对已知的两个有序序列进行连接(第二个序列顺序颠倒),所得的序列是双调序列,再利用双调排序器就能完成两个有序序列的合并。
4)排序网络
基于0-1原理、双调排序网络、合并网络,我们可以构造一个输入任意序列进行排序的比较排序网络。思想很简单:第一步开展最基础的2个元素的两两比较,这个用普通的比较器就可以实现,输出长度为2的有序序列;第二步对长度为2的有序序列进行两两合并,这个用合并网络排序(基于双调排序器,先连接序列构造双调序列)实现,输出长度为4的有序序列;第三步对长度为4的有序序列进行合并网络,直到lgn次。算法上,可以在O(lg2n)内并行地对n个数进行排序。
排序网络可以并行地进行排序,然后再组合各并行排序结果,适合分布式场景的排序需求。
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一部分(Part I) 基础(Foundations) 第一章 计算中算法的角色(The Role of Algorithms in Computing) 第二章 开始(Getting Started) 第三章 函数的增长率(Growth of Functions) 第四章 递归(Recurrences) 第五章 概率分析与随机化算法(Probabilistic Analysis and Randomized Algorithms) 第二部分(Part II) 排序与顺序统计(Sorting and Order Statistics) 第六章 堆排序(Heapsort) 第七章快速排序(Quicksort) 第八章 线性时间中的排序(Sorting in Linear Time) 第九章 中值与顺序统计(Medians and Order Statistics) 第三部分(Part III) 数据结构(Data Structures) 第十章 基本的数据结构(Elementary Data Structures) 第十一章 散列表(Hash Tables) 第十二章 二叉查找树(Binary Search Trees) 第十三章 红-黑树(Red-Black Trees) 第十四章 扩充的数据结构(Augmenting Data Structures) 第四部分(Part IV) 高级的设计与分析技术(Advanced Design and Analysis Techniques) 第十五章 动态规划(Dynamic Programming) 第十六章 贪婪算法(Greedy Algorithms) 第十七章 分摊分析(Amortized Analysis) 第五部分(Part V) 高级的数据结构(Advanced Data Structures) 第十八章 B-树(B-Trees) 第十九章 二项式堆(Binomial Heaps) 第二十章 斐波纳契堆(Fibonacci Heaps) 第二十一章 不相交集的数据结构(Data Structures for Disjoint Sets) 第六部分(Part VI) 图算法(Graph Algorithms) 第二十二章 基本的图算法(Elementary Graph Algorithms) 第二十三章 最小生成树(Minimum Spanning Trees) 第二十四章单源最短路径(Single-Source Shortest Paths) 第二十五章 全对的最短路径(All-Pairs Shortest Paths) 第二十六章 最大流(Maximum Flow) 第七部分(Part VII) 精选的主题(Selected Topics) 第二十七章 排序网络(Sorting Networks) 第二十八章矩阵运算(Matrix Operations) 第二十九章 线性规划(Linear Programming) 第三十章 多项式与快速傅里叶变换(Polynomials and the FFT) 第三十一章 数论算法(Number-Theoretic Algorithms) 第三十二章 字符串匹配(String Matching) 第三十三章 计算几何学(Computational Geometry) 第三十四章 NP-完备性(NP-Completeness) 第三十五章 近似算法(Approximation Algorithms) 第八部分(Part VIII) 附录:数学背景(Mathematical Background) 索引(Index)
算法导论第三版中文版 pdf高清版 在有关算法的书中,有一些叙述非常严谨,但不够全面;另一些涉及了大量的题材,但又缺乏严谨性。算法导论第三版中文版将严谨性和全面性融为一体,深入讨论各类算法,并着力使这些算法的设计和分析能为各个层次的读者接受。全书各章自成体系,可以作为独立的学习单元;算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。全书选材经典、内容丰富、结构合理、逻辑清晰,对本科生的数据结构课程和研究生的算法课程都是非常实用的教材,在IT专业人员的职业生涯中,算法导论第三版也是一本案头必备的参考书或工程实践手册。 第3版的主要变化 1、新增了van Emde Boas树和多线程算法,并且将矩阵基础移至附录。 2、修订了递归式(现在称为“分治策略”)那一章的内容,更广泛地覆盖分治法。 3、移除两章很少讲授的内容:二项堆和排序网络。 4、修订了动态规划和贪心算法相关内容。 5、流网络相关材料现在基于边上的全部流。 6、由于关于矩阵基础和Strassen算法的材料移到了其他章,矩阵运算这一章的内容所占篇幅更小。 7、修改了对Knuth-Morris-Pratt字符串匹配算法的讨论。 8、新增100道练习和28道思考题,还更新并补充了参考文献。
在有关算法的书中,有一些叙述非常严谨,但不够全面;另一些涉及了大量的题材,但又缺乏严谨性。本书将严谨性和全面性融为一体,深入讨论各类算法,并着力使这些算法的设计和分析能为各个层次的读者接受。全书各章自成体系,可以作为独立的学习单元;算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。 --------------------------------------------------------------- 目录 Introduction to Algorithms, Third Edition 出版者的话 译者序 前言 第一部分 基础知识 第1章 算法在计算中的作用  1.1 算法  1.2 作为一种技术的算法  思考题  本章注记 第2章 算法基础  2.1 插入排序  2.2 分析算法  2.3 设计算法   2.3.1 分治法   2.3.2 分析分治算法  思考题  本章注记 第3章 函数的增长  3.1 渐近记号  3.2 标准记号与常用函数  思考题  本章注记 第4章 分治策略  4.1 最大子数组问题  4.2 矩阵乘法的Strassen算法  4.3 用代入法求解递归式  4.4 用递归树方法求解递归式  4.5 用主方法求解递归式  4.6 证明主定理   4.6.1 对b的幂证明主定理   4.6.2 向下取整和向上取整  思考题  本章注记 第5章 概率分析和随机算法  5.1 雇用问题  5.2 指示器随机变量  5.3 随机算法  ?5.4 概率分析和指示器随机变量的进一步使用   5.4.1 生日悖论   5.4.2 球与箱子   5.4.3 特征序列   5.4.4 在线雇用问题  思考题  本章注记 第二部分 排序和顺序统计量 第6章 堆排序  6.1 堆  6.2 维护堆的性质  6.3 建堆  6.4 堆排序算法  6.5 优先队列  思考题  本章注记 第7章 快速排序  7.1 快速排序的描述  7.2 快速排序的性能  7.3 快速排序的随机化版本  7.4 快速排序分析   7.4.1 最坏情况分析   7.4.2 期望运行时间  思考题  本章注记 第8章 线性时间排序  8.1 排序算法的下界  8.2 计数排序  8.3 基数排序  8.4 桶排序  思考题  本章注记 第9章 中位数和顺序统计量  9.1 最小值和最大值  9.2 期望为线性时间的选择算法  9.3 最坏情况为线性时间的选择算法  思考题  本章注记 第三部分 数据结构 第10章 基本数据结构  10.1 栈和队列  10.2 链表  10.3 指针和对象的实现  10.4 有根树的表示  思考题  本章注记 第11章 散列表  11.1 直接寻址表  11.2 散列表  11.3 散列函数   11.3.1 除法散列法   11.3.2 乘法散列法   11.3.3 全域散列法  11.4 开放寻址法  11.5 完全散列  思考题  本章注记 第12章 二叉搜索树  12.1 什么是二叉搜索树  12.2 查询二叉搜索树  12.3 插入和删除  12.4 随机构建二叉搜索树  思考题  本章注记 第13章 红黑树  13.1 红黑树的性质  13.2 旋转  13.3 插入  13.4 删除  思考题  本章注记 第14章 数据结构的扩张  14.1 动态顺序统计  14.2 如何扩张数据结构  14.3 区间树  思考题  本章注记 第四部分 高级设计和分析技术 第15章 动态规划  15.1 钢条切割  15.2 矩阵链乘法  15.3 动态规划原理  15.4 最长公共子序列  15.5 最优二叉搜索树  思考题  本章注记 第16章 贪心算法  16.1 活动选择问题  16.2 贪心算法原理  16.3 赫夫曼编码  16.4 拟阵和贪心算法  16.5 用拟阵求解任务调度问题  思考题  本章注记 第17章 摊还分析  17.1 聚合分析  17.2 核算法  17.3 势能法  17.4 动态表   17.4.1 表扩张   17.4.2 表扩张和收缩  思考题  本章注记 第五部分 高级数据结构 第18章 B树  18.1 B树的定义  18.2 B树上的基本操作  18.3 从B树中删除关键字  思考题  本章注记 第19章 斐波那契堆  19.1 斐波那契堆结构  19.2 可合并堆操作  19.3 关键字减值和删除一个结点  19.4 最大度数的界  思考题  本章注记 第20章 van Emde Boas树  20.1 基本方法  20.2 递归结构   20.2.1 原型van Emde Boas结构   20.2.2 原型van Emde Boas结构上的操作  20.3 van Emde Boas树及其操作   20.3.1 van Emde Boas树   20.3.2 van Emde Boas树的操作  思考题  本章注记 第21章 用于不相交集合的数据结构  21.1 不相交集合的操作  21.2 不相交集合的链表表示  21.3 不相交集合森林  *21.4 带路径压缩的按秩合并的分析  思考题  本章注记 第六部分 图算法 第22章 基本的图算法  22.1 图的表示  22.2 广度优先搜索  22.3 深度优先搜索  22.4 拓扑排序  22.5 强连通分量  思考题  本章注记 第23章 最小生成树  23.1 最小生成树的形成  23.2 Kruskal算法和Prim算法  思考题  本章注记 第24章 单源最短路径  24.1 Bellman?Ford算法  24.2 有向无环图中的单源最短路径问题  24.3 Dijkstra算法  24.4 差分约束和最短路径  24.5 最短路径性质的证明  思考题  本章注记 第25章 所有结点对的最短路径问题  25.1 最短路径和矩阵乘法  25.2 Floyd?Warshall算法  25.3 用于稀疏图的Johnson算法  思考题  本章注记 第26章 最大流  26.1 流网络  26.2 Ford\Fulkerson方法  26.3 最大二分匹配  26.4 推送重贴标签算法  26.5 前置重贴标签算法  思考题  本章注记 第七部分 算法问题选编 第27章 多线程算法  27.1 动态多线程基础  27.2 多线程矩阵乘法  27.3 多线程归并排序  思考题  本章注记 第28章 矩阵运算  28.1 求解线性方程组  28.2 矩阵求逆  28.3 对称正定矩阵和最小二乘逼近  思考题  本章注记 第29章 线性规划  29.1 标准型和松弛型  29.2 将问题表达为线性规划  29.3 单纯形算法  29.4 对偶性  29.5 初始基本可行解  思考题  本章注记 第30章 多项式与快速傅里叶变换  30.1 多项式的表示  30.2 DFT与FFT  30.3 高效FFT实现  思考题  本章注记 第31章 数论算法  31.1 基础数论概念  31.2 最大公约数  31.3 模运算  31.4 求解模线性方程  31.5 中国余数定理  31.6 元素的幂  31.7 RSA公钥加密系统  31.8 素数的测试  31.9 整数的因子分解  思考题  本章注记 第32章 字符串匹配  32.1 朴素字符串匹配算法  32.2 Rabin\Karp算法  32.3 利用有限自动机进行字符串匹配  32.4 Knuth?Morris?Pratt算法  思考题  本章注记 第33章 计算几何学  33.1 线段的性质  33.2 确定任意一对线段是否相交  33.3 寻找凸包  33.4 寻找最近点对  思考题  本章注记 第34章 NP完全性  34.1 多项式时间  34.2 多项式时间的验证  34.3 NP完全性与可归约性  34.4 NP完全性的证明  34.5 NP完全问题   34.5.1 团问题   34.5.2 顶点覆盖问题   34.5.3 哈密顿回路问题   34.5.4 旅行商问题   34.5.5 子集和问题  思考题  本章注记 第35章 近似算法  35.1 顶点覆盖问题  35.2 旅行商问题  35.2.1 满足三角不等式的旅行商问题  35.2.2 一般旅行商问题  35.3 集合覆盖问题  35.4 随机化和线性规划  35.5 子集和问题  思考题  本章注记 第八部分 附录:数学基础知识 附录A 求和  A.1 求和公式及其性质  A.2 确定求和时间的界  思考题  附录注记 附录B 集合等离散数学内容  B.1 集合  B.2 关系  B.3 函数  B.4 图  B.5 树   B.5.1 自由树   B.5.2 有根树和有序树   B.5.3 二叉树和位置树  思考题  附录注记 附录C 计数与概率  C.1 计数  C.2 概率 C.3 离散随机变量  C.4 几何分布与二项分布  *C.5 二项分布的尾部  思考题  附录注记 附录D 矩阵  D.1 矩阵与矩阵运算  D.2 矩阵基本性质  思考题  附录注记
目录: 目录(Table of Contents) 前言(Preface) 第一部分(Part I) 基础(Foundations)    第一章 计算中算法的角色(The Role of Algorithms in Computing)   第二章 开始(Getting Started)    第三章 函数的增长率(Growth of Functions)    第四章 递归(Recurrences)   第五章 概率分析与随机化算法(Probabilistic Analysis and Randomized Algorithms) 第二部分(Part II) 排序与顺序统计(Sorting and Order Statistics)    第六章 堆排序(Heapsort)    第七章 快速排序(Quicksort)   第八章 线性时间中的排序(Sorting in Linear Time)   第九章 中值与顺序统计(Medians and Order Statistics) 第三部分(Part III) 数据结构(Data Structures)   第十章 基本的数据结构(Elementary Data Structures)   第十一章 散列表(Hash Tables)    第十二章 二叉查找树(Binary Search Trees)    第十三章 红-黑树(Red-Black Trees)    第十四章 扩充的数据结构(Augmenting Data Structures) 第四部分(Part IV) 高级的设计与分析技术(Advanced Design and Analysis Techniques)   第十五章 动态规划(Dynamic Programming)    第十六章 贪婪算法(Greedy Algorithms)    第十七章 分摊分析(Amortized Analysis) 第五部分(Part V) 高级的数据结构(Advanced Data Structures)   第十八章 B-树(B-Trees)    第十九章 二项式堆(Binomial Heaps)    第二十章 斐波纳契堆(Fibonacci Heaps)  第二十一章 不相交集的数据结构(Data Structures for Disjoint Sets) 第六部分(Part VI) 图算法(Graph Algorithms)    第二十二章 基本的图算法(Elementary Graph Algorithms)    第二十三章 最小生成树(Minimum Spanning Trees)   第二十四章 单源最短路径(Single-Source Shortest Paths)    第二十五章 全对的最短路径(All-Pairs Shortest Paths)    第二十六章 最大流(Maximum Flow) 第七部分(Part VII) 精选的主题(Selected Topics)    第二十七章 排序网络(Sorting Networks)    第二十八章 矩阵运算(Matrix Operations)  第二十九章 线性规划(Linear Programming)    第三十章 多项式与快速傅里叶变换(Polynomials and the FFT)   第三十一章 数论算法(Number-Theoretic Algorithms)    第三十二章 字符串匹配(String Matching)    第三十三章 计算几何学(Computational Geometry)   第三十四章 NP-完备性(NP-Completeness)    第三十五章 近似算法(Approximation Algorithms) 第八部分(Part VIII) 附录:数学背景(Mathematical Background) 附录A 求和(Summations) 附录B 集合,等等。(Sets, Etc.) 附录C 计数与概率(Counting and Probability) 参考文献(Bibliography) 索引(Index)
### 回答1: 《算法导论》第三版答案PDF是一本非常有价值的资料,其中包含了本书提出的各种算法问题的详细解答。这本答案PDF的编写者经过了严格的选择和考核,他们大都是计算机科学领域的权威专家和学者,拥有丰富的经验和深入的知识。 这本答案PDF主要分为三个部分,第一部分是对于算法的分析和设计,第二部分是算法基础和数据结构,第三部分是高级主题和高级算法。每一章节都有详尽的解答,从基本的数据结构,例如栈、队列和堆,到高级算法,例如线性规划和哈希表,每个问题都有详尽的解答,便于读者深入理解算法背后的原理和技巧。 该答案PDF还提供了大量的例子和练习题,让读者能够在学习过程中实时测试自己的理解和掌握程度。此外,该答案PDF还提供了许多实用的技巧、经验和应用场景,使读者能够更好地应用所学知识来解决实际的问题。 总的来说,《算法导论》第三版答案PDF是一本非常有价值的资料,不仅能够帮助读者更加深入地理解算法的背后原理和技巧,还能够帮助读者应用所学知识来解决实际的问题。无论是计算机科学学生还是职业程序员,都可以从中受益匪浅。 ### 回答2: “算法导论第三版答案 pdf”指的是《算法导论》这本书的答案解析。这本书是计算机科学领域中一本非常重要的教材,其内容涵盖了算法设计、算法分析和算法实现三个方面。 由于《算法导论》中的题目非常经典,因此很多读者都希望可以得到书中题目的答案解析,以便更好地理解和应用其中的算法知识。 目前,网络上可以找到一些《算法导论》答案解析的PDF文档。这些文档通常由一些对该书有深刻理解的计算机科学专家或者学术界人士撰写。这些答案解析包括书中大部分习题的解答和讨论,能够帮助读者更加深入地掌握其中的算法知识。 然而,需要注意的是,仅仅阅读答案解析是远远不够的。为了真正掌握《算法导论》中的算法知识,读者需要通过反复的练习和实践来加深理解,甚至可以自己设计算法并实现其代码。只有这样,才能真正掌握算法知识,提高自己的编程能力。 ### 回答3: 算法导论第三版答案 PDF是一本对算法导论第三版中的习题进行详细解答的参考书籍。该书可以帮助读者更好地理解和掌握算法导论这本指导性书籍中包含的众多算法和数据结构。 这本答案集涵盖了算法导论第三版中的全部习题,包括题目和答案。它涉及的主题包括渐进分析、排序和选择、数据结构(如堆、散列表、二叉搜索树等)、高级设计和分析技术(如贪心、动态规划、图算法和NP完备性)等。对于学习算法导论的人来说,这是一本非常有用的参考书。 此外,算法导论第三版答案PDF还提供了对习题解答的分析和讨论,这可以帮助读者更好地理解解题的过程和思路。通过阅读该书,读者可以加深对数据结构和算法的理解,提高自己解决问题的能力。因此,如果您正在学习算法导论或者需要更加深入地掌握里面的知识,这本答案集将是您的一个绝佳资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值