读书笔记《TAOCP》 V3 S5.1

本文介绍了排序算法的基本概念及其重要应用,包括解决“一起性”问题、匹配文件中的项及通过键码查找信息等。文中详细解释了排序的过程、稳定性的含义,并通过实例展示了如何利用反序的概念重构序列。

一年三百六十五天天天码代码
还没想好怎么接



第三卷——主讲排序和查找。

排序(Sorting)

排序的某些重要应用:
1.解决“一起性”的问题,即把具有相同标志的所有项目连在一起。
2.匹配在两个或多个文件中的项。
3.通过键码查找信息。

排序简介

For instance, N个记录,每个记录 Rj 有一个键码 Kj 。排序过程中记录中只有键码其作用,记录中其他信息对排序没有任何影响,所以也可以说键码支配着整个排序过程。
在键码上确定一个次序关系“<”,则会确定一个排序规则,也确定了排序的目标——记录以键码非递减的次序来排序,如下:
最终获得一个排列 p(1),p(2),...,p(N) ,正好以非递减的次序排列了它们的键码: Kp(1)Kp(2)...Kp(N)

排序是稳定的,即具有相同键码的记录保留它们原来的相对次序不变。(针对键码相同的记录

p(i)<p(j)(Kp(1)=Kp(2) and i<j)

For example,原来是:

原1原2原3原4
8535

那么排完后应该是:(排序后序列 p(1),p(2),...,p(N) 对应的原2依旧在原4前,排序是稳定的)

p(1)p(2)p(3)p(4)
原3原2原4原1
3558

而不是:

p(1)p(2)p(3)p(4)
原3原4原2原1
3558

排序的组合性质

反序
简单定义:
a1,a2,...an 是集合 1,2,...,n 的一个排序,如果 i<j ,且 ai>aj ,则对偶 (ai,aj) 称为一个反序。

For example, 3,1,4,2 有三个反序: (3,1),(3,2),(4,2) 。其中,1的反序 (3,1) ,2的反序 (3,2),(4,2) ,3,4没有反序。
再For example,排列 5,9,1,8,2,6,4,7,3
1的反序 b1=2 ,有两个反序: (5,1),(9,1)
2的反序 b2=3 ,有三个反序: (5,2),(9,2),(8,2)
同理可以算出 b3=6,b4=4,b5=0,b6=2,b7=2,b8=1,b9=0

通过反序表,我们可以重新构造这个序列:(先放9)
先写下数字9,得到序列:

9

因为b8=1,所以8在9后面,才能形成反序 (9,8) ,得到序列:
9,8

因为 b7=2 ,所以7前面有两个比它大的数字,才能形成两个反序,得到序列:
9,8,7

因为 b6=2 ,所以6前面只有两个比它大的数字,才能形成只两个反序,得到序列:
9,8,6,7

因为 b5=0 ,所以5前面没有比它大的数字,得到序列:
5,9,8,6,7

后面类似做插入操作,可得到原序列:
5,9,1,8,2,6,4,7,3


未完待续。

CONTACT ME

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值