整数坐标排序.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
整数坐标排序

整数坐标排序   1、?线性排序算法原理   32位整数排序算法的原型是基于不等式K+1KK-1的,该式子对于任何K值都成立。那么如果有一个坐标,长度为Kn,每个Kx都可以映射到这个坐标轴的相应点上。这样一来,就可以得到一系列自然次序排列的点。现在针对具体的例子来看看这个算法的具体内容,假设有一个数例:9, 6, 3 与 7。取第一个数(9),将它从坐标轴原点开始向右移动9个普通单元并标记这个点。然后,取下一个数(6)并重复操作等。这些操作的结果如图1所示。   现在,从左向右沿坐标线移动, 并将没有标记的所有点都丢弃掉(或者突出显示经过标记的点)。于是,得到一系列按升序排列的数。如果从右往左沿坐标线移动,那么将得到一系列按降序排列的数。   这里有一点最令人感兴趣:不管数是如何给定的,对它们进行排序所需要的操作次数将总是等于N+VAL_N,其中N是待排序的数据个数,而VAL_N是数据可能取值的最大个数。由于VAL_N是个常数,因此可以将它从估算算法复杂性公式中去掉。之后,这个公式就变成为O(N)了。   可能读者已经注意到这种排序算法的弱点了。性能增益是以牺牲内存为代价的。线性排序算法在内存消耗方面的开销很大。下面是关的一些估算值。如表1所示:   虽然存在这样的弱点,但是却仍然盖不住它的优点,在算法分析和设计中,人们通常总是将最快的算法与最有效的算法等同起来,这是因为时间需求常常是决定算法在实际中是否真正有效的决定性因素。用它跟快速排序算法比较,线性排序算法时间复杂度为O(n),而快速排序算法平均需要O(nlgn)次操作,并且在最坏的情况下需要O(m2)次操作。 ?针对上面线性排序算法的弱点,如果要排序的数数值范围在0 到 2147483647,那么至少需要8GB的内存,需要的内存在现实中将是不可能提供的;并且也不能排序正数跟负数相混合的情况,我们必须对这个算法加以改进,以满足现实应用中的需求。 2、?改进后的线性排序算法 2.1? 改进思想:   在日常应用程序中,整数最常用的数值一般都处在百万以内,而构造一百万个坐标点的坐标,需要大约4M的内存,这在现在的计算机内存配置上完全是可行的。于是我们专门针对这种特点对原型改造,将4字节的32位整数按位分类排序(4字节的整数有32位),把32位分成两段,前12位为一段,后20位为第二段,用十六进制来表示,既0XFFF00000(高12位)和0X000FFFFF(低20位)。分段以后我们在影射处在0到1048576的整数时,就可以按原型的方法直接影射在1048576个坐标点的坐标上,对大于1048576的值,我们会继续对它的低20位分段排序,这种处理方式极好地保证了最常用的整数值的排序效率。 2.2?影射坐标定义:   一个32位的整数,它能表示值的区间为 -2147483648 到 2147483647,按照改进思相,我们把这个区间分为三段:   1)?0XFFF00000 到 0XFFFFFFFF 区间,代表的值为期 -1048576 到 -1,它们的高十二位值都是相同的,为 0XFFF,在排序的时候我们把它们归为一类,可以影射到代表负数的 1048576 个坐标点的坐标上,我们把这个坐标设为 a 坐标   2)?0到 0X000FFFFF 区间,代表的值为 0 到 1048576,它们的高十二位值也是相同的,为 0X000,也把它们归为一类,可以影射到代表正数的 1048576 个坐标点的坐标上,我们把这个坐标设为 b 坐标   3)?剩余的两个区间为 0到 0XFFEFFFFF 区间和 0X001FFFFF 到 0x7FFFFFFF 区间,它们分别表示的范围是 -2147483648到 -1048577 和1048577 到2147483647, 处在这个区间的值,我们先它们按各自的前 12 位的值影射到 4096 个坐标点的坐标上(0XFFF 转为十进制为 4096),我们把这个坐标设为 c 坐标   4)?对于处在0到 0XFFEFFFFF 区间和 0X001FFFFF 到 0x7FFFFFFF 区间的情况,我们将把它们按高 12 位分类以后,不能立即分析出其大小的(一个坐标点上影射有两个以上的整数),再对其低 20 位分段,进行第二次影射。第一段为低20位的前12位,坐标点数为4096个,我们把这个坐标设为 d 坐标   5)?对处在0到 0XFFEFFFFF 区间和 0X001FFFFF 到 0x7FFFFFFF 区间的情况,经过第二次影射以后还不能立即区分大小的,再对它们的低20位的低8位进行影射到256个坐标点的坐标上,我们把这个坐标设为 e 坐标   由上面可以看出,我们总共定义

文档评论(0)

xy88118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档